Skip to content
Snippets Groups Projects
  • Joshua Colp's avatar
    882e79b7
    pjsip: Rewrite OPTIONS support with new eyes. · 882e79b7
    Joshua Colp authored
    The OPTIONS support in PJSIP has organically grown, like many things in
    Asterisk.  It has been tweaked, changed, and adapted based on situations
    run into.  Unfortunately this has taken its toll.  Configuration file
    based objects have poor performance and even dynamic ones aren't that
    great.
    
    This change scraps the existing code and starts fresh with new eyes.  It
    leverages all of the APIs made available such as sorcery observers and
    serializers to provide a better implementation.
    
    1.  The state of contacts, AORs, and endpoints relevant to the qualify
    process is maintained.  This state can be updated by external forces (such
    as a device registering/unregistering) and also the reload process.  This
    state also includes the association between endpoints and AORs.
    
    2.  AORs are scheduled and not contacts.  This reduces the amount of work
    spent juggling scheduled items.
    
    3.  Manipulation of which AORs are being qualified and the endpoint states
    all occur within a serializer to reduce the conflict that can occur with
    multiple threads attempting to modify things.
    
    4.  Operations regarding an AOR use a serializer specific to that AOR.
    
    5.  AORs and endpoint state act as state compositors.  They take input
    from lower level objects (contacts feed AORs, AORs feed endpoint state)
    and determine if a sufficient enough change has occurred to be fed further
    up the chain.
    
    6.  Realtime is supported by using observers to know when a contact has
    been registered.  If state does not exist for the associated AOR then it
    is retrieved and becomes active as appropriate.
    
    The end result of all of this is best shown with a configuration file of
    3000 endpoints each with an AOR that has a static contact.  In the old
    code it would take over a minute to load and use all 8 of my cores.  This
    new code takes 2-3 seconds and barely touches the CPU even while dealing
    with all of the OPTIONS requests.
    
    ASTERISK-26806
    
    Change-Id: I6a5ebbfca9001dfe933eaeac4d3babd8d2e6f082
    882e79b7
    History
    pjsip: Rewrite OPTIONS support with new eyes.
    Joshua Colp authored
    The OPTIONS support in PJSIP has organically grown, like many things in
    Asterisk.  It has been tweaked, changed, and adapted based on situations
    run into.  Unfortunately this has taken its toll.  Configuration file
    based objects have poor performance and even dynamic ones aren't that
    great.
    
    This change scraps the existing code and starts fresh with new eyes.  It
    leverages all of the APIs made available such as sorcery observers and
    serializers to provide a better implementation.
    
    1.  The state of contacts, AORs, and endpoints relevant to the qualify
    process is maintained.  This state can be updated by external forces (such
    as a device registering/unregistering) and also the reload process.  This
    state also includes the association between endpoints and AORs.
    
    2.  AORs are scheduled and not contacts.  This reduces the amount of work
    spent juggling scheduled items.
    
    3.  Manipulation of which AORs are being qualified and the endpoint states
    all occur within a serializer to reduce the conflict that can occur with
    multiple threads attempting to modify things.
    
    4.  Operations regarding an AOR use a serializer specific to that AOR.
    
    5.  AORs and endpoint state act as state compositors.  They take input
    from lower level objects (contacts feed AORs, AORs feed endpoint state)
    and determine if a sufficient enough change has occurred to be fed further
    up the chain.
    
    6.  Realtime is supported by using observers to know when a contact has
    been registered.  If state does not exist for the associated AOR then it
    is retrieved and becomes active as appropriate.
    
    The end result of all of this is best shown with a configuration file of
    3000 endpoints each with an AOR that has a static contact.  In the old
    code it would take over a minute to load and use all 8 of my cores.  This
    new code takes 2-3 seconds and barely touches the CPU even while dealing
    with all of the OPTIONS requests.
    
    ASTERISK-26806
    
    Change-Id: I6a5ebbfca9001dfe933eaeac4d3babd8d2e6f082