]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: handle new closing list in show quic
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 8 Mar 2023 08:42:31 +0000 (09:42 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 8 Mar 2023 13:39:48 +0000 (14:39 +0100)
A new global quic-conn list has been added by the previous patch. It will
contain every quic-conn in closing or draining state.

Thus, it is now easier to include or skip them on a "show quic" output :
when the default list on the current thread has been browsed entirely,
either we skip to the next thread or we look at the closing list on the
current thread.

This should be backported up to 2.7.

src/quic_conn.c

index 9a5176624e1387ba099519deb91b09ec2b047af4..66da15829dd6a2c1b1173a9b26e8c155dac6e259 100644 (file)
@@ -8183,9 +8183,25 @@ static int cli_io_handler_dump_quic(struct appctx *appctx)
                int i;
 
                if (ctx->bref.ref == &ha_thread_ctx[ctx->thr].quic_conns) {
+                       /* If closing connections requested through "all", move
+                        * to quic_conns_clo list after browsing quic_conns.
+                        * Else move directly to the next quic_conns thread.
+                        */
+                       if (ctx->flags & QC_CLI_FL_SHOW_ALL) {
+                               ctx->bref.ref = ha_thread_ctx[ctx->thr].quic_conns_clo.n;
+                               continue;
+                       }
+
+                       done = 1;
+               }
+               else if (ctx->bref.ref == &ha_thread_ctx[ctx->thr].quic_conns_clo) {
+                       /* Closing list entirely browsed, go to next quic_conns
+                        * thread.
+                        */
                        done = 1;
                }
                else {
+                       /* Retrieve next element of the current list. */
                        qc = LIST_ELEM(ctx->bref.ref, struct quic_conn *, el_th_ctx);
                        if ((int)(qc->qc_epoch - ctx->epoch) > 0)
                                done = 1;
@@ -8195,16 +8211,11 @@ static int cli_io_handler_dump_quic(struct appctx *appctx)
                        ++ctx->thr;
                        if (ctx->thr >= global.nbthread)
                                break;
+                       /* Switch to next thread quic_conns list. */
                        ctx->bref.ref = ha_thread_ctx[ctx->thr].quic_conns.n;
                        continue;
                }
 
-               if (!(ctx->flags & QC_CLI_FL_SHOW_ALL) &&
-                   qc->flags & (QUIC_FL_CONN_CLOSING|QUIC_FL_CONN_DRAINING)) {
-                       ctx->bref.ref = qc->el_th_ctx.n;
-                       continue;
-               }
-
                /* CIDs */
                chunk_appendf(&trash, "* %p[%02u]: scid=", qc, qc->tid);
                for (cid_len = 0; cid_len < qc->scid.len; ++cid_len)