QUIC_ST_STREAM_DATA_BLOCKED,
QUIC_ST_STREAMS_BLOCKED_BIDI,
QUIC_ST_STREAMS_BLOCKED_UNI,
+ QUIC_ST_NCBUF_GAP_LIMIT,
QUIC_STATS_COUNT /* must be the last */
};
long long stream_data_blocked; /* total number of times STREAM_DATA_BLOCKED frame was received */
long long streams_blocked_bidi; /* total number of times STREAMS_BLOCKED_BIDI frame was received */
long long streams_blocked_uni; /* total number of times STREAMS_BLOCKED_UNI frame was received */
+ long long ncbuf_gap_limit; /* total number of times we failed to add data to ncbuf due to gap size limit */
};
#endif /* USE_QUIC */
left = len;
while (left) {
struct qc_stream_rxbuf *buf;
+ struct proxy *px;
+ struct quic_counters *prx_counters;
ncb_sz_t ncb_off;
buf = qcs_get_rxbuf(qcs, offset, &len);
case NCB_RET_GAP_SIZE:
TRACE_DATA("cannot bufferize frame due to gap size limit", QMUX_EV_QCC_RECV|QMUX_EV_QCS_RECV,
qcc->conn, qcs);
+ px = qcc->proxy;
+ prx_counters = EXTRA_COUNTERS_GET(px->extra_counters_fe, &quic_stats_module);
+ HA_ATOMIC_INC(&prx_counters->ncbuf_gap_limit);
return 1;
}
.desc = "Total number of received STREAMS_BLOCKED_BIDI frames" },
[QUIC_ST_STREAMS_BLOCKED_UNI] = { .name = "quic_streams_blocked_uni",
.desc = "Total number of received STREAMS_BLOCKED_UNI frames" },
+ [QUIC_ST_NCBUF_GAP_LIMIT] = { .name = "quic_ncbuf_gap_limit",
+ .desc = "Total number of failures to add to ncbuf because of gap size limit" },
};
struct quic_counters quic_counters;
case QUIC_ST_STREAMS_BLOCKED_UNI:
metric = mkf_u64(FN_COUNTER, counters->streams_blocked_uni);
break;
+ case QUIC_ST_NCBUF_GAP_LIMIT:
+ metric = mkf_u64(FN_COUNTER, counters->ncbuf_gap_limit);
+ break;
default:
/* not used for frontends. If a specific metric
* is requested, return an error. Otherwise continue.