summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorAlexei Gradinari <alex2grad@gmail.com>2016-08-08 13:53:32 -0400
committerAlexei Gradinari <alex2grad@gmail.com>2016-08-08 13:57:58 -0500
commit403b63571c53719bc050f4aded696cd933995d24 (patch)
treef12ba860945a4259979e2bb1d6497faf185304d7 /contrib
parent9042ad40f2a56d6cfd4117897cbc9943253d4e09 (diff)
res_pjsip_mwi: fix unsolicited mwi blocks PJSIP stack
The PJSIP taskprocessors could be overflowed on startup if there are many (thousands) realtime endpoints configured with unsolicited mwi. The PJSIP stack could be totally unresponsive for a few minutes after boot completed. This patch creates a separate PJSIP serializers pool for mwi and makes unsolicited mwi use serializers from this pool. This patch also adds 2 new global options to tune taskprocessor alert levels: 'mwi_tps_queue_high' and 'mwi_tps_queue_low'. This patch also adds new global option 'mwi_disable_initial_unsolicited' to disable sending unsolicited mwi to all endpoints on startup. If disabled then unsolicited mwi will start processing on next endpoint's contact update. ASTERISK-26230 #close Change-Id: I4c8ecb82c249eb887930980a800c9f87f28f861a
Diffstat (limited to 'contrib')
-rw-r--r--contrib/ast-db-manage/config/versions/c7a44a5a0851_pjsip_add_global_mwi_options.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/contrib/ast-db-manage/config/versions/c7a44a5a0851_pjsip_add_global_mwi_options.py b/contrib/ast-db-manage/config/versions/c7a44a5a0851_pjsip_add_global_mwi_options.py
new file mode 100644
index 000000000..d3efa2278
--- /dev/null
+++ b/contrib/ast-db-manage/config/versions/c7a44a5a0851_pjsip_add_global_mwi_options.py
@@ -0,0 +1,35 @@
+"""pjsip: add global MWI options
+
+Revision ID: c7a44a5a0851
+Revises: 4a6c67fa9b7a
+Create Date: 2016-08-03 15:08:22.524727
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = 'c7a44a5a0851'
+down_revision = '4a6c67fa9b7a'
+
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects.postgresql import ENUM
+
+YESNO_NAME = 'yesno_values'
+YESNO_VALUES = ['yes', 'no']
+
+
+def upgrade():
+ ############################# Enums ##############################
+
+ # yesno_values have already been created, so use postgres enum object
+ # type to get around "already created" issue - works okay with mysql
+ yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False)
+
+ op.add_column('ps_globals', sa.Column('mwi_tps_queue_high', sa.Integer))
+ op.add_column('ps_globals', sa.Column('mwi_tps_queue_low', sa.Integer))
+ op.add_column('ps_globals', sa.Column('mwi_disable_initial_unsolicited', yesno_values))
+
+def downgrade():
+ op.drop_column('ps_globals', 'mwi_tps_queue_high')
+ op.drop_column('ps_globals', 'mwi_tps_queue_low')
+ op.drop_column('ps_globals', 'mwi_disable_initial_unsolicited')