]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
zone backup: more logging about what failed
authorLibor Peltan <libor.peltan@nic.cz>
Wed, 9 Dec 2020 13:42:53 +0000 (14:42 +0100)
committerLibor Peltan <libor.peltan@nic.cz>
Wed, 9 Dec 2020 13:42:53 +0000 (14:42 +0100)
doc/operation.rst
src/knot/zone/backup.c

index 9abeea6000c4d757589b460ce394f6a324f25f20..340bffd07105310cb42f7b50f86a60ff33303156 100644 (file)
@@ -964,7 +964,7 @@ The backup directory should be empty (or non-existing) or contain a previous
 backup that will be overwritten.
 The backup procedure will begin soon and will happen zone-by-zone
 (partially in parallel if more :ref:`server_background-workers` are configured).
-The user shall check the logs for the outcome of each zone's backup attempt.
+**The user shall check the logs for the outcome of each zone's backup attempt.**
 The knotc's ``-b`` parameter might be used if the user desires to wait until
 the backup work is done.
 
index 08b04a9797e32d99c14423917177e475d34b2aa2..934dc7b635c62123386065a363cc33d554ebd23f 100644 (file)
@@ -190,6 +190,8 @@ static conf_val_t get_zone_policy(conf_t *conf, const knot_dname_t *zone)
        return policy;
 }
 
+#define LOG_FAIL(action) log_zone_warning(zone->name, "%s, %s failed (%s)\n", ctx->restore_mode ? "restore" : "backup", (action), knot_strerror(ret))
+
 static int backup_keystore(conf_t *conf, zone_t *zone, zone_backup_ctx_t *ctx)
 {
        dnssec_keystore_t *from = NULL, *to = NULL;
@@ -199,6 +201,7 @@ static int backup_keystore(conf_t *conf, zone_t *zone, zone_backup_ctx_t *ctx)
        unsigned backend_type = 0;
        int ret = zone_init_keystore(conf, &policy_id, &from, &backend_type);
        if (ret != KNOT_EOK) {
+               LOG_FAIL("keystore init");
                return ret;
        }
        if (backend_type == KEYSTORE_BACKEND_PKCS11) {
@@ -211,6 +214,7 @@ static int backup_keystore(conf_t *conf, zone_t *zone, zone_backup_ctx_t *ctx)
        (void)snprintf(kasp_dir, sizeof(kasp_dir), "%s/keys", ctx->backup_dir);
        ret = keystore_load("keys", KEYSTORE_BACKEND_PEM, kasp_dir, &to);
        if (ret != KNOT_EOK) {
+               LOG_FAIL("keystore load");
                goto done;
        }
 
@@ -221,6 +225,7 @@ static int backup_keystore(conf_t *conf, zone_t *zone, zone_backup_ctx_t *ctx)
        ret = kasp_db_list_keys(zone->kaspdb, zone->name, &key_params);
        ret = (ret == KNOT_ENOENT ? KNOT_EOK : ret);
        if (ret != KNOT_EOK) {
+               LOG_FAIL("keystore list");
                goto done;
        }
        ptrnode_t *n;
@@ -230,6 +235,9 @@ static int backup_keystore(conf_t *conf, zone_t *zone, zone_backup_ctx_t *ctx)
                        free_key_params(n->d);
                }
        }
+       if (ret != KNOT_EOK) {
+               LOG_FAIL("key copy");
+       }
        ptrlist_deep_free(&key_params, NULL);
 
 done:
@@ -274,6 +282,7 @@ int zone_backup(conf_t *conf, zone_t *zone)
                free(backup_zf);
                free(local_zf);
                if (ret != KNOT_EOK) {
+                       LOG_FAIL("zone file");
                        goto done;
                }
        }
@@ -284,6 +293,7 @@ int zone_backup(conf_t *conf, zone_t *zone)
        if (knot_lmdb_exists(kasp_from)) {
                ret = kasp_db_backup(zone->name, kasp_from, kasp_to);
                if (ret != KNOT_EOK) {
+                       LOG_FAIL("KASP database");
                        goto done;
                }
 
@@ -302,11 +312,13 @@ int zone_backup(conf_t *conf, zone_t *zone)
                ret = journal_scrape_with_md(zone_journal(zone), true);
        }
        if (ret != KNOT_EOK) {
+               LOG_FAIL("journal");
                goto done;
        }
 
        ret = knot_lmdb_open(&ctx->bck_timer_db);
        if (ret != KNOT_EOK) {
+               LOG_FAIL("timers open");
                goto done;
        }
        if (ctx->restore_mode) {
@@ -314,6 +326,9 @@ int zone_backup(conf_t *conf, zone_t *zone)
        } else {
                ret = zone_timers_write(&ctx->bck_timer_db, zone->name, &zone->timers);
        }
+       if (ret != KNOT_EOK) {
+               LOG_FAIL("timers");
+       }
 
 done:
        zone_backup_deinit(ctx);