From: Jan Hák Date: Thu, 17 Jul 2025 09:19:51 +0000 (+0200) Subject: knot: skip empty timers at lmdb key X-Git-Tag: v3.4.8~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a4dc4e63fc77f09957c84dd7dadb30c7ba004fa;p=thirdparty%2Fknot-dns.git knot: skip empty timers at lmdb key --- diff --git a/src/knot/journal/knot_lmdb.c b/src/knot/journal/knot_lmdb.c index c63a3c4718..c1a9b3ab05 100644 --- a/src/knot/journal/knot_lmdb.c +++ b/src/knot/journal/knot_lmdb.c @@ -597,7 +597,9 @@ static bool make_key_part(void *key_data, size_t key_len, const char *format, va const char *tmp_s; const knot_dname_t *tmp_d; const void *tmp_v; + uint64_t tmp_u64; size_t tmp; + int tmp_i; for (const char *f = format; *f != '\0'; f++) { switch (*f) { @@ -626,6 +628,14 @@ static bool make_key_part(void *key_data, size_t key_len, const char *format, va tmp = va_arg(arg, size_t); wire_ctx_write(&wire, tmp_v, tmp); break; + case 'T': + tmp_i = va_arg(arg, int); + tmp_u64 = va_arg(arg, uint64_t); + if (tmp_u64 > 0) { + wire_ctx_write_u8(&wire, tmp_i); + wire_ctx_write_u64(&wire, tmp_u64); + } + break; } } @@ -671,6 +681,13 @@ MDB_val knot_lmdb_make_key(const char *format, ...) (void)va_arg(arg, const void *); key.mv_size += va_arg(arg, size_t); break; + case 'T': + (void)va_arg(arg, int); // uint8_t will be promoted to int + if (va_arg(arg, uint64_t) > 0) { + key.mv_size += sizeof(uint8_t); + key.mv_size += sizeof(uint64_t); + } + break; } } va_end(arg); diff --git a/src/knot/journal/knot_lmdb.h b/src/knot/journal/knot_lmdb.h index 762fbb4ecb..702e45e7a4 100644 --- a/src/knot/journal/knot_lmdb.h +++ b/src/knot/journal/knot_lmdb.h @@ -409,6 +409,7 @@ size_t knot_lmdb_usage(knot_lmdb_txn_t *txn); * - S for zero-terminated string * - N for a domain name (in knot_dname_t* format) * - D for fixed-size data (takes two params: void* and size_t) + * - T for pair of byte prefix and 64bit timer (takes two params: uint8 and uint64) */ MDB_val knot_lmdb_make_key(const char *format, ...); diff --git a/src/knot/zone/timers.c b/src/knot/zone/timers.c index a3dfb51c79..cfa237db1e 100644 --- a/src/knot/zone/timers.c +++ b/src/knot/zone/timers.c @@ -124,8 +124,8 @@ static void txn_write_timers(knot_lmdb_txn_t *txn, const knot_dname_t *zone, { const char *format = (timers->last_master.sin6_family == AF_INET || timers->last_master.sin6_family == AF_INET6) ? - "BLBLBLBLBLBLBLBLBLBLBD" : - "BLBLBLBLBLBLBLBLBL"; + "TTTTTTTTTTBD" : + "TTTTTTTTT"; MDB_val k = { knot_dname_size(zone), (void *)zone }; MDB_val v = knot_lmdb_make_key(format,