<div dir="auto">Hello.</div><div dir="auto">The upstream peer status is always up when the upstream peer is single.</div><div dir="auto">FYI: <a href="https://github.com/vozlt/nginx-module-vts/issues/262">https://github.com/vozlt/nginx-module-vts/issues/262</a></div><div dir="auto">The conventional upstream round robin hasn't count peer->fails anywhere when it is peers->single is 1.</div><div dir="auto">Thus we’d like to only count it, but not to judge that the peer is down.</div><div dir="auto"><div><br></div><div><br></div><div><div dir="auto"># HG changeset patch</div><div dir="auto"># User Yugo Horie <<a href="mailto:u5.horie@gmail.com">u5.horie@gmail.com</a>></div><div dir="auto"># Date 1678105277 -32400</div><div dir="auto">#      Mon Mar 06 21:21:17 2023 +0900</div><div dir="auto"># Node ID bd2cfa9541df90fa45883797cba56a26fc5f39c0</div><div dir="auto"># Parent  2acb00b9b5fff8a97523b659af4377fc605abe6e</div><div dir="auto"><span style="border-color:rgb(0,0,0)">Upstream: Count peer->fails if peers->single is 1</span><br></div><div dir="auto"><br></div><div dir="auto">The log based monitoring modules (e.g. nginx-module-vts)</div><div dir="auto">can identify the upstream peer is up or down with</div><div dir="auto">peer->fails even if it is the single upstream peer.</div><div dir="auto"><br></div><div dir="auto">diff -r 2acb00b9b5ff -r bd2cfa9541df src/http/ngx_http_upstream_round_robin.c</div><div dir="auto">--- a/src/http/ngx_http_upstream_round_robin.c  Thu Feb 23 20:50:03 2023 +0300</div><div dir="auto">+++ b/src/http/ngx_http_upstream_round_robin.c  Mon Mar 06 21:21:17 2023 +0900</div><div dir="auto">@@ -551,7 +551,7 @@</div><div dir="auto">             continue;</div><div dir="auto">         }</div><div dir="auto"> </div><div dir="auto">-        if (peer->max_fails</div><div dir="auto">+        if (!rrp->peers->single && peer->max_fails</div><div dir="auto">             && peer->fails >= peer->max_fails</div><div dir="auto">             && now - peer->checked <= peer->fail_timeout)</div><div dir="auto">         {</div><div dir="auto">@@ -618,6 +618,11 @@</div><div dir="auto">     if (rrp->peers->single) {</div><div dir="auto"> </div><div dir="auto">         peer->conns--;</div><div dir="auto">+        if (state & NGX_PEER_FAILED) {</div><div dir="auto">+            peer->fails++;</div><div dir="auto">+        } else {</div><div dir="auto">+            peer->fails = 0;</div><div dir="auto">+        }</div><div dir="auto"> </div><div dir="auto">         ngx_http_upstream_rr_peer_unlock(rrp->peers, peer);</div><div dir="auto">         ngx_http_upstream_rr_peers_unlock(rrp->peers);</div></div></div>