res_pjsip_registrar: Remove unavailable contacts if exceeds max_contacts

The behavior of max_contacts and remove_existing are connected.  If
remove_existing is enabled, the soonest expiring contacts are removed.
This may occur when there is an unavailable contact.  Similarly,
when remove_existing is not enabled, registrations from good
endpoints are rejected in favor of retaining unavailable contacts.

This commit adds a new AOR option remove_unavailable, and the effect
of this setting will depend on remove_existing.  If remove_existing
is set to no, we will still remove unavailable contacts when they
exceed max_contacts, if there are any. If remove_existing is set to
yes, we will prioritize the removal of unavailable contacts before
those that are expiring soonest.

ASTERISK-29525

Change-Id: Ia2711b08f2b4d1177411b1be23e970d7fdff5784
This commit is contained in:
Joseph Nadiv
2021-07-21 17:36:03 -04:00
committed by Friendly Automation
parent ea36473c45
commit 4368764032
7 changed files with 187 additions and 9 deletions

View File

@@ -0,0 +1,30 @@
"""pjsip create remove_unavailable
Revision ID: f56d79a9f337
Revises: c20d6e3992f4
Create Date: 2021-07-28 02:09:11.082061
"""
# revision identifiers, used by Alembic.
revision = 'f56d79a9f337'
down_revision = 'c20d6e3992f4'
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import ENUM
AST_BOOL_NAME = 'ast_bool_values'
AST_BOOL_VALUES = [ '0', '1',
'off', 'on',
'false', 'true',
'no', 'yes' ]
def upgrade():
ast_bool_values = ENUM(*AST_BOOL_VALUES, name=AST_BOOL_NAME, create_type=False)
op.add_column('ps_aors', sa.Column('remove_unavailable', ast_bool_values))
def downgrade():
op.drop_column('ps_aors', 'remove_unavailable')
pass