From: Libor Peltan Date: Thu, 30 Jan 2020 15:41:38 +0000 (+0100) Subject: journal: fix compatibility with older journal... X-Git-Tag: embedded_lmdb~77^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6ebd56c7ecbd898ca37a094e3cf2523193ca6791;p=thirdparty%2Fknot-dns.git journal: fix compatibility with older journal... ...otherwise it gives EMALF upon storing new zone --- diff --git a/src/knot/journal/journal_metadata.c b/src/knot/journal/journal_metadata.c index e8e8c092e2..9cca8cb9f6 100644 --- a/src/knot/journal/journal_metadata.c +++ b/src/knot/journal/journal_metadata.c @@ -101,6 +101,22 @@ bool get_metadata64(knot_lmdb_txn_t *txn, const knot_dname_t *zone, return get_metadata_numeric(txn, zone, metadata, result, sizeof(*result)); } +bool get_metadata64or32(knot_lmdb_txn_t *txn, const knot_dname_t *zone, + const char *metadata, uint64_t *result) +{ + if (txn->ret != KNOT_EOK) { + return false; + } + bool ret = get_metadata64(txn, zone, metadata, result); + if (txn->ret == KNOT_EMALF) { + uint32_t res32 = 0; + txn->ret = KNOT_EOK; + ret = get_metadata32(txn, zone, metadata, &res32); + *result = res32; + } + return ret; +} + void set_metadata(knot_lmdb_txn_t *txn, const knot_dname_t *zone, const char *metadata, const void *valp, size_t val_size, bool numeric) { @@ -212,7 +228,7 @@ void journal_store_metadata(knot_lmdb_txn_t *txn, const knot_dname_t *zone, cons set_metadata(txn, NULL, "version", "2.0", 4, false); if (md->_new_zone) { uint64_t journal_count = 0; - (void)get_metadata64(txn, NULL, "journal_count", &journal_count); + (void)get_metadata64or32(txn, NULL, "journal_count", &journal_count); ++journal_count; set_metadata(txn, NULL, "journal_count", &journal_count, sizeof(journal_count), true); }