summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES11
-rw-r--r--apps/app_voicemail.c21
-rw-r--r--configs/samples/voicemail.conf.sample10
3 files changed, 42 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
index 0221cc5f5..50e85b4a5 100644
--- a/CHANGES
+++ b/CHANGES
@@ -9,6 +9,17 @@
==============================================================================
------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 13.11.0 to Asterisk 13.12.0 ----------
+------------------------------------------------------------------------------
+
+app_voicemail
+------------------
+ * Added "tps_queue_high" and "tps_queue_low" options.
+ The options can modify the taskprocessor alert levels for this module.
+ Additional information can be found in the sample configuration file at
+ config/samples/voicemail.conf.sample.
+
+------------------------------------------------------------------------------
--- Functionality changes from Asterisk 13.10.0 to Asterisk 13.11.0 ----------
------------------------------------------------------------------------------
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 321e5c9c0..5eb767c1c 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -13453,6 +13453,8 @@ static int actual_load_config(int reload, struct ast_config *cfg, struct ast_con
int x;
unsigned int tmpadsi[4];
char secretfn[PATH_MAX] = "";
+ long tps_queue_low;
+ long tps_queue_high;
#ifdef IMAP_STORAGE
ast_copy_string(imapparentfolder, "\0", sizeof(imapparentfolder));
@@ -14028,6 +14030,25 @@ static int actual_load_config(int reload, struct ast_config *cfg, struct ast_con
pagerbody = ast_strdup(substitute_escapes(val));
}
+ tps_queue_high = AST_TASKPROCESSOR_HIGH_WATER_LEVEL;
+ if ((val = ast_variable_retrieve(cfg, "general", "tps_queue_high"))) {
+ if (sscanf(val, "%30ld", &tps_queue_high) != 1 || tps_queue_high <= 0) {
+ ast_log(AST_LOG_WARNING, "Invalid the taskprocessor high water alert trigger level '%s'\n", val);
+ tps_queue_high = AST_TASKPROCESSOR_HIGH_WATER_LEVEL;
+ }
+ }
+ tps_queue_low = -1;
+ if ((val = ast_variable_retrieve(cfg, "general", "tps_queue_low"))) {
+ if (sscanf(val, "%30ld", &tps_queue_low) != 1 ||
+ tps_queue_low < -1 || tps_queue_high < tps_queue_low) {
+ ast_log(AST_LOG_WARNING, "Invalid the taskprocessor low water clear alert level '%s'\n", val);
+ tps_queue_low = -1;
+ }
+ }
+ if (ast_taskprocessor_alert_set_levels(mwi_subscription_tps, tps_queue_low, tps_queue_high)) {
+ ast_log(AST_LOG_WARNING, "Failed to set alert levels for voicemail taskprocessor.\n");
+ }
+
/* load mailboxes from users.conf */
if (ucfg) {
for (cat = ast_category_browse(ucfg, NULL); cat ; cat = ast_category_browse(ucfg, cat)) {
diff --git a/configs/samples/voicemail.conf.sample b/configs/samples/voicemail.conf.sample
index bb5f2495d..248e142eb 100644
--- a/configs/samples/voicemail.conf.sample
+++ b/configs/samples/voicemail.conf.sample
@@ -376,6 +376,16 @@ sendvoicemail=yes ; Allow the user to compose and send a voicemail while inside
; defaults to being off
; backupdeleted=100
+; Asterisk Task Processor Queue Size
+; On heavy loaded system you may need to increase 'app_voicemail' taskprocessor queue.
+; If the taskprocessor queue size reached high water level, the alert is triggered.
+; If the alert is set then some modules (for example pjsip) slow down its production
+; until the alert is cleared.
+; The alert is cleared when taskprocessor queue size drops to the low water clear level.
+; The next options set taskprocessor queue levels for this module.
+; tps_queue_high=500 ; Taskprocessor high water alert trigger level.
+; tps_queue_low=450 ; Taskprocessor low water clear alert level.
+ ; The default is -1 for 90% of high water level.
[zonemessages]
; Users may be located in different timezones, or may have different