From: Peter van Dijk Date: Fri, 26 Jul 2019 17:10:49 +0000 (+0200) Subject: auth lmdb: add schema versioning X-Git-Tag: dnsdist-1.4.0-rc1~9^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F8129%2Fhead;p=thirdparty%2Fpdns.git auth lmdb: add schema versioning --- diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index e78744a937..36a533e808 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -46,6 +46,8 @@ #include "lmdbbackend.hh" +#define SCHEMAVERSION 1 + LMDBBackend::LMDBBackend(const std::string& suffix) { setArgPrefix("lmdb"+suffix); @@ -70,6 +72,16 @@ LMDBBackend::LMDBBackend(const std::string& suffix) auto pdnsdbi = d_tdomains->getEnv()->openDB("pdns", MDB_CREATE); auto txn = d_tdomains->getEnv()->getRWTransaction(); + MDBOutVal _schemaversion; + if(!txn.get(pdnsdbi, "schemaversion", _schemaversion)) { + auto schemaversion = _schemaversion.get(); + if (schemaversion != SCHEMAVERSION) { + throw std::runtime_error("Expected LMDB schema version "+std::to_string(SCHEMAVERSION)+" but got "+std::to_string(schemaversion)); + } + } + else { + txn.put(pdnsdbi, "schemaversion", SCHEMAVERSION); + } MDBOutVal shards; if(!txn.get(pdnsdbi, "shards", shards)) { @@ -81,9 +93,9 @@ LMDBBackend::LMDBBackend(const std::string& suffix) else { d_shards = atoi(getArg("shards").c_str()); txn.put(pdnsdbi, "shards", d_shards); - txn.commit(); } - d_trecords.resize(d_shards); + txn.commit(); + d_trecords.resize(d_shards); d_dolog = ::arg().mustDo("query-logging"); }