From 98894cdcb1512992151d1261667198b7514a0de4 Mon Sep 17 00:00:00 2001 From: Andrew Kryczka Date: Wed, 20 Mar 2024 15:55:58 -0700 Subject: [PATCH] repro test case --- db/blob/db_blob_basic_test.cc | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/db/blob/db_blob_basic_test.cc b/db/blob/db_blob_basic_test.cc index ef48844b432..e41933d3549 100644 --- a/db/blob/db_blob_basic_test.cc +++ b/db/blob/db_blob_basic_test.cc @@ -1182,6 +1182,30 @@ TEST_F(DBBlobBasicTest, GetMergeBlobWithPut) { ASSERT_EQ(Get("Key1"), "v1,v2,v3"); } +TEST_F(DBBlobBasicTest, GetMergeBlobFromMemoryTier) { + Options options = GetDefaultOptions(); + options.merge_operator = MergeOperators::CreateStringAppendOperator(); + options.enable_blob_files = true; + options.min_blob_size = 0; + + Reopen(options); + + ASSERT_OK(Put(Key(0), "v1")); + ASSERT_OK(Flush()); + ASSERT_OK(Merge(Key(0), "v2")); + ASSERT_OK(Flush()); + + // Regular `Get()` loads data block to cache. + std::string value; + ASSERT_OK(db_->Get(ReadOptions(), Key(0), &value)); + ASSERT_EQ("v1,v2", value); + + // Base value blob is still uncached, so an in-memory read will fail. + ReadOptions read_options; + read_options.read_tier = kBlockCacheTier; + ASSERT_TRUE(db_->Get(read_options, Key(0), &value).IsIncomplete()); +} + TEST_F(DBBlobBasicTest, MultiGetMergeBlobWithPut) { constexpr size_t num_keys = 3;