From: Igor Fedotov Date: Wed, 25 Oct 2023 13:17:58 +0000 (+0300) Subject: test/store_test: refactor DeferredOnBitOverwrite* tests X-Git-Tag: testing/wip-xiubli-testing-20240812.080715-reef~18^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=b1c7fa9b4deaf04592704afa84f3fcaae9d2708b;p=ceph-ci.git test/store_test: refactor DeferredOnBitOverwrite* tests Fixes: https://tracker.ceph.com/issues/63106 Signed-off-by: Igor Fedotov (cherry picked from commit 73f7c94f479ab7b2e244f05a7f3ca0d13b2fec00) --- diff --git a/src/test/objectstore/store_test.cc b/src/test/objectstore/store_test.cc index 9edfebd6b99..6cdd6fa6dc4 100644 --- a/src/test/objectstore/store_test.cc +++ b/src/test/objectstore/store_test.cc @@ -7728,7 +7728,7 @@ TEST_P(StoreTestSpecificAUSize, ZeroBlockDetectionBigOverwrite) { } } -TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { +TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite1) { if (string(GetParam()) != "bluestore") return; @@ -7845,7 +7845,7 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { bufferlist bl; bl.append(std::string(block_size, 'e')); - t.write(cid, hoid2, block_size , bl.length(), bl, CEPH_OSD_OP_FLAG_FADVISE_NOCACHE); + t.write(cid, hoid2, block_size, bl.length(), bl, CEPH_OSD_OP_FLAG_FADVISE_NOCACHE); r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } @@ -7902,17 +7902,50 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { ASSERT_EQ(statfs.data_stored, (unsigned)block_size * 5); ASSERT_LE(statfs.allocated, (unsigned)block_size * 5); } + store->refresh_perf_counters(); ASSERT_EQ(logger->get(l_bluestore_blobs), 2u); ASSERT_EQ(logger->get(l_bluestore_extents), 2u); - { ObjectStore::Transaction t; t.remove(cid, hoid); t.remove(cid, hoid2); + t.remove_collection(cid); + cerr << "Cleaning" << std::endl; r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } +} + +TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite2) { + + if (string(GetParam()) != "bluestore") + return; + if (smr) { + cout << "SKIP: no deferred" << std::endl; + return; + } + size_t block_size = 4096; + StartDeferred(block_size); + SetVal(g_conf(), "bluestore_max_blob_size", "131072"); + SetVal(g_conf(), "bluestore_prefer_deferred_size", "65536"); + + g_conf().apply_changes(nullptr); + + int r; + coll_t cid; + ghobject_t hoid(hobject_t("test", "", CEPH_NOSNAP, 0, -1, "")); + ghobject_t hoid2(hobject_t("test2", "", CEPH_NOSNAP, 0, -1, "")); + + PerfCounters* logger = const_cast(store->get_perf_counters()); + + auto ch = store->create_new_collection(cid); + { + ObjectStore::Transaction t; + t.create_collection(cid, 0); + r = queue_transaction(store, ch, std::move(t)); + ASSERT_EQ(r, 0); + } { ObjectStore::Transaction t; bufferlist bl; @@ -7922,8 +7955,8 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } - ASSERT_EQ(logger->get(l_bluestore_write_big), 6u); - ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 3u); + ASSERT_EQ(logger->get(l_bluestore_write_big), 1u); + ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 0u); { ObjectStore::Transaction t; @@ -7945,7 +7978,6 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { expected.append(string(block_size * 2 - 100, 'f')); ASSERT_TRUE(bl_eq(expected, bl)); } - sleep(2); { struct store_statfs_t statfs; int r = store->statfs(&statfs); @@ -7953,6 +7985,7 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { ASSERT_EQ(statfs.data_stored, (unsigned)block_size * 2 - 100); ASSERT_LE(statfs.allocated, (unsigned)block_size * 2); } + store->refresh_perf_counters(); ASSERT_EQ(logger->get(l_bluestore_blobs), 1u); ASSERT_EQ(logger->get(l_bluestore_extents), 1u); @@ -7965,8 +7998,8 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } - ASSERT_EQ(logger->get(l_bluestore_write_big), 7u); - ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 4u); + ASSERT_EQ(logger->get(l_bluestore_write_big), 2u); + ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 1u); { bufferlist bl, expected; r = store->read(ch, hoid, 0, block_size, bl); @@ -7989,6 +8022,7 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { ASSERT_EQ(statfs.data_stored, (unsigned)block_size * 2); ASSERT_LE(statfs.allocated, (unsigned)block_size * 2); } + store->refresh_perf_counters(); ASSERT_EQ(logger->get(l_bluestore_blobs), 1u); ASSERT_EQ(logger->get(l_bluestore_extents), 1u); @@ -8002,8 +8036,8 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } - ASSERT_EQ(logger->get(l_bluestore_write_big), 8u); - ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 4u); + ASSERT_EQ(logger->get(l_bluestore_write_big), 3u); + ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 1u); { bufferlist bl, expected; @@ -8025,10 +8059,43 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { ObjectStore::Transaction t; t.remove(cid, hoid); t.remove(cid, hoid2); + t.remove_collection(cid); + cerr << "Cleaning" << std::endl; r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } +} + +TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite3) { + + if (string(GetParam()) != "bluestore") + return; + if (smr) { + cout << "SKIP: no deferred" << std::endl; + return; + } + + size_t block_size = 4096; + StartDeferred(block_size); + SetVal(g_conf(), "bluestore_max_blob_size", "131072"); + SetVal(g_conf(), "bluestore_prefer_deferred_size", "65536"); + + g_conf().apply_changes(nullptr); + + int r; + coll_t cid; + ghobject_t hoid(hobject_t("test", "", CEPH_NOSNAP, 0, -1, "")); + ghobject_t hoid2(hobject_t("test2", "", CEPH_NOSNAP, 0, -1, "")); + PerfCounters* logger = const_cast(store->get_perf_counters()); + + auto ch = store->create_new_collection(cid); + { + ObjectStore::Transaction t; + t.create_collection(cid, 0); + r = queue_transaction(store, ch, std::move(t)); + ASSERT_EQ(r, 0); + } { ObjectStore::Transaction t; bufferlist bl; @@ -8040,8 +8107,8 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } - ASSERT_EQ(logger->get(l_bluestore_write_big), 10u); - ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 4u); + ASSERT_EQ(logger->get(l_bluestore_write_big), 2u); + ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 0u); // check whether overwrite (less than prefer_deferred_size) partially overlapping two adjacent blobs goes // deferred @@ -8054,8 +8121,8 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } - ASSERT_EQ(logger->get(l_bluestore_write_big), 11u); - ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 6u); + ASSERT_EQ(logger->get(l_bluestore_write_big), 3u); + ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 2u); { bufferlist bl, expected; @@ -8097,9 +8164,8 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } - sleep(2); - ASSERT_EQ(logger->get(l_bluestore_write_big), 12u); - ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 8u); + ASSERT_EQ(logger->get(l_bluestore_write_big), 4u); + ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 4u); { bufferlist bl, expected; @@ -8142,7 +8208,6 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } - sleep(2); ASSERT_EQ(logger->get(l_bluestore_write_big), 1u); ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 1u); ASSERT_EQ(logger->get(l_bluestore_issued_deferred_writes), 1u); @@ -8167,7 +8232,7 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { } } -TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite2) { +TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite4) { if (string(GetParam()) != "bluestore") return; @@ -8243,7 +8308,7 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite2) { } } -TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite3) { +TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite5) { if (string(GetParam()) != "bluestore") return;