<div dir="ltr">Can this get into &#39;FAQ&#39; document somewhere? This is one of the major question asked all the time.<div><br></div><div>Regards,</div><div>Amar</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 10, 2018 at 10:56 AM, Raghavendra Gowdappa <span dir="ltr">&lt;<a href="mailto:rgowdapp@redhat.com" target="_blank">rgowdapp@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Sorry about the delayed response. Had to dig into the history to answer various &quot;why&quot;s.<br>
<span class=""><br>
----- Original Message -----<br>
&gt; From: &quot;Omar Kohl&quot; &lt;<a href="mailto:omar.kohl@iternity.com">omar.kohl@iternity.com</a>&gt;<br>
&gt; To: <a href="mailto:gluster-users@gluster.org">gluster-users@gluster.org</a><br>
&gt; Sent: Tuesday, December 26, 2017 6:41:48 PM<br>
&gt; Subject: [Gluster-users] Exact purpose of network.ping-timeout<br>
&gt;<br>
&gt; Hi,<br>
&gt;<br>
&gt; I have a question regarding the &quot;ping-timeout&quot; option. I have been<br>
&gt; researching its purpose for a few days and it is not completely clear to me.<br>
&gt; Especially that it is apparently strongly encouraged by the Gluster<br>
&gt; community not to change or at least decrease this value!<br>
&gt;<br>
&gt; Assuming that I set ping-timeout to 10 seconds (instead of the default 42)<br>
&gt; this would mean that if I have a network outage of 11 seconds then Gluster<br>
&gt; internally would have to re-allocate some resources that it freed after the<br>
&gt; 10 seconds, correct? But apart from that there are no negative implications,<br>
&gt; are there? For instance if I&#39;m copying files during the network outage then<br>
&gt; those files will continue copying after those 11 seconds.<br>
&gt;<br>
&gt; This means that the only purpose of ping-timeout is to save those extra<br>
&gt; resources that are used by &quot;short&quot; network outages. Is that correct?<br>
<br>
</span>Basic purpose of ping-timer/heartbeat is to identify an unresponsive brick. Unresponsiveness can be caused due to various reasons like:<br>
* A deadlocked server. We no longer see too many instances of deadlocked bricks/server<br>
* Slow execution of fops in brick stack. For eg.,<br>
    - due to lock contention. There have been some efforts to fix the lock contention on brick stack.<br>
    - bad backend OS/filesystem. Posix health checker was an effort to fix this.<br>
    - Not enough threads for execution etc<br>
  Note that ideally its not the job of ping framework to identify this scenario and following the same thought process we&#39;ve shielded the processing of ping requests on bricks from the costs of execution of requests to Glusterfs Program.<br>
<br>
* Ungraceful shutdown of network connections. For eg.,<br>
    - hard shutdown of machine/container/VM running the brick<br>
    - physically pulling out the network cable<br>
  Basically all those different scenarios where TCP/IP doesn&#39;t get a chance to inform the other end that it is going down. Note that some of the scenarios of ungraceful network shutdown can be identified using TCP_KEEPALIVE and TCP_USERTIMEOUT [1]. However, at the time when heartbeat mechanism was introduced in Glusterfs, TCP_KEEPALIVE couldn&#39;t identify all the ungraceful network shutdown scenarios and TCP_USER_TIMEOUT was yet to be implemented in Linux kernel. One scenario which TCP_KEEPALIVE could identify was the exact scenario TCP_USER_TIMEOUT aims to solve - identifying an hard network shutdown when data is in transit. However there might be other limitations in TCP_KEEPALIVE which we need to test out before retiring heart beat mechanism in favor of TCP_KEEPALIVE and TCP_USER_TIMEOUT.<br>
