<div dir="ltr"><div>Async does indeed trigger the transaction creation. You may need to update the $ru variable and not use the append_to_reply. Or at least that's how I solved this in the past.<br></div><br>else if ($var(db_res) == -1)<br>{<br>update_stat("mysql_result_error", "+1");<br>$ru = "<sip:" + $rU + "@" + $si + ":" + $sp + ";npdi"  + ">";<br>#append_to_reply("Contact: $var(ct)\r\n");<br>sl_send_reply("302", "Redirect");<br>$var(processingTime) = $Ts * 1000 + $Tsm/1000 - $avp(startTime);<br>xlog("L_ERR", "TRACE:ROUTE:MYSQL_ERROR src=$si:$sp dst=$Ri:$Rp From=$fU To=$rU ID=$ci Time=$var(processingTime)\n");<br>exit();<br>}<br><br>I ran a setup similar to this for about 6 years under heavy volume (1000-2000 CPS sustained). Two X5600 Xeons boxes were used, one with OpenSIPs and one with MySQL holding the LRN data pinned in memory. No async or caching. <br><div>I would caution somewhat about using the caching (and possibly the async), as memory fragmentation may become a problem after sustained usage.<div><font face="monospace"><br></font></div><div>- Jon Abrams<font face="monospace"><br></font></div>

