From 370ae1cd4cd8869e2ba6d6525ac2dd6da5127b78 Mon Sep 17 00:00:00 2001 From: Peter van Dijk Date: Fri, 26 Jul 2019 19:10:49 +0200 Subject: [PATCH] auth lmdb: add schema versioning --- modules/lmdbbackend/lmdbbackend.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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"); } -- 2.47.2