]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
backup: KASP db backup refactoring (use a more generic callback)
authorDavid Vašek <david.vasek@nic.cz>
Tue, 5 Dec 2023 12:24:18 +0000 (13:24 +0100)
committerDavid Vašek <david.vasek@nic.cz>
Mon, 11 Dec 2023 17:29:45 +0000 (18:29 +0100)
src/knot/zone/backup.c

index 494b9120bf6bedc1d607fbad30f2dcd271907e95..fbf166702f72848b5132556e4f3813202313822f 100644 (file)
@@ -379,6 +379,31 @@ done:
        return ret;
 }
 
+static int backup_kaspdb(zone_backup_ctx_t *ctx, conf_t *conf, zone_t *zone,
+                         int (*kaspdb_backup_cb)(const knot_dname_t *zone,
+                                                 knot_lmdb_db_t *db, knot_lmdb_db_t *backup_db))
+{
+       knot_lmdb_db_t *kasp_from = zone_kaspdb(zone), *kasp_to = &ctx->bck_kasp_db;
+       BACKUP_SWAP(ctx, kasp_from, kasp_to);
+
+       if (knot_lmdb_exists(kasp_from) != KNOT_ENODB) {
+               int ret = kaspdb_backup_cb(zone->name, kasp_from, kasp_to);
+               if (ret != KNOT_EOK) {
+                       LOG_MARK_FAIL("KASP database");
+                       return ret;
+               }
+
+               ret = backup_keystore(conf, zone, ctx);
+               if (ret != KNOT_EOK) {
+                       // Errors already logged in detail.
+                       ctx->failed = true;
+                       return ret;
+               }
+       }
+
+       return KNOT_EOK;
+}
+
 int zone_backup(conf_t *conf, zone_t *zone)
 {
        zone_backup_ctx_t *ctx = zone->backup_ctx;
@@ -397,21 +422,10 @@ int zone_backup(conf_t *conf, zone_t *zone)
        }
 
        if (ctx->backup_kaspdb) {
-               knot_lmdb_db_t *kasp_from = zone_kaspdb(zone), *kasp_to = &ctx->bck_kasp_db;
-               BACKUP_SWAP(ctx, kasp_from, kasp_to);
-
-               if (knot_lmdb_exists(kasp_from) != KNOT_ENODB) {
-                       ret = kasp_db_backup(zone->name, kasp_from, kasp_to);
-                       if (ret != KNOT_EOK) {
-                               LOG_MARK_FAIL("KASP database");
-                               return ret;
-                       }
-
-                       ret = backup_keystore(conf, zone, ctx);
-                       if (ret != KNOT_EOK) {
-                               ctx->failed = true;
-                               return ret;
-                       }
+               ret = backup_kaspdb(ctx, conf, zone, kasp_db_backup);
+               if (ret != KNOT_EOK) {
+                       // Errors already logged in detail.
+                       return ret;
                }
        }