]> git-server-git.apps.pok.os.sepia.ceph.com Git - rocksdb.git/commitdiff
Fix clang failure (#8621)
authorAkanksha Mahajan <akankshamahajan@fb.com>
Thu, 5 Aug 2021 00:11:47 +0000 (17:11 -0700)
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>
Thu, 5 Aug 2021 00:12:58 +0000 (17:12 -0700)
Summary:
Fixed clang failure because of memory leak

Pull Request resolved: https://github.com/facebook/rocksdb/pull/8621

Test Plan: CircleCI clang job

Reviewed By: pdillinger

Differential Revision: D30114337

Pulled By: akankshamahajan15

fbshipit-source-id: 16572b9bcbaa053c2ab7bc1c344148d0e6f8039c

table/block_based/block_based_table_builder.cc

index 189a5dd9985bfaaf020f83d35dcbe47522243afa..07c545656d6fec882161e485dc85e549b2bd2043 100644 (file)
@@ -1501,24 +1501,30 @@ Status BlockBasedTableBuilder::InsertBlockInCache(const Slice& block_contents,
     const size_t read_amp_bytes_per_bit =
         rep_->table_options.read_amp_bytes_per_bit;
 
-    TBlocklike* block_holder = BlocklikeTraits<TBlocklike>::Create(
-        std::move(results), read_amp_bytes_per_bit,
-        rep_->ioptions.statistics.get(),
-        false /*rep_->blocks_definitely_zstd_compressed*/,
-        rep_->table_options.filter_policy.get());
-
-    if (block_holder->own_bytes()) {
-      size_t charge = block_holder->ApproximateMemoryUsage();
-      s = block_cache->Insert(key, block_holder, charge,
-                              &DeleteEntryCached<TBlocklike>);
-
-      if (s.ok()) {
-        BlockBasedTable::UpdateCacheInsertionMetrics(
-            block_type, nullptr /*get_context*/, charge, s.IsOkOverwritten(),
-            rep_->ioptions.stats);
-      } else {
-        RecordTick(rep_->ioptions.stats, BLOCK_CACHE_ADD_FAILURES);
-      }
+    // TODO akanksha:: Dedup below code by calling
+    // BlockBasedTable::PutDataBlockToCache.
+    std::unique_ptr<TBlocklike> block_holder(
+        BlocklikeTraits<TBlocklike>::Create(
+            std::move(results), read_amp_bytes_per_bit,
+            rep_->ioptions.statistics.get(),
+            false /*rep_->blocks_definitely_zstd_compressed*/,
+            rep_->table_options.filter_policy.get()));
+
+    assert(block_holder->own_bytes());
+    size_t charge = block_holder->ApproximateMemoryUsage();
+    s = block_cache->Insert(
+        key, block_holder.get(),
+        BlocklikeTraits<TBlocklike>::GetCacheItemHelper(block_type), charge,
+        nullptr, Cache::Priority::LOW);
+
+    if (s.ok()) {
+      // Release ownership of block_holder.
+      block_holder.release();
+      BlockBasedTable::UpdateCacheInsertionMetrics(
+          block_type, nullptr /*get_context*/, charge, s.IsOkOverwritten(),
+          rep_->ioptions.stats);
+    } else {
+      RecordTick(rep_->ioptions.stats, BLOCK_CACHE_ADD_FAILURES);
     }
   }
   return s;