diff --git a/src/knot/journal/journal_basic.c b/src/knot/journal/journal_basic.c index 8dc8d165faac4abedf158b5e193b534bd8bd74d1..9874574eab816ccd6bb35e6813dbb0f0ce7b2692 100644 --- a/src/knot/journal/journal_basic.c +++ b/src/knot/journal/journal_basic.c @@ -15,8 +15,6 @@ */ #include "knot/journal/journal_basic.h" - -#include "knot/conf/conf.h" #include "knot/journal/journal_metadata.h" #include "libknot/error.h" @@ -64,18 +62,18 @@ bool journal_serial_to(knot_lmdb_txn_t *txn, bool zij, uint32_t serial, bool journal_allow_flush(zone_journal_t j) { - conf_val_t val = conf_zone_get(conf(), C_ZONEFILE_SYNC, j.zone); + conf_val_t val = conf_zone_get(j.conf, C_ZONEFILE_SYNC, j.zone); return conf_int(&val) >= 0; } size_t journal_conf_max_usage(zone_journal_t j) { - conf_val_t val = conf_zone_get(conf(), C_JOURNAL_MAX_USAGE, j.zone); + conf_val_t val = conf_zone_get(j.conf, C_JOURNAL_MAX_USAGE, j.zone); return conf_int(&val); } size_t journal_conf_max_changesets(zone_journal_t j) { - conf_val_t val = conf_zone_get(conf(), C_JOURNAL_MAX_DEPTH, j.zone); + conf_val_t val = conf_zone_get(j.conf, C_JOURNAL_MAX_DEPTH, j.zone); return conf_int(&val); } diff --git a/src/knot/journal/journal_basic.h b/src/knot/journal/journal_basic.h index cacc2c0bbcb438ed0857dd1399da1093b9865903..02ca5ddf6498d82fefad8a1a56ddee24e42e3e10 100644 --- a/src/knot/journal/journal_basic.h +++ b/src/knot/journal/journal_basic.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2019 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2021 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ #pragma once -#include "knot/conf/schema.h" +#include "knot/conf/conf.h" #include "knot/journal/knot_lmdb.h" #include "knot/updates/changesets.h" #include "libknot/dname.h" @@ -24,6 +24,7 @@ typedef struct { knot_lmdb_db_t *db; const knot_dname_t *zone; + void *conf; // needed only for journal write operations } zone_journal_t; #define JOURNAL_CHUNK_MAX (70 * 1024) diff --git a/src/knot/zone/zone.c b/src/knot/zone/zone.c index 2574c5327bdcd24b76017a8ba4f5ed5226b49e8e..07958dda63463c56a48d2caf130874d34b0fbd91 100644 --- a/src/knot/zone/zone.c +++ b/src/knot/zone/zone.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2020 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2021 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -257,14 +257,16 @@ int zone_change_store(conf_t *conf, zone_t *zone, changeset_t *change, changeset return KNOT_EINVAL; } - int ret = journal_insert(zone_journal(zone), change, extra); + zone_journal_t j = { zone->journaldb, zone->name, conf }; + + int ret = journal_insert(j, change, extra); if (ret == KNOT_EBUSY) { log_zone_notice(zone->name, "journal is full, flushing"); /* Transaction rolled back, journal released, we may flush. */ ret = flush_journal(conf, zone, true, false); if (ret == KNOT_EOK) { - ret = journal_insert(zone_journal(zone), change, extra); + ret = journal_insert(j, change, extra); } } @@ -286,7 +288,9 @@ int zone_in_journal_store(conf_t *conf, zone_t *zone, zone_contents_t *new_conte return KNOT_EINVAL; } - int ret = journal_insert_zone(zone_journal(zone), new_contents); + zone_journal_t j = { zone->journaldb, zone->name, conf }; + + int ret = journal_insert_zone(j, new_contents); if (ret == KNOT_EOK) { log_zone_info(zone->name, "zone stored to journal, serial %u", zone_contents_serial(new_contents)); diff --git a/src/knot/zone/zone.h b/src/knot/zone/zone.h index 84eb706d6903edf9d58e48d49b05cc2bf421164d..0ea2a66dfdea30ebb000239cf5a2fc6ba5cd3ab4 100644 --- a/src/knot/zone/zone.h +++ b/src/knot/zone/zone.h @@ -141,9 +141,12 @@ void zone_reset(conf_t *conf, zone_t *zone); */ void zone_control_clear(zone_t *zone); +/*! + * \brief Only for RO journal operations. + */ inline static zone_journal_t zone_journal(zone_t *zone) { - zone_journal_t j = { zone->journaldb, zone->name }; + zone_journal_t j = { zone->journaldb, zone->name, NULL }; return j; } diff --git a/tests/knot/test_journal.c b/tests/knot/test_journal.c index 18ffd21259cade29028ac3935ae40496c7242f47..3e2025cb3684576474e3690e6b0aa5694fc6b84b 100644 --- a/tests/knot/test_journal.c +++ b/tests/knot/test_journal.c @@ -31,7 +31,6 @@ #include "libknot/libknot.h" #include "knot/zone/zone.h" #include "knot/zone/zone-diff.h" -#include "libknot/rrtype/soa.h" #include "test_conf.h" #define RAND_RR_LABEL 16 @@ -58,6 +57,7 @@ static void set_conf(int zonefile_sync, size_t journal_usage, const knot_dname_t zonefile_sync, journal_usage); _unused_ int ret = test_conf(conf_str, NULL); assert(ret == KNOT_EOK); + jj.conf = conf(); } static void unset_conf(void) @@ -457,7 +457,7 @@ static void test_size_control(const knot_dname_t *zone1, const knot_dname_t *zon { set_conf(-1, 100 * 1024, zone1); - zone_journal_t jj2 = { &jdb, zone2 }; + zone_journal_t jj2 = { &jdb, zone2, conf() }; changeset_t *small_ch2 = changeset_new(zone2); init_random_changeset(small_ch2, 1, 2, 100, zone2, false); int ret = journal_insert(jj2, small_ch2, NULL);