From b57c9daea5f37c120efcd45a01483a1c03ab779f Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Wed, 19 Oct 2016 13:41:40 +0000 Subject: [PATCH] os/memstore, os/filestore: fix store_test's to satisfy rm_coll behavior expected in store_test Signed-off-by: Igor Fedotov --- src/os/filestore/FileStore.cc | 4 ++-- src/os/memstore/MemStore.cc | 2 +- src/test/objectstore/store_test.cc | 25 ++++++++++++++++++------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/os/filestore/FileStore.cc b/src/os/filestore/FileStore.cc index 232892ce48d62..96a45da067640 100644 --- a/src/os/filestore/FileStore.cc +++ b/src/os/filestore/FileStore.cc @@ -3003,8 +3003,8 @@ void FileStore::_do_transaction( msg = "ENOTEMPTY suggests garbage data in osd data dir"; } - dout(0) << " error " << cpp_strerror(r) << " not handled on operation " << op - << " (" << spos << ", or op " << spos.op << ", counting from 0)" << dendl; + derr << " error " << cpp_strerror(r) << " not handled on operation " << op + << " (" << spos << ", or op " << spos.op << ", counting from 0)" << dendl; dout(0) << msg << dendl; dout(0) << " transaction dump:\n"; JSONFormatter f(true); diff --git a/src/os/memstore/MemStore.cc b/src/os/memstore/MemStore.cc index 8158259ba74fa..2feaa43b8d124 100644 --- a/src/os/memstore/MemStore.cc +++ b/src/os/memstore/MemStore.cc @@ -1045,7 +1045,7 @@ void MemStore::_do_transaction(Transaction& t) dump_all(); } - dout(0) << " error " << cpp_strerror(r) << " not handled on operation " << op->op + derr << " error " << cpp_strerror(r) << " not handled on operation " << op->op << " (op " << pos << ", counting from 0)" << dendl; dout(0) << msg << dendl; dout(0) << " transaction dump:\n"; diff --git a/src/test/objectstore/store_test.cc b/src/test/objectstore/store_test.cc index 4a5df47c8470c..2c17eb6ee4b2d 100644 --- a/src/test/objectstore/store_test.cc +++ b/src/test/objectstore/store_test.cc @@ -2725,7 +2725,14 @@ TEST_P(StoreTest, SimpleCloneTest) { rl.hexdump(cout);*/ ASSERT_TRUE(bl_eq(rl, final)); } - { + + //Unfortunately we need a workaround for filestore since EXPECT_DEATH + // macro has potential issues when using /in multithread environments. + //It works well for all stores but filestore for now. + //A fix setting gtest_death_test_style = "threadsafe" doesn't help as well - + // test app clone asserts on store folder presence. + // + if (string(GetParam()) != "filestore") { //verify if non-empty collection is properly handled after store reload r = store->umount(); ASSERT_EQ(r, 0); @@ -2739,26 +2746,30 @@ TEST_P(StoreTest, SimpleCloneTest) { } { - //verify if non-empty collection is properly handled when there are some pending removes and live records in db - cerr << "Invalid rm coll again" << std::endl; - ObjectStore::Transaction t; t.touch(cid, hoid3); //new record in db - t.remove(cid, hoid); - t.remove(cid, hoid2); r = apply_transaction(store, &osr, std::move(t)); ASSERT_EQ(r, 0); - + } + //See comment above for "filestore" check explanation. + if (string(GetParam()) != "filestore") { + ObjectStore::Transaction t; + //verify if non-empty collection is properly handled when there are some pending removes and live records in db + cerr << "Invalid rm coll again" << std::endl; r = store->umount(); ASSERT_EQ(r, 0); r = store->mount(); ASSERT_EQ(r, 0); + t.remove(cid, hoid); + t.remove(cid, hoid2); t.remove_collection(cid); EXPECT_DEATH(apply_transaction(store, &osr, std::move(t)), ".*Directory not empty.*"); } { ObjectStore::Transaction t; + t.remove(cid, hoid); + t.remove(cid, hoid2); t.remove(cid, hoid3); t.remove_collection(cid); cerr << "Cleaning" << std::endl;