Skip to content
Snippets Groups Projects
Commit 4b3d3fc7 authored by Richard Mudgett's avatar Richard Mudgett
Browse files

res_pjsip_outbound_registration.c: Filter redundant statsd reporting.

Increasing the testsuite shutdown timeout before forcibly killing
Asterisk allowed more events to be sent out.  Some tests failed as
a result.  The tests/channels/pjsip/statsd/registrations failed
because we now get the statsd events that a comment in the test
configuration stated couldn't be intercepted.  Unfortunately, we
get a variable number of events because of internal status state
transition races generating redundant statsd events.

We were reporting redundant statsd PJSIP.registrations.state changes
for internal state changes that equated to the same thing publicly.

* Made update_client_state_status() filter out redundant statsd
updates.

ASTERISK-26527

Change-Id: If851c7d514bb530d9226e4941ba97dcf52000646
parent cd5d9d1d
No related merge requests found
...@@ -79,6 +79,12 @@ res_pjproject ...@@ -79,6 +79,12 @@ res_pjproject
* Added new pjproject.conf startup section "log_level' option to set the * Added new pjproject.conf startup section "log_level' option to set the
initial maximum PJPROJECT logging level. initial maximum PJPROJECT logging level.
res_pjsip_outbound_registration
------------------
* Statsd no longer logs redundant status PJSIP.registrations.state changes
for internal state transitions that don't change the reported public status
state.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.1.0 to Asterisk 14.2.0 ------------ --- Functionality changes from Asterisk 14.1.0 to Asterisk 14.2.0 ------------
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
......
...@@ -627,15 +627,30 @@ static void schedule_registration(struct sip_outbound_registration_client_state ...@@ -627,15 +627,30 @@ static void schedule_registration(struct sip_outbound_registration_client_state
static void update_client_state_status(struct sip_outbound_registration_client_state *client_state, enum sip_outbound_registration_status status) static void update_client_state_status(struct sip_outbound_registration_client_state *client_state, enum sip_outbound_registration_status status)
{ {
const char *status_old;
const char *status_new;
if (client_state->status == status) { if (client_state->status == status) {
/* Status state did not change at all. */
return;
}
status_old = sip_outbound_registration_status_str(client_state->status);
status_new = sip_outbound_registration_status_str(status);
client_state->status = status;
if (!strcmp(status_old, status_new)) {
/*
* The internal status state may have changed but the status
* state we tell the world did not change at all.
*/
return; return;
} }
ast_statsd_log_string_va("PJSIP.registrations.state.%s", AST_STATSD_GAUGE, "-1", 1.0, ast_statsd_log_string_va("PJSIP.registrations.state.%s", AST_STATSD_GAUGE, "-1", 1.0,
sip_outbound_registration_status_str(client_state->status)); status_old);
ast_statsd_log_string_va("PJSIP.registrations.state.%s", AST_STATSD_GAUGE, "+1", 1.0, ast_statsd_log_string_va("PJSIP.registrations.state.%s", AST_STATSD_GAUGE, "+1", 1.0,
sip_outbound_registration_status_str(status)); status_new);
client_state->status = status;
} }
/*! \brief Callback function for unregistering (potentially) and destroying state */ /*! \brief Callback function for unregistering (potentially) and destroying state */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment