]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Taskprocessors: Increase high-water mark 24/1624/1
authorMark Michelson <mmichelson@digium.com>
Fri, 13 Nov 2015 20:19:35 +0000 (14:19 -0600)
committerMark Michelson <mmichelson@digium.com>
Fri, 13 Nov 2015 20:32:03 +0000 (15:32 -0500)
In practical tests, we have seen certain taskprocessors, specifically
Stasis subscription taskprocessors, cross the recently-added high-water
mark and emit a warning. This high-water mark warning is only intended
to be emitted when things have tanked on the system and things are
heading south quickly. In the practical tests, the Stasis taskprocessors
sometimes had a max depth of 180 tasks in them, and Asterisk wasn't in
any danger at all.

As such, this ups the high-water mark to 500 tasks instead. It also
redefines the SIP threadpool request denial number to be a multiple of
the taskprocessor high-water mark.

Change-Id: Ic8d3e9497452fecd768ac427bb6f58aa616eebce

include/asterisk/taskprocessor.h
main/taskprocessor.c
res/res_pjsip/pjsip_distributor.c

index 06368867a8f309d24666b1a7941d6fa3380a4108..6ebf0729cc7669dba73f071578787eee42291f67 100644 (file)
@@ -56,6 +56,8 @@
 
 struct ast_taskprocessor;
 
+#define AST_TASKPROCESSOR_HIGH_WATER_LEVEL 500
+
 /*!
  * \brief ast_tps_options for specification of taskprocessor options
  *
index cdac2c8a002fbb1e7a759993b4e258d9e6da9143..c8897c65db0ac9750435fd88cfa6568ec4209f49 100644 (file)
@@ -714,8 +714,6 @@ void *ast_taskprocessor_unreference(struct ast_taskprocessor *tps)
        return NULL;
 }
 
-#define HIGH_WATER_LEVEL 100
-
 /* push the task into the taskprocessor queue */
 static int taskprocessor_push(struct ast_taskprocessor *tps, struct tps_task *t)
 {
@@ -736,7 +734,7 @@ static int taskprocessor_push(struct ast_taskprocessor *tps, struct tps_task *t)
        AST_LIST_INSERT_TAIL(&tps->tps_queue, t, list);
        previous_size = tps->tps_queue_size++;
 
-       if (previous_size >= HIGH_WATER_LEVEL && !tps->high_water_warned) {
+       if (previous_size >= AST_TASKPROCESSOR_HIGH_WATER_LEVEL && !tps->high_water_warned) {
                ast_log(LOG_WARNING, "The '%s' task processor queue reached %d scheduled tasks.\n",
                        tps->name, previous_size);
                tps->high_water_warned = 1;
index 32f6154f07d9639b48e0036f4e57a936d0302007..ea7419b6eec4fb77c8092f6d41a18db9b4cf9e23 100644 (file)
@@ -245,7 +245,7 @@ static pjsip_module endpoint_mod = {
        .on_rx_request = endpoint_lookup,
 };
 
-#define SIP_MAX_QUEUE 500L
+#define SIP_MAX_QUEUE (AST_TASKPROCESSOR_HIGH_WATER_LEVEL * 3)
 
 static pj_bool_t distributor(pjsip_rx_data *rdata)
 {