]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Make lmdb del() operations throw upon error.
authorMiod Vallat <miod.vallat@powerdns.com>
Thu, 19 Jun 2025 10:29:47 +0000 (12:29 +0200)
committerMiod Vallat <miod.vallat@powerdns.com>
Thu, 19 Jun 2025 14:06:38 +0000 (16:06 +0200)
In the current state of the code, in flag-deleted mode, failures always
throw; but in regular mode, in the unlikely event of an error during
deletion from cursor, the returned value would be either ignored or...
used to throw an exception.

Signed-off-by: Miod Vallat <miod.vallat@powerdns.com>
ext/lmdb-safe/lmdb-safe.hh
ext/lmdb-safe/lmdb-typed.hh

index 07148ecb0d0c4c2849e4e6a018beeba156564672..d8b84f790028c8d6da2e7e61f18e31777e616599 100644 (file)
@@ -824,7 +824,7 @@ public:
   }
 #endif
 
-  int del(MDBDbi& dbi, const MDBInVal& key)
+  void del(MDBDbi& dbi, const MDBInVal& key)
   {
     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-cstyle-cast)
     int mdbDelRc = mdb_del(d_txn, dbi, (MDB_val*)&key.d_mdbval, nullptr);
@@ -855,7 +855,6 @@ public:
       }
     }
 #endif
-    return mdbDelRc;
   }
 
   int get(MDBDbi& dbi, const MDBInVal& key, MDBOutVal& val)
@@ -942,7 +941,7 @@ public:
 #endif
 
 #ifndef DNSDIST
-  int del(int flags=0)
+  void del(int flags=0)
   {
     MDBOutVal key, val;
 
@@ -950,7 +949,7 @@ public:
       int rc_get = mdb_cursor_get (*this, &key.d_mdbval, &val.d_mdbval, MDB_GET_CURRENT);
 
       if(rc_get) {
-              throw std::runtime_error("getting key to mark data as deleted: " + std::string(mdb_strerror(rc_get)));
+        throw std::runtime_error("getting key to mark data as deleted: " + std::string(mdb_strerror(rc_get)));
       }
 
       size_t txid = mdb_txn_id(d_txn);
@@ -966,15 +965,16 @@ public:
 
       int rc_put = mdb_cursor_put(*this,
                      const_cast<MDB_val*>(&pkey.d_mdbval),
-                     const_cast<MDB_val*>(&pval.d_mdbval), 0 /* MDB_CURRENT */);
+                     const_cast<MDB_val*>(&pval.d_mdbval), 0);
       if(rc_put) {
-              throw std::runtime_error("marking data deleted: " + std::string(mdb_strerror(rc_put)));
+        throw std::runtime_error("marking data deleted: " + std::string(mdb_strerror(rc_put)));
       }
-      return rc_put;
     }
     else {
       // do a normal delete
-      return mdb_cursor_del(*this, flags);
+      if (int rc_del = mdb_cursor_del(*this, flags); rc_del != 0) {
+        throw std::runtime_error("deleting data: " + std::string(mdb_strerror(rc_del)));
+      }
     }
   }
 #endif
index 4cdcb4efaffd3313db722d2f1979b380980c32c0..bf78f8253cf4edb2a4ed79c90a73b53bfa162002 100644 (file)
@@ -158,10 +158,7 @@ struct LMDBIndexOps
     auto scombined = makeCombinedKey(keyConv(d_parent->getMember(type)), idVal);
     MDBInVal combined(scombined);
 
-    int errCode = txn->del(d_idx, combined);
-    if (errCode != 0) {
-      throw std::runtime_error("Error deleting from index: " + std::string(mdb_strerror(errCode)));
-    }
+    txn->del(d_idx, combined);
   }
 
   void openDB(std::shared_ptr<MDBEnv>& env, string_view str, int flags)