From: Peter van Dijk Date: Thu, 6 Jul 2023 13:09:07 +0000 (+0200) Subject: auth lmdb: in Lightning Stream mode, during deleteDomain, use RW transaction to get... X-Git-Tag: rec-5.0.0-alpha1~127^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F12990%2Fhead;p=thirdparty%2Fpdns.git auth lmdb: in Lightning Stream mode, during deleteDomain, use RW transaction to get ID list --- 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); }