Skip to content
Snippets Groups Projects
Commit c2a0515d authored by Libor Peltan's avatar Libor Peltan
Browse files

journal: bugfix: avoid deleting zero-byte prefix...

...when deleting rootzone-related records
because it also deletes global metadata
parent 58f9e091
No related branches found
No related tags found
1 merge request!1332two journal bugfixes
Pipeline #85962 passed
......@@ -36,6 +36,19 @@ MDB_val journal_changeset_to_chunk_key(const changeset_t *ch, uint32_t chunk_id)
}
}
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,
......
......@@ -58,6 +58,16 @@ MDB_val journal_changeset_id_to_key(bool zone_in_journal, uint32_t serial, const
*/
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.
*
......
......@@ -295,8 +295,7 @@ int journal_scrape_with_md(zone_journal_t j, bool check_existence)
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;
......@@ -313,8 +312,9 @@ int journal_copy_with_md(knot_lmdb_db_t *from, knot_lmdb_db_t *to, const knot_dn
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:
......
......@@ -225,8 +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);
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);
......@@ -282,8 +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 {
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));
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment