diff --git a/include/haproxy/check-t.h b/include/haproxy/check-t.h index f9f378e8a..353fc5845 100644 --- a/include/haproxy/check-t.h +++ b/include/haproxy/check-t.h @@ -199,6 +199,7 @@ struct check { const struct mux_proto_list *mux_proto; /* the mux to use for all outgoing connections (specified by the "proto" keyword) */ struct list check_queue; /* entry in the check queue. Not empty = in queue. */ int via_socks4; /* check the connection via socks4 proxy */ + struct ist unique_id; /* custom unique ID, same as in struct stream */ }; #endif /* _HAPROXY_CHECKS_T_H */ diff --git a/include/haproxy/check.h b/include/haproxy/check.h index 09e195a46..e25e987f0 100644 --- a/include/haproxy/check.h +++ b/include/haproxy/check.h @@ -26,6 +26,7 @@ #include #include #include +#include extern struct trace_source trace_check; @@ -80,6 +81,16 @@ struct task *srv_chk_io_cb(struct task *t, void *ctx, unsigned int state); int check_buf_available(void *target); struct buffer *check_get_buf(struct check *check, struct buffer *bptr, unsigned int small_buffer); void check_release_buf(struct check *check, struct buffer *bptr); + +static inline struct ist check_generate_unique_id(struct check *check, struct lf_expr *format) +{ + if (!isttest(check->unique_id)) { + generate_unique_id(&check->unique_id, check->sess, NULL, format); + } + + return check->unique_id; +} + const char *init_check(struct check *check, int type); void free_check(struct check *check); void check_purge(struct check *check); diff --git a/src/check.c b/src/check.c index 45baca979..481cab22f 100644 --- a/src/check.c +++ b/src/check.c @@ -458,6 +458,11 @@ void set_server_check_status(struct check *check, short status, const char *desc check->result = CHK_RES_UNKNOWN; /* no result yet */ check->desc[0] = '\0'; check->start = now_ns; + + /* Reset unique_id. */ + pool_free(pool_head_uniqueid, istptr(check->unique_id)); + check->unique_id = IST_NULL; + return; } @@ -1558,6 +1563,8 @@ void free_check(struct check *check) ha_free(&check->tcpcheck); } + pool_free(pool_head_uniqueid, istptr(check->unique_id)); + check->unique_id = IST_NULL; ha_free(&check->pool_conn_name); ha_free(&check->sni); ha_free(&check->alpn_str);