<br>
The next interesting question would be why we need to identify an unresponsive brick. Various reasons why we need to do that would be:<br>
* To replace/fix any problems the brick might have<br>
* Almost all of the cluster translators - DHT, AFR, EC - wait for a response from all of their children - either successful or failure - before sending the response back to application. This means one or more slow/unresponsive brick can increase the latencies of fops/syscalls even though other bricks are responsive and healthy. However there are ongoing efforts to minimize the effect of few slow/unresponsive bricks [2]. I think principles of [2] can applied to DHT and AFR too.<br>
<br>
Some recent discussions on the necessity of ping framework in glusterfs can be found at [3].<br>
<br>
Having given all the above reasons for the existence of ping framework, its also important that ping-framework shouldn&#39;t bring down an otherwise healthy connection (False positives). Reasons are:<br>
* As pointed out by Joe Julian in another mail on this thread, each connection carries some state on bricks like locks/open-fds which is cleaned up on a disconnect. So, disconnects (even those followed by quick reconnects) are not completely transient to application. Though presence of HA layers like EC/AFR mitigates this problem to some extent, we still don&#39;t have a lock healing implementation in place. So, once Quorum number of AFR/EC children go down (though may not be all at once), locks are no longer held on bricks.<br>
* All the fops that are in transit in the time window starting from the time of disconnect till a successful reconnect are failed by rpc/transport layer. So, based on the configuration of volumes (whether AFR/EC/DHT prevent these errors from being seen by application), this *may* result in application seeing the error.<br>
<br>
IOW, disconnects are not lightweight and we need to avoid them whenever possible. Since the action on ping-timer expiry is to disconnect the connection, we suggest not have very low values to avoid spurious disconnections.<br>
<br>
[1] <a href="http://man7.org/linux/man-pages/man7/tcp.7.html" rel="noreferrer" target="_blank">http://man7.org/linux/man-<wbr>pages/man7/tcp.7.html</a><br>
[2] <a href="https://github.com/gluster/glusterfs/issues/366" rel="noreferrer" target="_blank">https://github.com/gluster/<wbr>glusterfs/issues/366</a><br>
[3] <a href="http://lists.gluster.org/pipermail/gluster-devel/2017-January/051938.html" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>pipermail/gluster-devel/2017-<wbr>January/051938.html</a><br>
<div class="HOEnZb"><div class="h5"><br>
&gt;<br>
&gt; If I am confident that my network will not have many 11 second outages and if<br>
&gt; they do occur I am willing to incur those extra costs due to resource<br>
&gt; allocation is there any reason not to set ping-timeout to 10 seconds?<br>
&gt;<br>
&gt; The problem I have with a long ping-timeout is that the Windows Samba Client<br>
&gt; disconnects after 25 seconds. So if one of the nodes of a Gluster cluster<br>
&gt; shuts down ungracefully then the Samba Client disconnects and the file that<br>
&gt; was being copied is incomplete on the server. These &quot;costs&quot; seem to be much<br>
&gt; higher than the potential costs of those Gluster resource re-allocations.<br>
&gt; But it is hard to estimate because there is not clear documentation what<br>
&gt; exactly those Gluster costs are.<br>
&gt;<br>
&gt; In general I would be very interested in a comprehensive explanation of<br>
&gt; ping-timeout and the up- and downsides of setting high or low values for it.<br>
&gt;<br>
&gt; Kinds regards,<br>
&gt; Omar<br>
&gt; ______________________________<wbr>_________________<br>
&gt; Gluster-users mailing list<br>
&gt; <a href="mailto:Gluster-users@gluster.org">Gluster-users@gluster.org</a><br>
&gt; <a href="http://lists.gluster.org/mailman/listinfo/gluster-users" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>mailman/listinfo/gluster-users</a><br>
&gt;<br>
______________________________<wbr>_________________<br>
Gluster-users mailing list<br>
<a href="mailto:Gluster-users@gluster.org">Gluster-users@gluster.org</a><br>
<a href="http://lists.gluster.org/mailman/listinfo/gluster-users" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>mailman/listinfo/gluster-users</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Amar Tumballi (amarts)<br></div></div></div></div></div>
</div>