[SR-Users] Async module taking down our server

Will Ferrer will.ferrer at switchsoft.com
Sat Jan 31 01:11:04 CET 2015


Hi Brandon

The feature fixed some issues one of our clients auto dialer were having.

I hope you have a great weekend.

All the best.

Will

On Thu, Jan 29, 2015 at 5:06 AM, Brandon Armstead <brandon at cryy.com> wrote:

> Why not just kill the call and have billing fix up for minimum duration
> occur during CDR creation?  Does not make sense to delay Hangup just to
> meet minimum duration.
>
> Sent from my iPhone
>
> On Jan 28, 2015, at 5:37 PM, Will Ferrer <will.ferrer at switchsoft.com>
> wrote:
>
> Hi Daniel
>
> Yeah I am happy to be able to report the success. Thanks for everything as
> always!
>
> I hope you are well.
>
> Will
>
> On Wed, Jan 28, 2015 at 5:54 AM, Daniel-Constantin Mierla <
> miconda at gmail.com> wrote:
>
>>  Hello,
>>
>> great that it was sorted out and it was not on Kamailio side :-)
>>
>> Also, glad to hear that async processing did increase capacity to handle
>> more concurrent calls, even it was causing troubles to other applications
>> ...
>>
>> Cheers,
>> Daniel
>>
>>
>> On 28/01/15 05:40, Will Ferrer wrote:
>>
>> Hello
>>
>>  I wanted to give an update on this.
>>
>>  My business partner that found the issue and has been monitoring the
>> problem has tracked down the issue. It turns out that the features we
>> implemented using the async module were leading to more calls going on con
>> currently (as they were intended to) and this was causing and issue with
>> voip monitor. So the issue was not with the Async module.
>>
>>  All the best.
>>
>>  Will Ferrer
>>
>>  Switchsoft
>>
>> On Mon, Jan 19, 2015 at 8:43 PM, Will Ferrer <will.ferrer at switchsoft.com>
>> wrote:
>>
>>> Hi All
>>>
>>> We are trying to use the async module to to delay sending a bye on from
>>> one end of the call to the other.
>>>
>>> We are using async_route(routename, seconds) to delay
>>> the WITHINDLG route. The idea is that in the future we want to be able to
>>> have our billing min duration enforced (though currently we are having
>>> issues with the dialog module that we are discussing in another thread).
>>>
>>>  After running this on our deploy servers, the delays before sending on
>>> the byes get longer and longer, and then kamailio goes down. Then the
>>> receive udp buffer fills up.
>>>
>>> We tried it with both 4 and 400 async workers, and it made no difference.
>>>
>>>  I am including a screen capture of the servers stats when this happens
>>> taken from voip monitor.
>>>
>>>  Here are the relevant parts of the config:
>>>
>>>  ...
>>> loadmodule "async.so"
>>>  ...
>>> modparam("async", "workers", ASYNC_THREADS)
>>>  ...
>>> request_route {
>>> ...
>>> route(DELAYED_BYE_STATIC);
>>>  ...
>>>  route[DELAYED_BYE_STATIC] {
>>>  xlog("L_DEBUG","route DELAYED_BYE_STATIC");
>>>  #!ifdef WITH_DELAYED_BYE_STATIC
>>>  if (is_method("BYE")) {
>>>  xlog("L_DEBUG","route DELAYED_BYE_STATIC, from self \n");
>>>  #if (from_uri == myself) {
>>>  if ((allow_trusted() || allow_source_address()) && from_uri == myself)
>>> {
>>>  xlog("L_DEBUG","route DELAYED_BYE_STATIC, Bye detected, from self \n");
>>>  send_reply("200", "OK");
>>>  xlog("L_DEBUG","route DELAYED_BYE_STATIC, sent 200 about to sleep \n");
>>>  setflag(FLT_ACC); # do accounting ...
>>>  setflag(FLT_ACCFAILED); # ... even if the transaction fails
>>>  if (has_totag()) {
>>>  xlog("L_DEBUG","route DELAYED_BYE_STATIC, sleeping to
>>> WITHINDLG_DELAYED \n");
>>>  async_route("WITHINDLG_DELAYED", MIN_DURATION);
>>>  } else {
>>>  xlog("L_DEBUG","route DELAYED_BYE_STATIC, sleeping to WITHINDLG \n");
>>>  async_route("WITHINDLG", MIN_DURATION);
>>>  }
>>>  xlog("L_DEBUG","route DELAYED_BYE_STATIC, slept\n");
>>>  exit;
>>>  }
>>>  }
>>>  #!endif
>>>  return;
>>> }
>>>  ...
>>>  route[WITHINDLG_DELAYED] {
>>>  xlog("L_DEBUG", "route WITHINDLG_DELAYED: triggered \n");
>>>  $avp(was_delayed) = 1;
>>>  route(WITHINDLG);
>>> }
>>>  ...
>>>  route[WITHINDLG] {
>>>  xlog("L_DEBUG", "route WITHINDLG: will -- DLG triggered, request
>>> method: $rm \n");
>>>  #!ifdef WITH_DISPATCHER
>>>  if(is_method("BYE|CANCEL")) {
>>>  xlog("L_DEBUG","route WITHINDLG:  cancel or bye detected, request
>>> method: $rm \n");
>>>  #!ifdef WITH_DISPATCHER_LOAD_AWARE
>>>  xlog("L_DEBUG","route WITHINDLG: running ds_load_update, request
>>> method: $rm \n");
>>>  ds_load_update();
>>>  #dlg_get ("$ci","$ft","$tt");
>>>                  #dlg_bye ("all");
>>>         #!endif
>>>  }
>>>  #!endif
>>>
>>>  if (has_totag() || $avp(was_delayed) == 1) {
>>>  xlog("L_DEBUG", "route WITHINDLG: will -- DLG has totag or
>>> was_delayed: $avp(was_delayed)  \n");
>>>  # sequential request withing a dialog should
>>>  # take the path determined by record-routing
>>>  if (loose_route()) {
>>>  xlog("L_DEBUG", "route WITHINDLG: will -- DLG has loose route \n");
>>>  route(DLGURI);
>>>  if (is_method("BYE")) {
>>>  xlog("L_DEBUG","route WITHINDLG: BYE detected");
>>>  setflag(FLT_ACC); # do accounting ...
>>>  setflag(FLT_ACCFAILED); # ... even if the transaction fails
>>>  xlog("L_DEBUG","route WITHINDLG: ACC flag set");
>>>   }
>>>  else if ( is_method("ACK") ) {
>>>  # ACK is forwarded statelessy
>>>  route(NATMANAGE);
>>>  }
>>>  else if ( is_method("NOTIFY") ) {
>>>  # Add Record-Route for in-dialog NOTIFY as per RFC 6665.
>>>  record_route();
>>>  }
>>>  xlog("L_DEBUG", "route WITHINDLG: will -- DLG RELAY 1\n");
>>>  route(RELAY);
>>>  } else {
>>>  xlog("L_DEBUG", "route WITHINDLG: will -- DLG else \n");
>>>  if (is_method("SUBSCRIBE") && uri == myself) {
>>>  # in-dialog subscribe requests
>>>  route(PRESENCE);
>>>  exit;
>>>  }
>>>  if ( is_method("ACK") ) {
>>>  xlog("L_DEBUG", "route WITHINDLG: will -- DLG is ack \n");
>>>  if ( t_check_trans() ) {
>>>  xlog("L_DEBUG", "route WITHINDLG: will -- DLG t_check_trans \n");
>>>  # no loose-route, but stateful ACK;
>>>  # must be an ACK after a 487
>>>  # or e.g. 404 from upstream server
>>>  xlog("L_DEBUG", "route WITHINDLG: will -- DLG RELAY 2\n");
>>>  route(RELAY);
>>>  exit;
>>>  } else {
>>>  # ACK without matching transaction ... ignore and discard
>>>  exit;
>>>  }
>>>  }
>>>  sl_send_reply("404","Not here");
>>>  }
>>>  exit;
>>>  }
>>> }
>>>  ...
>>>
>>>
>>>
>>>  Does any one know if this is a bug or a leak with in the async module,
>>> or perhaps something I am doing in my config?
>>>
>>>  Thanks in advance for an assistance you can offer me.
>>>
>>>  All the best.
>>>
>>>  Will Ferrer
>>> Switchsoft
>>>
>>>
>>>
>>
>>
>> _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing listsr-users at lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
>>
>> --
>> Daniel-Constantin Mierlahttp://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
>>
>>
>> _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
>> sr-users at lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
>>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20150130/5f1754d8/attachment.html>


More information about the sr-users mailing list