Skip to content
Snippets Groups Projects
  • George Joseph's avatar
    59591860
    res_pjsip: Use a MD5 hash for static Contact IDs · 59591860
    George Joseph authored
    When 90d9a707 was merged, it mostly tested dynamic contacts created as
    a result of registering a PJSIP endpoint. Contacts generated in this
    fashion typically have a long alphanumeric string as their object identifier,
    which maps reasonably well for StatsD. Unfortunately, this doesn't work in the
    general case. StatsD treats both '.' and ':' characters as special characters.
    In particular, having a ':' appear in the middle of a StatsD metric will
    result in the metric being rejected.
    
    This causes some obvious issues with SIP URIs.
    
    The StatsD API should not be responsible for escaping the metric name passed
    to it. The metric is treated as a single long string, and it would be
    challenging to know what to escape in the string passed to the function.
    Likewise, we don't want to escape the metric in PJSIP, as that involves
    overhead that is wasted when either res_statsd isn't loaded or enabled.
    
    This patch takes an alternative approach. The Contact ID has been changed
    to be "aor@@uri_hash" instead of "aor@@uri". This (a) won't contain any of the
    aforementioned special characters, (b) can be done on Contact creation,
    which has minimal impact on run-time performance, and (c) also conforms to an
    earlier commit that changed the ID for dynamic contacts.
    
    The downside of this is that StatsD users will have to map SHA1 hashes back to
    the Contacts that are emitting the statistics. To that end, the CLI commands
    have been updated to include the first 10 characters of the MD5 hash, which
    should be enough to match what is shown in Graphite (or some other StatsD
    backend).
    
    ASTERISK-25595 #close
    
    Change-Id: Ic674a3307280365b4a45864a3571c295b48a01e2
    Reported-by: Matt Jordan
    Tested-by: George Joseph
    59591860
    History
    res_pjsip: Use a MD5 hash for static Contact IDs
    George Joseph authored
    When 90d9a707 was merged, it mostly tested dynamic contacts created as
    a result of registering a PJSIP endpoint. Contacts generated in this
    fashion typically have a long alphanumeric string as their object identifier,
    which maps reasonably well for StatsD. Unfortunately, this doesn't work in the
    general case. StatsD treats both '.' and ':' characters as special characters.
    In particular, having a ':' appear in the middle of a StatsD metric will
    result in the metric being rejected.
    
    This causes some obvious issues with SIP URIs.
    
    The StatsD API should not be responsible for escaping the metric name passed
    to it. The metric is treated as a single long string, and it would be
    challenging to know what to escape in the string passed to the function.
    Likewise, we don't want to escape the metric in PJSIP, as that involves
    overhead that is wasted when either res_statsd isn't loaded or enabled.
    
    This patch takes an alternative approach. The Contact ID has been changed
    to be "aor@@uri_hash" instead of "aor@@uri". This (a) won't contain any of the
    aforementioned special characters, (b) can be done on Contact creation,
    which has minimal impact on run-time performance, and (c) also conforms to an
    earlier commit that changed the ID for dynamic contacts.
    
    The downside of this is that StatsD users will have to map SHA1 hashes back to
    the Contacts that are emitting the statistics. To that end, the CLI commands
    have been updated to include the first 10 characters of the MD5 hash, which
    should be enough to match what is shown in Graphite (or some other StatsD
    backend).
    
    ASTERISK-25595 #close
    
    Change-Id: Ic674a3307280365b4a45864a3571c295b48a01e2
    Reported-by: Matt Jordan
    Tested-by: George Joseph