]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth lmdb: add schema versioning 8129/head
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Fri, 26 Jul 2019 17:10:49 +0000 (19:10 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Fri, 26 Jul 2019 17:10:49 +0000 (19:10 +0200)
modules/lmdbbackend/lmdbbackend.cc

index e78744a937b0664422da0f29177005c8b497cf9c..36a533e808a3e39d7eba52bc270c06bbcb2335e5 100644 (file)
@@ -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<uint32_t>();
+    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");
 }