]> granicus.if.org Git - pdns/commitdiff
auth lmdb: add schema versioning
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>
Tue, 6 Aug 2019 10:01:51 +0000 (12:01 +0200)
(cherry picked from commit 370ae1cd4cd8869e2ba6d6525ac2dd6da5127b78)

modules/lmdbbackend/lmdbbackend.cc

index 9b4c83817c558159042dab473acc34ee1e13681a..57ce194d59146a926759695150a57285ee4c4112 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");
 }