]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/rocksdb/table/block_based/reader_common.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / rocksdb / table / block_based / reader_common.cc
index bb2376afa458a54022218146bcc94fbb96d485ce..0ff43e9b4e636a25fc31307488a181da42649a1a 100644 (file)
@@ -9,19 +9,20 @@
 #include "table/block_based/reader_common.h"
 
 #include "monitoring/perf_context_imp.h"
+#include "rocksdb/table.h"
+#include "table/format.h"
 #include "util/coding.h"
 #include "util/crc32c.h"
-#include "util/hash.h"
 #include "util/string_util.h"
-#include "util/xxhash.h"
 
 namespace ROCKSDB_NAMESPACE {
 void ForceReleaseCachedEntry(void* arg, void* h) {
   Cache* cache = reinterpret_cast<Cache*>(arg);
   Cache::Handle* handle = reinterpret_cast<Cache::Handle*>(h);
-  cache->Release(handle, true /* force_erase */);
+  cache->Release(handle, true /* erase_if_last_ref */);
 }
 
+// WART: this is specific to block-based table
 Status VerifyBlockChecksum(ChecksumType type, const char* data,
                            size_t block_size, const std::string& file_name,
                            uint64_t offset) {
@@ -32,33 +33,20 @@ Status VerifyBlockChecksum(ChecksumType type, const char* data,
   // And then the stored checksum value (4 bytes).
   uint32_t stored = DecodeFixed32(data + len);
 
-  Status s;
-  uint32_t computed = 0;
-  switch (type) {
-    case kNoChecksum:
-      break;
-    case kCRC32c:
+  uint32_t computed = ComputeBuiltinChecksum(type, data, len);
+  if (stored == computed) {
+    return Status::OK();
+  } else {
+    // Unmask for people who might look for reference crc value
+    if (type == kCRC32c) {
       stored = crc32c::Unmask(stored);
-      computed = crc32c::Value(data, len);
-      break;
-    case kxxHash:
-      computed = XXH32(data, len, 0);
-      break;
-    case kxxHash64:
-      computed = Lower32of64(XXH64(data, len, 0));
-      break;
-    default:
-      s = Status::Corruption(
-          "unknown checksum type " + ToString(type) + " from footer of " +
-          file_name + ", while checking block at offset " + ToString(offset) +
-          " size " + ToString(block_size));
+      computed = crc32c::Unmask(computed);
+    }
+    return Status::Corruption(
+        "block checksum mismatch: stored = " + std::to_string(stored) +
+        ", computed = " + std::to_string(computed) +
+        ", type = " + std::to_string(type) + "  in " + file_name + " offset " +
+        std::to_string(offset) + " size " + std::to_string(block_size));
   }
-  if (s.ok() && stored != computed) {
-    s = Status::Corruption(
-        "block checksum mismatch: stored = " + ToString(stored) +
-        ", computed = " + ToString(computed) + "  in " + file_name +
-        " offset " + ToString(offset) + " size " + ToString(block_size));
-  }
-  return s;
 }
 }  // namespace ROCKSDB_NAMESPACE