From: Peter van Dijk Date: Fri, 28 Apr 2023 11:40:27 +0000 (+0200) Subject: add lmdb-lightning-stream option X-Git-Tag: auth-4.8.0-beta1~1^2~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cea7c50cc70174f20022ca7381dbd8c0579d536c;p=thirdparty%2Fpdns.git add lmdb-lightning-stream option --- diff --git a/docs/backends/lmdb.rst b/docs/backends/lmdb.rst index b3c48f83c2..df52719cf1 100644 --- a/docs/backends/lmdb.rst +++ b/docs/backends/lmdb.rst @@ -121,6 +121,17 @@ Defaults to 100 on 32 bit systems, and 16000 on 64 bit systems. Instead of deleting items from the database, flag them as deleted in the item's `Lightning Stream `_ header. Only enable this if you are using Lightning Stream. +``lmdb-lightning-stream`` +^^^^^^^^^^^^^^^^^^^^^^^^^ + + .. versionadded:: 4.8.0 + +Run in Lightning Stream compatible mode. This: + +* forces ``flag-deleted`` on +* forces ``random-ids`` on +* handles duplicate entries in databases that can result from domains being added on two Lightning Stream nodes at the same time + LMDB Structure -------------- diff --git a/ext/lmdb-safe/lmdb-safe.cc b/ext/lmdb-safe/lmdb-safe.cc index 33c3d4568a..4aa6d313a7 100644 --- a/ext/lmdb-safe/lmdb-safe.cc +++ b/ext/lmdb-safe/lmdb-safe.cc @@ -69,6 +69,7 @@ namespace LMDBLS { } bool s_flag_deleted{false}; + bool s_handle_dups{false}; } #endif /* #ifndef DNSDIST */ diff --git a/ext/lmdb-safe/lmdb-safe.hh b/ext/lmdb-safe/lmdb-safe.hh index 2d5983be67..79c3c82dd3 100644 --- a/ext/lmdb-safe/lmdb-safe.hh +++ b/ext/lmdb-safe/lmdb-safe.hh @@ -156,6 +156,7 @@ namespace LMDBLS { bool LSisDeleted(std::string_view val); extern bool s_flag_deleted; + extern bool s_handle_dups; } #undef _LMDB_SAFE_BSWAP64MAYBE diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index 749b4acb2b..05a64a230f 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include "ext/lmdb-safe/lmdb-safe.hh" #include #include #ifdef HAVE_CONFIG_H @@ -665,6 +666,13 @@ LMDBBackend::LMDBBackend(const std::string& suffix) } LMDBLS::s_flag_deleted = mustDo("flag-deleted"); + LMDBLS::s_handle_dups = false; + + if (mustDo("lightning-stream")) { + d_random_ids = true; + LMDBLS::s_flag_deleted = true; + LMDBLS::s_handle_dups = true; + } bool opened = false; @@ -2562,6 +2570,7 @@ public: declare(suffix, "random-ids", "Numeric IDs inside the database are generated randomly instead of sequentially", "no"); declare(suffix, "map-size", "LMDB map size in megabytes", (sizeof(void*) == 4) ? "100" : "16000"); declare(suffix, "flag-deleted", "Flag entries on deletion instead of deleting them", "no"); + declare(suffix, "lightning-stream", "Run in Lightning Stream compatible mode", "no"); } DNSBackend* make(const string& suffix = "") override {