]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_voicemail: Add taskprocessor alert level options. 22/3422/2
authorAlexei Gradinari <alex2grad@gmail.com>
Fri, 5 Aug 2016 20:34:15 +0000 (16:34 -0400)
committerAlexei Gradinari <alex2grad@gmail.com>
Fri, 5 Aug 2016 20:47:07 +0000 (16:47 -0400)
On heavy loaded system with IMAP or DB storage,
'app_voicemail' taskprocessor queue could reach 500 scheduled tasks.
It could happen when the IMAP or DB server dies or is unreachable.
It could happen on startup when there are many (thousands)
realtime endpoints configured with unsolicited mwi.
If the taskprocessor queue reaches the high water level
then the alert is triggered and pjsip stops processing new requests
until the queue reaches the low water level to clear the alert.

This patch adds 2 new 'general' configuration options
to tune taskprocessor alert levels:
'tps_queue_high' - Taskprocessor high water alert trigger level.
'tps_queue_low' - Taskprocessor low water clear alert level

ASTERISK-26229 #close

Change-Id: I766294fbffedf64053c0d9ac0bedd3109f043ee8

CHANGES
apps/app_voicemail.c
configs/samples/voicemail.conf.sample

diff --git a/CHANGES b/CHANGES
index a43edab338d0007b1615cc2985e9e14b3056cb7f..3eadadf09272868180163363d66fc2f97af16d01 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -378,6 +378,17 @@ cdr_csv
    post-1.8 CDR columns 'peeraccount', 'linkedid', and 'sequence'.
 
 
+------------------------------------------------------------------------------
+--- 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 ----------
 ------------------------------------------------------------------------------
index 894038bdbc01ef9c52e4d26ce50e03a6f5380c14..4727e2ee5aff68d4aae731d7153cec327e0c4f56 100644 (file)
@@ -13532,6 +13532,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));
@@ -14107,6 +14109,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)) {
index bb5f2495de4b6679766c21cb23940da3e8d18ec4..248e142eb504ed0d6b21efc8c241757eee815193 100644 (file)
@@ -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