]> 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>
Thu, 17 Jul 2025 10:25:58 +0000 (12:25 +0200)
src/knot/journal/knot_lmdb.c
src/knot/journal/knot_lmdb.h
src/knot/zone/timers.c

index 07f6ebd4b3b9de75a0f24e306f9c698b763f5255..1e4ad5861a11a194dd81656b1af01f207bf5fa3f 100644 (file)
@@ -586,7 +586,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) {
@@ -615,6 +617,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;
                }
        }
 
@@ -660,6 +670,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 f39b35e67b25619cb40462739259284bfc129d38..7c4f65557cb6901c5a369539cb94bbf5e3e8437f 100644 (file)
@@ -398,6 +398,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 65181e5a501df4e7a82339d553a7635832f30074..40e3414901743a4980526d249af3e828bae6b13d 100644 (file)
@@ -113,8 +113,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,