<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 13, 2016 at 2:20 PM, Ben Merrills <span dir="ltr"><<a href="mailto:b.merrills@mersontech.co.uk" target="_blank">b.merrills@mersontech.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">





<div lang="EN-GB" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Let me answer your last question first.
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Asterisk doesn’t handle multiple Stasis applications connecting with the same name. The relationship between Asterisk and Stasis application
 is one to one (one web socket per application name). However, you can get round this using an ARI proxy (see below). Using an ARI proxy allows you to<u></u><u></u></span></p>
<p><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><span>1.<span style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman'">     
</span></span></span><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Have multiple instances of your application run on multiple servers<u></u><u></u></span></p>
<p><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><span>2.<span style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman'">     
</span></span></span><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Provide load balancing between application servers<u></u><u></u></span></p>
<p><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><span>3.<span style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman'">     
</span></span></span><u></u><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Failover support for your application<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">There are two implementations of an ARI proxy. The first written by me, in .NET (supports mono)can be found here
<a href="https://github.com/skrusty/AsterNET-ARI-Proxy" target="_blank">https://github.com/skrusty/AsterNET-ARI-Proxy</a><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">The second is written in GoLang and can be found here:
<a href="https://github.com/nvisibleinc/go-ari-proxy" target="_blank">https://github.com/nvisibleinc/go-ari-proxy</a><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">You can read about the concepts behind ARI proxy on my blog.
<a href="http://www.xdev.net/2015/09/18/distributed-applications-with-ari/" target="_blank">http://www.xdev.net/2015/09/18/distributed-applications-with-ari/</a><u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">With regards to stopping new calls in Asterisk, you can use the stop graceful cli command to prevent new calls from being processed
 on that asterisk box.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Hope that helps a little,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Ben<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<div style="border-style:none none none solid;border-left-width:1.5pt;border-left-color:blue;padding:0cm 0cm 0cm 4pt">
<div>
<div style="border-style:solid none none;border-top-width:1pt;border-top-color:rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">From:</span></b><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"> <a href="mailto:asterisk-app-dev-bounces@lists.digium.com" target="_blank">asterisk-app-dev-bounces@lists.digium.com</a> [mailto:<a href="mailto:asterisk-app-dev-bounces@lists.digium.com" target="_blank">asterisk-app-dev-bounces@lists.digium.com</a>]
<b>On Behalf Of </b>Nitesh Bansal<br>
<b>Sent:</b> 13 May 2016 14:56<br>
<b>To:</b> Asterisk Application Development discussion <<a href="mailto:asterisk-app-dev@lists.digium.com" target="_blank">asterisk-app-dev@lists.digium.com</a>><br>
<b>Subject:</b> [asterisk-app-dev] Moving the Asterisk Bridge from one Asterisk to another<u></u><u></u></span></p>
</div>
</div><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12pt">Hello,<u></u><u></u></p>
</div>
<p class="MsoNormal">I'm working on an ARI based bridging application.<u></u><u></u></p>
</div>
<p class="MsoNormal">My concern is how to gracefully handle the failovers, upgrades.<u></u><u></u></p>
</div>
<p class="MsoNormal">In case of planned upgrade, 0<br>
I can see following possibilities but I have no clue about how they<br>
will work out?<br>
1. Move the Bridge to the new Asterisk?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">2. Bridge the old asterisk to the new asterisk, but don't forward any new<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    calls to the Asterisk under upgrade. Wait for call count to drop to zero<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    for Asterisk under upgrade.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
<div>
<p class="MsoNormal">3. Let first Asterisk run until the call count drops to zero, keep accepting calls<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12pt">for the existing bridge, but forward any new Bridge request to the new Asterisk.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">How does Asterisk behaving if multiple ARI clients connect with Asterisk for the same<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Stasis application?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Any ideas/recommendations?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> </p></div></div></div></div></div></div></div></blockquote><div><br></div><div>To follow on a bit with what Ben said:</div><div><br></div><div>If you're building a multi-Asterisk system, you'll need some middleware - like the aforementioned ARI proxies - to manage the information coming from multiple Asterisk systems. That's certainly the first step.</div><div><br></div><div>Once you have some middle layer managing the events coming from multiple Asterisk systems, as well as which objects (such as a Bridge or a Channel) live on which Asterisk system, the process of handling a graceful migration would look something like the following:</div><div><br></div><div>Given a conference on Asterisk A, consisting of Bridge 1A and multiple Channels, and given an Asterisk B instance:</div><div>* Create a new Bridge 1B on the Asterisk B instance</div><div>* Issue a redirect [1] to each channel in Bridge 1A to the Asterisk B instance. Note that the redirect command uses the same syntax as the Transfer dialplan application [2] (where the endpoint being redirected to replaces the dial string in the Transfer app). I've found it useful in the past to have a special extension 'entrance' on Asterisk instances the understand that channels entering there came from another Asterisk instance, so that they can convey that information appropriately to the listening external applications, who will have to update their channel state information.</div><div>* As each channel arrives on the Asterisk B instance, place them into the new Bridge 1B</div><div><br></div><div>That handles the scenario for graceful failover.</div><div><br></div><div>For non-graceful, Asterisk does not today have the ability to re-INVITE channels to a new Asterisk instance within the same dialog. The best your application can do is to detect the death of an Asterisk instance, build a new Bridge on a new Asterisk instance, and create new channels to the participants.</div><div><br></div><div>[1] <a href="https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Channels+REST+API#Asterisk13ChannelsRESTAPI-redirect">https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Channels+REST+API#Asterisk13ChannelsRESTAPI-redirect</a></div></div>[2] <a href="https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_Transfer">https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_Transfer</a><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Matthew Jordan<br></div><div>Digium, Inc. | Director of Technology<br></div><div>445 Jan Davis Drive NW - Huntsville, AL 35806 - USA</div><div>Check us out at: <a href="http://digium.com" target="_blank">http://digium.com</a> & <a href="http://asterisk.org" target="_blank">http://asterisk.org</a></div></div></div></div></div>
</div></div>