From 6f3ea5dd6db432bc744c22e0d60dbe98483704ca Mon Sep 17 00:00:00 2001 From: Peter van Dijk Date: Mon, 11 Jan 2021 12:27:41 +0100 Subject: [PATCH] auth lmdb: serialise LMDBBackend construction --- modules/lmdbbackend/lmdbbackend.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index 9cf2a90d8d..dea714d4f9 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -32,6 +32,7 @@ #include "pdns/logger.hh" #include "pdns/version.hh" #include "pdns/arguments.hh" +#include "pdns/lock.hh" #include #include #include @@ -53,8 +54,14 @@ // List the class version here. Default is 0 BOOST_CLASS_VERSION(LMDBBackend::KeyDataDB, 1) +static std::mutex s_lmdbOpenUpgradeLock; + LMDBBackend::LMDBBackend(const std::string& suffix) { + // we lock to avoid a race condition when we do a schema upgrade during startup + // non-upgrade startups should be very cheap so this lock should not hurt performance + std::lock_guard l(s_lmdbOpenUpgradeLock); + setArgPrefix("lmdb"+suffix); string syncMode = toLower(getArg("sync-mode")); @@ -544,6 +551,8 @@ std::shared_ptr LMDBBackend::getRecordsROTran bool LMDBBackend::upgradeToSchemav3() { + g_log << Logger::Info<<"Upgrading LMDB schema"<