From: Igor Fedotov Date: Mon, 9 Aug 2021 15:18:20 +0000 (+0300) Subject: test/store_test: more testing for deferred writes X-Git-Tag: v17.1.0~1131^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F42725%2Fhead;p=ceph.git test/store_test: more testing for deferred writes Signed-off-by: Igor Fedotov --- diff --git a/src/test/objectstore/store_test.cc b/src/test/objectstore/store_test.cc index 89818d50077f..9ed0c90896f3 100644 --- a/src/test/objectstore/store_test.cc +++ b/src/test/objectstore/store_test.cc @@ -7005,7 +7005,7 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { ghobject_t hoid(hobject_t("test", "", CEPH_NOSNAP, 0, -1, "")); ghobject_t hoid2(hobject_t("test2", "", CEPH_NOSNAP, 0, -1, "")); - const PerfCounters* logger = store->get_perf_counters(); + PerfCounters* logger = const_cast(store->get_perf_counters()); auto ch = store->create_new_collection(cid); { @@ -7386,9 +7386,9 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { ASSERT_LE(statfs.allocated, (unsigned)block_size * 64); } - // check whether overwrite (2 * prefer_deferred_size) partially - // overlapping two adjacent blobs goes non-deferred if one of the part is - // above prefer_deferred_size + logger->reset(); + // check whether overwrite (prefer_deferred_size < 120K < 2 * prefer_defer_size) partially + // overlapping two adjacent blobs goes partly deferred { ObjectStore::Transaction t; bufferlist bl; @@ -7399,8 +7399,10 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite) { ASSERT_EQ(r, 0); } sleep(2); - ASSERT_EQ(logger->get(l_bluestore_write_big), 13u); - ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 8u); + 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_write_deferred), 1u); + ASSERT_EQ(logger->get(l_bluestore_write_deferred_bytes), block_size); { struct store_statfs_t statfs; @@ -7457,7 +7459,7 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite2) { ASSERT_EQ(r, 0); ASSERT_EQ(logger->get(l_bluestore_write_big), 1u); ASSERT_EQ(logger->get(l_bluestore_write_big_bytes), bl.length()); - ASSERT_EQ(logger->get(l_bluestore_write_big_blobs), 2u); + ASSERT_EQ(logger->get(l_bluestore_write_big_blobs), 3u); ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 0u); ASSERT_EQ(logger->get(l_bluestore_write_deferred), 0u); ASSERT_EQ(logger->get(l_bluestore_write_deferred_bytes), 0); @@ -7476,10 +7478,10 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite2) { ASSERT_EQ(logger->get(l_bluestore_write_big), 1u); ASSERT_EQ(logger->get(l_bluestore_write_big_bytes), bl.length()); - ASSERT_EQ(logger->get(l_bluestore_write_big_blobs), 4u); - ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 2u); - ASSERT_EQ(logger->get(l_bluestore_write_deferred), 4u); - ASSERT_EQ(logger->get(l_bluestore_write_deferred_bytes), 2 * 65536); + ASSERT_EQ(logger->get(l_bluestore_write_big_blobs), 3u); + ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 1u); + ASSERT_EQ(logger->get(l_bluestore_write_deferred), 1u); + ASSERT_EQ(logger->get(l_bluestore_write_deferred_bytes), 57344); } { @@ -7537,6 +7539,24 @@ TEST_P(StoreTestSpecificAUSize, DeferredOnBigOverwrite3) { ASSERT_EQ(logger->get(l_bluestore_write_deferred), 0u); ASSERT_EQ(logger->get(l_bluestore_write_deferred_bytes), 0u); } + logger->reset(); + { + ObjectStore::Transaction t; + bufferlist bl; + + bl.append(std::string(4096 * 1024, 'c')); + + t.write(cid, hoid, 0x1000, bl.length(), bl, CEPH_OSD_OP_FLAG_FADVISE_NOCACHE); + r = queue_transaction(store, ch, std::move(t)); + ASSERT_EQ(r, 0); + + ASSERT_EQ(logger->get(l_bluestore_write_big), 1u); + ASSERT_EQ(logger->get(l_bluestore_write_big_bytes), bl.length()); + ASSERT_EQ(logger->get(l_bluestore_write_big_blobs), 65u); + ASSERT_EQ(logger->get(l_bluestore_write_big_deferred), 1u); + ASSERT_EQ(logger->get(l_bluestore_write_deferred), 1u); + ASSERT_EQ(logger->get(l_bluestore_write_deferred_bytes), 61440); + } { ObjectStore::Transaction t; t.remove(cid, hoid);