From 7b16a53ef990c2fb467809d8eaa7cb82d6caa7eb 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 (cherry picked from commit 370ae1cd4cd8869e2ba6d6525ac2dd6da5127b78) --- 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 9b4c83817c..57ce194d59 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