</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Mar 6, 2020 at 4:09 PM Calvin Ellison <<a href="mailto:calvin.ellison@voxox.com">calvin.ellison@voxox.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">The scenario is a SIP-MySQL proxy that performs LRN queries and replies with 302 Redirect and Contact including npdi and optional rn parameters. Cache_db is also used. This has worked as intended using the SL module without async.<div><br></div><div>After refactoring to use async(avp_db_query()), there is now an additional Contact in the 302 Redirect only if the async() happens. When the RN is found in the cache there is only the single intended Contact.</div><div><br></div><div>I suspect the difference has something to do with async using the TM module and it's probably a simple mistake. What magic is required to send only the desired Contact after async?</div><div><br></div><div>Here's the cached chunk:<br><font face="monospace">                if($Rp != "5061" && !is_present_hf("X-LNP-Refresh") && cache_fetch("local", "$rU", $avp(10)))<br>                {<br>                        $avp(lrn) = $avp(10);<br>                        $avp(resultType) = "CACHED";<br>                        update_stat("cached_results", "+1");<br>                        route(continue);<br>                }<br></font></div><div>...</div><blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px"><div><font face="monospace">route [continue]</font></div><div><font face="monospace">{</font></div><div><font face="monospace"> if($Rp != "5061" )</font></div><div><font face="monospace">        cache_store("local", "$rU", "$avp(lrn)", $avp(timeout));</font></div><div><br></div><div><font face="monospace">        $var(rn) = $(avp(lrn){csv.value,0});</font></div><div><font face="monospace">        $var(ct) = "<sip:" + $rU + "@" + $si + ":" + $sp + ";npdi";</font></div><div><font face="monospace">        if($(var(rn){s.len}) != 0)</font></div><div><font face="monospace">                $var(ct) = $var(ct) + ";rn=" + $var(rn);</font></div><div><font face="monospace">        $var(ct) = $var(ct) + ">";</font></div><div><font face="monospace">        append_to_reply("Contact: $var(ct)\r\n");</font></div><div><font face="monospace"><br></font></div><div><span style="font-family:monospace">        sl_send_reply(</span>"302", "Redirect"<span style="font-family:monospace">);</span><br></div><div><font face="monospace">        $var(processingTime) = $Ts * 1000 + $Tsm/1000 - $avp(startTime);</font></div><div><span style="font-family:monospace">}</span><br></div></blockquote><div><br></div><div>Not-cached does this:</div><blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px"><span style="font-family:monospace">async(avp_db_query("call lrn.sqlrn('$var(number)')", "$avp(11);$avp(12);$avp(13)"), resume_lnp);</span></blockquote><font face="monospace">...<br></font><blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px"><div><font face="monospace">route [resume_lnp]</font></div><div><font face="monospace">{</font></div><div><font face="monospace">        $var(db_res) = $retcode;</font></div><div><font face="monospace">        if ($var(db_res) && is_avp_set("$avp(11)"))</font></div><div><font face="monospace">        {</font></div><div><font face="monospace">                update_stat("mysql_result_number", "+1");</font></div><div><font face="monospace">                $var(number) = $avp(11);</font></div><div><font face="monospace">                if ($avp(11) =~ "^[2-9][0-9]{9}$")</font></div><div><font face="monospace">                        $var(number) = "1" + $avp(11);</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">                $avp(lrn) = $var(number) + "," + $avp(12) + "," + $avp(13);</font></div><div><font face="monospace">                $avp(resultType) = "MYSQL";</font></div><div><span style="font-family:monospace">        }</span><br></div><div><font face="monospace">        else if ($var(db_res) == -1)</font></div><div><font face="monospace">        {</font></div><div><font face="monospace">                update_stat("mysql_result_error", "+1");</font></div><div><font face="monospace">                $var(ct) = "<sip:" + $rU + "@" + $si + ":" + $sp + ";npdi"  + ">";</font></div><div><font face="monospace">                append_to_reply("Contact: $var(ct)\r\n");</font></div><div><font face="monospace">                sl_send_reply("302", "Redirect");</font></div><div><font face="monospace">                $var(processingTime) = $Ts * 1000 + $Tsm/1000 - $avp(startTime);</font></div><div><font face="monospace">                xlog("L_ERR", "TRACE:ROUTE:MYSQL_ERROR src=$si:$sp dst=$Ri:$Rp From=$fU To=$rU ID=$ci Time=$var(processingTime)\n");</font></div><div><font face="monospace">                exit();</font></div><div><font face="monospace">        }</font></div><div><font face="monospace">        else</font></div><div><font face="monospace">        {</font></div><div><font face="monospace">                update_stat("mysql_result_empty", "+1");</font></div><div><font face="monospace">                $avp(resultType) = "MYSQL_EMPTY";</font></div><div><span style="font-family:monospace">        }</span><br></div><div><font face="monospace">        route(continue);</font></div><div><font face="monospace">}</font></div></blockquote><div><br></div><div>Good (cached, no async):</div><blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px"><div><font face="monospace">SIP/2.0 302 Redirect</font></div><div><font face="monospace">Via: SIP/2.0/UDP 10.0.2.45:5060;branch=z9hG4bK-27769-1-0</font></div><div><font face="monospace">From: <<a href="http://sip:sipp@10.0.2.45:5060" target="_blank">sip:sipp@10.0.2.45:5060</a>>;tag=27769SIPpTag001</font></div><div><font face="monospace">To: 17605086443 <<a href="http://sip:17605086443@10.0.131.97:5060" target="_blank">sip:17605086443@10.0.131.97:5060</a>>;tag=a1b3.ecf278993d227a99987b0bccd10b5617</font></div><div><font face="monospace">Call-ID: <a href="mailto:1-27769@10.0.2.45" target="_blank">1-27769@10.0.2.45</a></font></div><div><font face="monospace">CSeq: 1 INVITE</font></div><div><font face="monospace">Contact: <sip:17605086443@10.0.2.45:5060;npdi></font></div><div><font face="monospace">Content-Length: 0</font></div></blockquote><div><br></div><div>Bad (not cached, async):</div><blockquote style="margin:0px 0px 0px 40px;border:medium none;padding:0px"><div><font face="monospace">SIP/2.0 302 Redirect</font></div><div><font face="monospace">Via: SIP/2.0/UDP 10.0.2.45:5060;branch=z9hG4bK-27753-1-0</font></div><div><font face="monospace">From: <<a href="http://sip:sipp@10.0.2.45:5060" target="_blank">sip:sipp@10.0.2.45:5060</a>>;tag=27753SIPpTag001</font></div><div><font face="monospace">To: 17605086443 <<a href="http://sip:17605086443@10.0.131.97:5060" target="_blank">sip:17605086443@10.0.131.97:5060</a>>;tag=a1b3.fd3dd7f924d173cf165e3579c8289026</font></div><div><font face="monospace">Call-ID: <a href="mailto:1-27753@10.0.2.45" target="_blank">1-27753@10.0.2.45</a></font></div><div><font face="monospace">CSeq: 1 INVITE</font></div><div><font face="monospace">Contact: <sip:17605086443@10.0.2.45:5060;npdi></font></div><div><font face="monospace">Contact: <<a href="http://sip:17605086443@10.0.131.97:5060" target="_blank">sip:17605086443@10.0.131.97:5060</a>></font></div><div><font face="monospace">Content-Length: 0</font></div></blockquote><div><div><div><div><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><br></div><div dir="ltr"><br></div><div dir="ltr">Regards,<div><br></div><div><p style="font-family:helvetica,arial,sans-serif;font-size:12px;margin:0px;padding:0px 0px 20px;color:rgb(0,0,0)"><strong>Calvin Ellison</strong><br>Senior Voice Operations Engineer<br><a href="mailto:calvin.ellison@voxox.com" style="text-decoration:none;color:rgb(14,123,174)" target="_blank">calvin.ellison@voxox.com</a><br>+1 (213) 285-0555<br><br>-----------------------------------------------<br><strong><a href="http://www.voxox.com/" style="text-decoration:none;color:rgb(14,123,174)" target="_blank">voxox.com</a> </strong><br>5825 Oberlin Drive, Suite 5<br>San Diego, CA 92121<br></p><img src="http://cdn.voxox.com/img/voxox-logo.png" alt="Voxox" style="color: rgb(0, 0, 0); font-family: "Times New Roman"; font-size: medium;"><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
</blockquote></div>