]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
lmdb: add interface to get timestamp from LS header
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Thu, 6 Apr 2023 12:25:50 +0000 (14:25 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Fri, 28 Apr 2023 11:50:48 +0000 (13:50 +0200)
ext/lmdb-safe/lmdb-safe.cc
ext/lmdb-safe/lmdb-safe.hh

index 4aa6d313a7d8e3ee70786ba3d175d941b4b76563..d4b820e73749822bb6e010ab3bbfe92444d2e165 100644 (file)
@@ -68,6 +68,11 @@ namespace LMDBLS {
     return (lsh->d_flags & LS_FLAG_DELETED) != 0;
   }
 
+  uint64_t LSgetTimestamp(std::string_view val) {
+    const LSheader* lsh = LSassertFixedHeaderSize(val);
+
+    return lsh->getTimestamp();
+  }
   bool s_flag_deleted{false};
   bool s_handle_dups{false};
 }
index 79c3c82dd3386b6bf62c8804ca6adf2bd1510816..b10b4568ec6b3b4a3f1011fb9c9e70b9d71508f5 100644 (file)
@@ -140,13 +140,16 @@ namespace LMDBLS {
       return std::string((char*)this, sizeof(*this)) + std::string(ntohs(d_numextra)*8, '\0');
     }
 
-
+    uint64_t getTimestamp() const {
+      return _LMDB_SAFE_BSWAP64MAYBE(d_timestamp);
+    }
   };
 
   static_assert(sizeof(LSheader)==24, "LSheader size is wrong");
 
   const size_t LS_MIN_HEADER_SIZE = sizeof(LSheader);
   const size_t LS_BLOCK_SIZE = 8;
+  const size_t LS_TIMESTAMP_OFFSET = 0;
   const size_t LS_NUMEXTRA_OFFSET = 22;
   const uint8_t LS_FLAG_DELETED = 0x01;
 
@@ -154,6 +157,7 @@ namespace LMDBLS {
   size_t LScheckHeaderAndGetSize(std::string_view val, size_t datasize=0);
   size_t LScheckHeaderAndGetSize(const MDBOutVal *val, size_t datasize=0);
   bool LSisDeleted(std::string_view val);
+  uint64_t LSgetTimestamp(std::string_view val);
 
   extern bool s_flag_deleted;
   extern bool s_handle_dups;