From 3a99c00de710001bf28b940578ddc8d92272b28a Mon Sep 17 00:00:00 2001 From: Peter van Dijk Date: Thu, 6 Jul 2023 15:09:07 +0200 Subject: [PATCH] auth lmdb: in Lightning Stream mode, during deleteDomain, use RW transaction to get ID list --- modules/lmdbbackend/lmdbbackend.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index ada437db98..7a062b24d5 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -1321,7 +1321,11 @@ bool LMDBBackend::deleteDomain(const DNSName& domain) idvec.push_back(txn.get<0>(domain, di)); } else { - auto txn = d_tdomains->getROTransaction(); + // this transaction used to be RO. + // it is now RW to narrow a race window between PowerDNS and Lightning Stream + // FIXME: turn the entire delete, including this ID scan, into one RW transaction + // when doing that, first do a short RO check to see if we actually have anything to delete + auto txn = d_tdomains->getRWTransaction(); txn.get_multi<0>(domain, idvec); } -- 2.47.2