}
}
+MDB_val journal_zone_prefix(const knot_dname_t *zone)
+{
+ return knot_lmdb_make_key("NI", zone, (uint32_t)0);
+}
+
+void journal_del_zone(knot_lmdb_txn_t *txn, const knot_dname_t *zone)
+{
+ assert(txn->is_rw);
+ MDB_val prefix = journal_zone_prefix(zone);
+ knot_lmdb_del_prefix(txn, &prefix);
+ free(prefix.mv_data);
+}
+
void journal_make_header(void *chunk, uint32_t ch_serial_to)
{
knot_lmdb_make_key_part(chunk, JOURNAL_HEADER_SIZE, "IILLL", ch_serial_to,
*/
MDB_val journal_changeset_to_chunk_key(const changeset_t *ch, uint32_t chunk_id);
+/*!
+ * \brief Return a key prefix to operate with all zone-related records.
+ */
+MDB_val journal_zone_prefix(const knot_dname_t *zone);
+
+/*!
+ * \brief Delete all zone-related records from journal with open read-write txn.
+ */
+void journal_del_zone(knot_lmdb_txn_t *txn, const knot_dname_t *zone);
+
/*!
* \brief Initialise chunk header.
*
knot_lmdb_begin(j.db, &txn, true);
update_last_inserter(&txn, NULL);
- MDB_val prefix = { knot_dname_size(j.zone), (void *)j.zone };
- knot_lmdb_del_prefix(&txn, &prefix);
+ journal_del_zone(&txn, j.zone);
knot_lmdb_commit(&txn);
return txn.ret;
knot_lmdb_begin(from, &tr, true);
knot_lmdb_begin(to, &tw, true);
update_last_inserter(&tr, NULL);
- MDB_val prefix = { knot_dname_size(zone), (void *)zone };
+ MDB_val prefix = journal_zone_prefix(zone);
knot_lmdb_copy_prefix(&tr, &tw, &prefix);
+ free(prefix.mv_data);
knot_lmdb_commit(&tw);
knot_lmdb_commit(&tr);
done:
knot_lmdb_begin(j.db, &txn, true);
update_last_inserter(&txn, j.zone);
- MDB_val prefix = { knot_dname_size(j.zone), (void *)j.zone };
- knot_lmdb_del_prefix(&txn, &prefix);
+ journal_del_zone(&txn, j.zone);
journal_write_zone(&txn, z);
if (journal_contains(&txn, true, 0, j.zone)) {
txn.ret = KNOT_ESEMCHECK;
} else {
- MDB_val prefix = { knot_dname_size(j.zone), (void *)j.zone };
- knot_lmdb_del_prefix(&txn, &prefix);
+ journal_del_zone(&txn, j.zone);
memset(&md, 0, sizeof(md));
}
}