From: Libor Peltan Date: Tue, 27 Jul 2021 11:52:27 +0000 (+0200) Subject: journal: preserve occupation computation when purging zone while writing it X-Git-Tag: v3.1.0~9^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=58b7cb4fc85a2ae550ef7a96da0c958613f69f50;p=thirdparty%2Fknot-dns.git journal: preserve occupation computation when purging zone while writing it --- diff --git a/src/knot/journal/journal_metadata.c b/src/knot/journal/journal_metadata.c index 3834a1e94e..213ae510e2 100644 --- a/src/knot/journal/journal_metadata.c +++ b/src/knot/journal/journal_metadata.c @@ -286,6 +286,14 @@ void journal_metadata_after_extra(journal_metadata_t *md, uint32_t serial, uint3 md->flags |= (JOURNAL_MERGED_SERIAL_VALID | JOURNAL_LAST_FLUSHED_VALID); } +void journal_del_zone_txn(knot_lmdb_txn_t *txn, const knot_dname_t *zone) +{ + uint64_t md_occupied = 0; + (void)get_metadata64(txn, zone, "occupied", &md_occupied); + journal_del_zone(txn, zone); + set_metadata(txn, zone, "occupied", &md_occupied, sizeof(md_occupied), true); +} + int journal_scrape_with_md(zone_journal_t j, bool check_existence) { if (check_existence && !journal_is_existing(j)) { diff --git a/src/knot/journal/journal_metadata.h b/src/knot/journal/journal_metadata.h index 6400b9cd79..246d89973e 100644 --- a/src/knot/journal/journal_metadata.h +++ b/src/knot/journal/journal_metadata.h @@ -111,6 +111,14 @@ void journal_metadata_after_insert(journal_metadata_t *md, uint32_t serial, uint */ void journal_metadata_after_extra(journal_metadata_t *md, uint32_t serial, uint32_t serial_to); +/*! + * \brief Delete all zone records in a txn that will later write to the same zone. + * + * \note The difference against journal_del_zone(), which purges even metadata, incl "occupied". + * \note This preserves keeping track of space occupied/freed by this zone. + */ +void journal_del_zone_txn(knot_lmdb_txn_t *txn, const knot_dname_t *zone); + /*! * \brief Completely delete all journal records belonging to this zone, including metadata. * diff --git a/src/knot/journal/journal_write.c b/src/knot/journal/journal_write.c index 70ea209756..86cb281aef 100644 --- a/src/knot/journal/journal_write.c +++ b/src/knot/journal/journal_write.c @@ -225,7 +225,7 @@ int journal_insert_zone(zone_journal_t j, const zone_contents_t *z) knot_lmdb_begin(j.db, &txn, true); update_last_inserter(&txn, j.zone); - journal_del_zone(&txn, j.zone); + journal_del_zone_txn(&txn, j.zone); journal_write_zone(&txn, z); @@ -281,7 +281,7 @@ int journal_insert(zone_journal_t j, const changeset_t *ch, const changeset_t *e if (journal_contains(&txn, true, 0, j.zone)) { txn.ret = KNOT_ESEMCHECK; } else { - journal_del_zone(&txn, j.zone); + journal_del_zone_txn(&txn, j.zone); memset(&md, 0, sizeof(md)); } }