From: Peter van Dijk Date: Fri, 26 Jul 2019 17:10:49 +0000 (+0200) Subject: auth lmdb: add schema versioning X-Git-Tag: auth-4.2.0-rc3~7^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7b16a53ef990c2fb467809d8eaa7cb82d6caa7eb;p=pdns auth lmdb: add schema versioning (cherry picked from commit 370ae1cd4cd8869e2ba6d6525ac2dd6da5127b78) --- diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index 9b4c83817..57ce194d5 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"); }