]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
knot: skip empty timers at lmdb key
authorJan Hák <jan.hak@nic.cz>
Thu, 17 Jul 2025 09:19:51 +0000 (11:19 +0200)
committerDaniel Salzman <daniel.salzman@nic.cz>
Fri, 25 Jul 2025 12:14:33 +0000 (14:14 +0200)
src/knot/journal/knot_lmdb.c
src/knot/journal/knot_lmdb.h
src/knot/zone/timers.c

index c63a3c4718056ffbb17cbf7a6d747c202f94d3df..c1a9b3ab0586c7c86e3cfd6859d891e9563e8471 100644 (file)
@@ -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);
index 762fbb4ecb56f29ad92bd688e7b3082e3a0f4ba5..702e45e7a42bf81cababeb1dcc999b93d9ac0cd8 100644 (file)
@@ -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, ...);
 
index a3dfb51c797b0773301ff5baacf50c3bf3d36910..cfa237db1e1195875c83f79b50958e19058049da 100644 (file)
@@ -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,