This adds support for UUIDv7 to the existing `uuid` sample fetch that was added in 8a694b859cf98f8b0855b4aa5a50ebf64b501215. --- doc/configuration.txt | 3 ++- src/sample.c | 40 +++++++++++++++++++++++++++++----------- 2 files changed, 31 insertions(+), 12 deletions(-)
diff --git a/doc/configuration.txt b/doc/configuration.txt index d2d654c191..16094c194a 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -21306,7 +21306,8 @@ txn.sess_term_state : string uuid([<version>]) : string Returns a UUID following the RFC4122 standard. If the version is not specified, a UUID version 4 (fully random) is returned. - Currently, only version 4 is supported. + + Versions 4 and 7 are supported. var(<var-name>[,<default>]) : undefined Returns a variable with the stored type. If the variable is not set, the diff --git a/src/sample.c b/src/sample.c index 8daa92424d..43ab003529 100644 --- a/src/sample.c +++ b/src/sample.c @@ -4781,10 +4781,15 @@ static int smp_check_uuid(struct arg *args, char **err) if (!args[0].type) { args[0].type = ARGT_SINT; args[0].data.sint = 4; - } - else if (args[0].data.sint != 4) { - memprintf(err, "Unsupported UUID version: '%lld'", args[0].data.sint); - return 0; + } else { + switch (args[0].data.sint) { + case 4: + case 7: + break; + default: + memprintf(err, "Unsupported UUID version: '%lld'", args[0].data.sint); + return 0; + } } return 1; @@ -4793,16 +4798,29 @@ static int smp_check_uuid(struct arg *args, char **err) // Generate a RFC4122 UUID (default is v4 = fully random) static int smp_fetch_uuid(const struct arg *args, struct sample *smp, const char *kw, void *private) { - if (args[0].data.sint == 4 || !args[0].type) { + long long int type = -1; + + if (!args[0].type) { + type = 4; + } else { + type = args[0].data.sint; + } + + switch (type) { + case 4: ha_generate_uuid_v4(&trash); - smp->data.type = SMP_T_STR; - smp->flags = SMP_F_VOL_TEST | SMP_F_MAY_CHANGE; - smp->data.u.str = trash; - return 1; + break; + case 7: + ha_generate_uuid_v7(&trash); + break; + default: + return 0; } - // more implementations of other uuid formats possible here - return 0; + smp->data.type = SMP_T_STR; + smp->flags = SMP_F_VOL_TEST | SMP_F_MAY_CHANGE; + smp->data.u.str = trash; + return 1; } /* Check if QUIC support was compiled and was not disabled by "no-quic" global option */ -- 2.43.2