<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Mar 3, 2016 at 6:26 PM, Kotresh Hiremath Ravishankar <span dir="ltr">&lt;<a href="mailto:khiremat@redhat.com" target="_blank">khiremat@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi,<br>
<br>
Yes, with this patch we need not set conn-&gt;trans to NULL in rpc_clnt_disable<br></blockquote><div><br></div><div style="">While [1] fixes the crash, things can be improved in the way how changelog is using rpc. </div><div style=""><br></div><div style="">1. In the current code, there is an rpc_clnt object leak during disconnect event.</div><div style="">2. Also, freed &quot;mydata&quot; of changelog is still associated with rpc_clnt object (corollary of 1), though change log might not get any events with &quot;mydata&quot; (as connection is dead).</div><div style=""><br></div><div style="">I&#39;ve discussed with Kotresh about changes needed, offline. So, following are the action items.</div><div style="">1. Soumya&#39;s patch [2] is valid and is needed for 3.7 branch too.</div><div style="">2. [2] can be accepted. However, someone might want to re-use an rpc object after disabling it, like introducing a new api rpc_clnt_enable_again (though no of such use-cases is very less). But [2] doesn&#39;t allow it. The point is as long as rpc-clnt object is alive, transport object is alive (though disconnected) and we can re-use it. So, I would prefer not to accept it. </div><div style="">3. Kotresh will work on new changes to make sure changelog makes correct use of rpc-clnt.</div><div style=""><br></div><div style="">[1] <a href="http://review.gluster.org/#/c/13592">http://review.gluster.org/#/c/13592</a></div><div style="">[2] <a href="http://review.gluster.org/#/c/1359">http://review.gluster.org/#/c/1359</a></div><div style=""><br></div><div style="">regards,</div><div style="">Raghavendra.</div><div style=""><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span class="im"><br>
Thanks and Regards,<br>
Kotresh H R<br>
<br>
----- Original Message -----<br>
&gt; From: &quot;Soumya Koduri&quot; &lt;<a href="mailto:skoduri@redhat.com">skoduri@redhat.com</a>&gt;<br>
</span><span class="im">&gt; To: &quot;Kotresh Hiremath Ravishankar&quot; &lt;<a href="mailto:khiremat@redhat.com">khiremat@redhat.com</a>&gt;, &quot;Raghavendra G&quot; &lt;<a href="mailto:raghavendra@gluster.com">raghavendra@gluster.com</a>&gt;<br>
&gt; Cc: &quot;Gluster Devel&quot; &lt;<a href="mailto:gluster-devel@gluster.org">gluster-devel@gluster.org</a>&gt;<br>
</span><div class=""><div class="h5">&gt; Sent: Thursday, March 3, 2016 5:06:00 PM<br>
&gt; Subject: Re: [Gluster-devel] Cores generated with ./tests/geo-rep/georep-basic-dr-tarssh.t<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On 03/03/2016 04:58 PM, Kotresh Hiremath Ravishankar wrote:<br>
&gt; &gt; [Replying on top of my own reply]<br>
&gt; &gt;<br>
&gt; &gt; Hi,<br>
&gt; &gt;<br>
&gt; &gt; I have submitted the below patch [1] to avoid the issue of<br>
&gt; &gt; &#39;rpc_clnt_submit&#39;<br>
&gt; &gt; getting reconnected. But it won&#39;t take care of memory leak problem you were<br>
&gt; &gt; trying to fix. That we have to carefully go through all cases and fix it.<br>
&gt; &gt; Please have a look at it.<br>
&gt; &gt;<br>
&gt; Looks good. IIUC, with this patch, we need not set conn-&gt;trans to NULL<br>
&gt; in &#39;rpc_clnt_disable()&#39;. Right? If yes, then it takes care of memleak as<br>
&gt; the transport object shall then get freed as part of<br>
&gt; &#39;rpc_clnt_trigger_destroy&#39;.<br>
&gt;<br>
&gt;<br>
&gt; &gt; <a href="http://review.gluster.org/#/c/13592/" rel="noreferrer" target="_blank">http://review.gluster.org/#/c/13592/</a><br>
&gt; &gt;<br>
&gt; &gt; Thanks and Regards,<br>
&gt; &gt; Kotresh H R<br>
&gt; &gt;<br>
&gt; &gt; ----- Original Message -----<br>
&gt; &gt;&gt; From: &quot;Kotresh Hiremath Ravishankar&quot; &lt;<a href="mailto:khiremat@redhat.com">khiremat@redhat.com</a>&gt;<br>
&gt; &gt;&gt; To: &quot;Soumya Koduri&quot; &lt;<a href="mailto:skoduri@redhat.com">skoduri@redhat.com</a>&gt;<br>
&gt; &gt;&gt; Cc: &quot;Raghavendra G&quot; &lt;<a href="mailto:raghavendra@gluster.com">raghavendra@gluster.com</a>&gt;, &quot;Gluster Devel&quot;<br>
&gt; &gt;&gt; &lt;<a href="mailto:gluster-devel@gluster.org">gluster-devel@gluster.org</a>&gt;<br>
&gt; &gt;&gt; Sent: Thursday, March 3, 2016 3:39:11 PM<br>
&gt; &gt;&gt; Subject: Re: [Gluster-devel] Cores generated with<br>
&gt; &gt;&gt; ./tests/geo-rep/georep-basic-dr-tarssh.t<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Hi Soumya,<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; I tested the lastes patch [2] on master where your previous patch [1] in<br>
&gt; &gt;&gt; merged.<br>
&gt; &gt;&gt; I see crashes at different places.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; 1. If there are code paths that are holding rpc object without taking ref<br>
&gt; &gt;&gt; on<br>
&gt; &gt;&gt; it, all those<br>
&gt; &gt;&gt;     code path will crash on invoking rpc submit on that object as rpc<br>
&gt; &gt;&gt;     object<br>
&gt; &gt;&gt;     would have freed<br>
&gt; &gt;&gt;     by last unref on DISCONNECT event. I see this kind of use-case in<br>
&gt; &gt;&gt;     chagnelog rpc code.<br>
&gt; &gt;&gt;     Need to check on other users of rpc.<br>
&gt; Agree. We should fix all such code-paths. Since this seem to be an<br>
&gt; intricate fix, shall we take these patches only in master branch and not<br>
&gt; in 3.7 release for now till we fix all such paths as we encounter?<br>
&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; 2. And also we need to take care of reconnect timers that are being set<br>
&gt; &gt;&gt; and<br>
&gt; &gt;&gt; are re-tried to<br>
&gt; &gt;&gt;     connect back on expiration. In those cases also, we might crash as rpc<br>
&gt; &gt;&gt;     object would have freed.<br>
&gt; Your patch addresses this..right?<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Soumya<br>
&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; [1] <a href="http://review.gluster.org/#/c/13507/" rel="noreferrer" target="_blank">http://review.gluster.org/#/c/13507/</a><br>
&gt; &gt;&gt; [2] <a href="http://review.gluster.org/#/c/13587/" rel="noreferrer" target="_blank">http://review.gluster.org/#/c/13587/</a><br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Thanks and Regards,<br>
&gt; &gt;&gt; Kotresh H R<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; ----- Original Message -----<br>
&gt; &gt;&gt;&gt; From: &quot;Soumya Koduri&quot; &lt;<a href="mailto:skoduri@redhat.com">skoduri@redhat.com</a>&gt;<br>
&gt; &gt;&gt;&gt; To: &quot;Raghavendra G&quot; &lt;<a href="mailto:raghavendra@gluster.com">raghavendra@gluster.com</a>&gt;, &quot;Kotresh Hiremath<br>
&gt; &gt;&gt;&gt; Ravishankar&quot; &lt;<a href="mailto:khiremat@redhat.com">khiremat@redhat.com</a>&gt;<br>
&gt; &gt;&gt;&gt; Cc: &quot;Gluster Devel&quot; &lt;<a href="mailto:gluster-devel@gluster.org">gluster-devel@gluster.org</a>&gt;<br>
&gt; &gt;&gt;&gt; Sent: Thursday, March 3, 2016 12:24:00 PM<br>
&gt; &gt;&gt;&gt; Subject: Re: [Gluster-devel] Cores generated with<br>
&gt; &gt;&gt;&gt; ./tests/geo-rep/georep-basic-dr-tarssh.t<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; Thanks a lot Kotresh.<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; On 03/03/2016 08:47 AM, Raghavendra G wrote:<br>
&gt; &gt;&gt;&gt;&gt; Hi Soumya,<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; Can you send a fix to this regression on upstream master too? This patch<br>
&gt; &gt;&gt;&gt;&gt; is merged there.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; I have submitted below patch.<br>
&gt; &gt;&gt;&gt;   <a href="http://review.gluster.org/#/c/13587/" rel="noreferrer" target="_blank">http://review.gluster.org/#/c/13587/</a><br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; Kindly review the same.<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; Thanks,<br>
&gt; &gt;&gt;&gt; Soumya<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; regards,<br>
&gt; &gt;&gt;&gt;&gt; Raghavendra<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; On Tue, Mar 1, 2016 at 10:34 PM, Kotresh Hiremath Ravishankar<br>
&gt; &gt;&gt;&gt;&gt; &lt;<a href="mailto:khiremat@redhat.com">khiremat@redhat.com</a> &lt;mailto:<a href="mailto:khiremat@redhat.com">khiremat@redhat.com</a>&gt;&gt; wrote:<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;      Hi Soumya,<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;      I analysed the issue and found out that crash has happened because<br>
&gt; &gt;&gt;&gt;&gt;      of the patch [1].<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;      The patch doesn&#39;t set transport object to NULL in<br>
&gt; &gt;&gt;&gt;&gt;      &#39;rpc_clnt_disable&#39;<br>
&gt; &gt;&gt;&gt;&gt;      but instead does it on<br>
&gt; &gt;&gt;&gt;&gt;      &#39;rpc_clnt_trigger_destroy&#39;. So if there are pending rpc invocations<br>
&gt; &gt;&gt;&gt;&gt;      on the rpc object that<br>
&gt; &gt;&gt;&gt;&gt;      is disabled (those instances are possible as happening now in<br>
&gt; &gt;&gt;&gt;&gt;      changelog), it will trigger a<br>
&gt; &gt;&gt;&gt;&gt;      CONNECT notify again with &#39;mydata&#39; that is freed causing a crash.<br>
&gt; &gt;&gt;&gt;&gt;      This happens because<br>
&gt; &gt;&gt;&gt;&gt;      &#39;rpc_clnt_submit&#39; reconnects if rpc is not connected.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;        rpc_clnt_submit (...) {<br>
&gt; &gt;&gt;&gt;&gt;          ...<br>
&gt; &gt;&gt;&gt;&gt;                       if (conn-&gt;connected == 0) {<br>
&gt; &gt;&gt;&gt;&gt;                               ret = rpc_transport_connect (conn-&gt;trans,<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;        conn-&gt;config.remote_port);<br>
&gt; &gt;&gt;&gt;&gt;                       }<br>
&gt; &gt;&gt;&gt;&gt;          ...<br>
&gt; &gt;&gt;&gt;&gt;        }<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;      Without your patch, conn-&gt;trans was set NULL and hence CONNECT<br>
&gt; &gt;&gt;&gt;&gt;      fails<br>
&gt; &gt;&gt;&gt;&gt;      not resulting with<br>
&gt; &gt;&gt;&gt;&gt;      CONNECT notify call. And also the cleanup happens in failure path.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;      So the memory leak can happen, if there is no try for rpc<br>
&gt; &gt;&gt;&gt;&gt;      invocation<br>
&gt; &gt;&gt;&gt;&gt;      after DISCONNECT.<br>
&gt; &gt;&gt;&gt;&gt;      It will be cleaned up otherwise.<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;      [1] <a href="http://review.gluster.org/#/c/13507/" rel="noreferrer" target="_blank">http://review.gluster.org/#/c/13507/</a><br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;      Thanks and Regards,<br>
&gt; &gt;&gt;&gt;&gt;      Kotresh H R<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;      ----- Original Message -----<br>
&gt; &gt;&gt;&gt;&gt;       &gt; From: &quot;Kotresh Hiremath Ravishankar&quot; &lt;<a href="mailto:khiremat@redhat.com">khiremat@redhat.com</a><br>
&gt; &gt;&gt;&gt;&gt;      &lt;mailto:<a href="mailto:khiremat@redhat.com">khiremat@redhat.com</a>&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; To: &quot;Soumya Koduri&quot; &lt;<a href="mailto:skoduri@redhat.com">skoduri@redhat.com</a><br>
&gt; &gt;&gt;&gt;&gt;       &gt; &lt;mailto:<a href="mailto:skoduri@redhat.com">skoduri@redhat.com</a>&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; Cc: <a href="mailto:avishwan@redhat.com">avishwan@redhat.com</a> &lt;mailto:<a href="mailto:avishwan@redhat.com">avishwan@redhat.com</a>&gt;, &quot;Gluster<br>
&gt; &gt;&gt;&gt;&gt;      Devel&quot; &lt;<a href="mailto:gluster-devel@gluster.org">gluster-devel@gluster.org</a><br>
&gt; &gt;&gt;&gt;&gt;      &lt;mailto:<a href="mailto:gluster-devel@gluster.org">gluster-devel@gluster.org</a>&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; Sent: Monday, February 29, 2016 4:15:22 PM<br>
&gt; &gt;&gt;&gt;&gt;       &gt; Subject: Re: Cores generated with<br>
&gt; &gt;&gt;&gt;&gt;      ./tests/geo-rep/georep-basic-dr-tarssh.t<br>
&gt; &gt;&gt;&gt;&gt;       &gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; Hi Soumya,<br>
&gt; &gt;&gt;&gt;&gt;       &gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; I just tested that it is reproducible only with your patch both<br>
&gt; &gt;&gt;&gt;&gt;      in master and<br>
&gt; &gt;&gt;&gt;&gt;       &gt; 3.76 branch.<br>
&gt; &gt;&gt;&gt;&gt;       &gt; The geo-rep test cases are marked bad in master. So it&#39;s not hit<br>
&gt; &gt;&gt;&gt;&gt;      in master.<br>
&gt; &gt;&gt;&gt;&gt;       &gt; rpc is introduced<br>
&gt; &gt;&gt;&gt;&gt;       &gt; in changelog xlator to communicate to applications via<br>
&gt; &gt;&gt;&gt;&gt;      libgfchangelog.<br>
&gt; &gt;&gt;&gt;&gt;       &gt; Venky/Me will check<br>
&gt; &gt;&gt;&gt;&gt;       &gt; why is the crash happening and will update.<br>
&gt; &gt;&gt;&gt;&gt;       &gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; Thanks and Regards,<br>
&gt; &gt;&gt;&gt;&gt;       &gt; Kotresh H R<br>
&gt; &gt;&gt;&gt;&gt;       &gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; ----- Original Message -----<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; From: &quot;Soumya Koduri&quot; &lt;<a href="mailto:skoduri@redhat.com">skoduri@redhat.com</a><br>
&gt; &gt;&gt;&gt;&gt;      &lt;mailto:<a href="mailto:skoduri@redhat.com">skoduri@redhat.com</a>&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; To: <a href="mailto:avishwan@redhat.com">avishwan@redhat.com</a> &lt;mailto:<a href="mailto:avishwan@redhat.com">avishwan@redhat.com</a>&gt;,<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; &quot;kotresh&quot;<br>
&gt; &gt;&gt;&gt;&gt;      &lt;<a href="mailto:khiremat@redhat.com">khiremat@redhat.com</a> &lt;mailto:<a href="mailto:khiremat@redhat.com">khiremat@redhat.com</a>&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; Cc: &quot;Gluster Devel&quot; &lt;<a href="mailto:gluster-devel@gluster.org">gluster-devel@gluster.org</a><br>
&gt; &gt;&gt;&gt;&gt;      &lt;mailto:<a href="mailto:gluster-devel@gluster.org">gluster-devel@gluster.org</a>&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; Sent: Monday, February 29, 2016 2:10:51 PM<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; Subject: Cores generated with<br>
&gt; &gt;&gt;&gt;&gt;      ./tests/geo-rep/georep-basic-dr-tarssh.t<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; Hi Aravinda/Kotresh,<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; With [1], I consistently see cores generated with the test<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; &#39;./tests/geo-rep/georep-basic-dr-tarssh.t&#39; in release-3.7<br>
&gt; &gt;&gt;&gt;&gt;      branch. From<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; the cores, looks like we are trying to dereference a freed<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; changelog_rpc_clnt_t(crpc) object in changelog_rpc_notify().<br>
&gt; &gt;&gt;&gt;&gt;      Strangely<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; this was not reported in master branch.<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; I tried debugging but couldn&#39;t find any possible suspects. I<br>
&gt; &gt;&gt;&gt;&gt;      request you<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; to take a look and let me know if [1] caused any regression.<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; Thanks,<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; Soumya<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt; [1] <a href="http://review.gluster.org/#/c/13507/" rel="noreferrer" target="_blank">http://review.gluster.org/#/c/13507/</a><br>
&gt; &gt;&gt;&gt;&gt;       &gt; &gt;<br>
&gt; &gt;&gt;&gt;&gt;       &gt;<br>
&gt; &gt;&gt;&gt;&gt;      _______________________________________________<br>
&gt; &gt;&gt;&gt;&gt;      Gluster-devel mailing list<br>
&gt; &gt;&gt;&gt;&gt;      <a href="mailto:Gluster-devel@gluster.org">Gluster-devel@gluster.org</a> &lt;mailto:<a href="mailto:Gluster-devel@gluster.org">Gluster-devel@gluster.org</a>&gt;<br>
&gt; &gt;&gt;&gt;&gt;      <a href="http://www.gluster.org/mailman/listinfo/gluster-devel" rel="noreferrer" target="_blank">http://www.gluster.org/mailman/listinfo/gluster-devel</a><br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; --<br>
&gt; &gt;&gt;&gt;&gt; Raghavendra G<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt; _______________________________________________<br>
&gt; &gt;&gt; Gluster-devel mailing list<br>
&gt; &gt;&gt; <a href="mailto:Gluster-devel@gluster.org">Gluster-devel@gluster.org</a><br>
&gt; &gt;&gt; <a href="http://www.gluster.org/mailman/listinfo/gluster-devel" rel="noreferrer" target="_blank">http://www.gluster.org/mailman/listinfo/gluster-devel</a><br>
&gt; &gt;&gt;<br>
&gt;<br>
_______________________________________________<br>
Gluster-devel mailing list<br>
<a href="mailto:Gluster-devel@gluster.org">Gluster-devel@gluster.org</a><br>
<a href="http://www.gluster.org/mailman/listinfo/gluster-devel" rel="noreferrer" target="_blank">http://www.gluster.org/mailman/listinfo/gluster-devel</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Raghavendra G<br></div>
</div></div>