From f646704081540c2192f64423e5d249c69da50ea5 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Tue, 6 Aug 2019 14:12:11 +0800 Subject: [PATCH] journal: always shutdown JournalRecoreder before destructing it otherwise when we destruct `journal::JournalRecorder::m_object_locks`, it/they would be still being waited by some condition variable. Signed-off-by: Kefu Chai --- src/test/journal/test_JournalRecorder.cc | 46 +++++++++++------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/src/test/journal/test_JournalRecorder.cc b/src/test/journal/test_JournalRecorder.cc index 7197526a1ce40..41518f8e9be07 100644 --- a/src/test/journal/test_JournalRecorder.cc +++ b/src/test/journal/test_JournalRecorder.cc @@ -7,30 +7,26 @@ #include "test/journal/RadosTestFixture.h" #include #include +#include class TestJournalRecorder : public RadosTestFixture { public: - - void TearDown() override { - for (std::list::iterator it = m_recorders.begin(); - it != m_recorders.end(); ++it) { - delete *it; - } - RadosTestFixture::TearDown(); - } - - journal::JournalRecorder *create_recorder( + using JournalRecorderPtr = std::unique_ptr>; + JournalRecorderPtr create_recorder( const std::string &oid, const journal::JournalMetadataPtr &metadata) { - journal::JournalRecorder *recorder(new journal::JournalRecorder( - m_ioctx, oid + ".", metadata, 0)); - recorder->set_append_batch_options(0, std::numeric_limits::max(), - 0); - m_recorders.push_back(recorder); + JournalRecorderPtr recorder{ + new journal::JournalRecorder(m_ioctx, oid + ".", metadata, 0), + [](journal::JournalRecorder* recorder) { + C_SaferCond cond; + recorder->shut_down(&cond); + cond.wait(); + delete recorder; + } + }; + recorder->set_append_batch_options(0, std::numeric_limits::max(), 0); return recorder; } - - std::list m_recorders; - }; TEST_F(TestJournalRecorder, Append) { @@ -41,7 +37,7 @@ TEST_F(TestJournalRecorder, Append) { journal::JournalMetadataPtr metadata = create_metadata(oid); ASSERT_EQ(0, init_metadata(metadata)); - journal::JournalRecorder *recorder = create_recorder(oid, metadata); + JournalRecorderPtr recorder = create_recorder(oid, metadata); journal::Future future1 = recorder->append(123, create_payload("payload")); @@ -59,7 +55,7 @@ TEST_F(TestJournalRecorder, AppendKnownOverflow) { ASSERT_EQ(0, init_metadata(metadata)); ASSERT_EQ(0U, metadata->get_active_set()); - journal::JournalRecorder *recorder = create_recorder(oid, metadata); + JournalRecorderPtr recorder = create_recorder(oid, metadata); recorder->append(123, create_payload(std::string(metadata->get_object_size() - journal::Entry::get_fixed_size(), '1'))); @@ -81,8 +77,8 @@ TEST_F(TestJournalRecorder, AppendDelayedOverflow) { ASSERT_EQ(0, init_metadata(metadata)); ASSERT_EQ(0U, metadata->get_active_set()); - journal::JournalRecorder *recorder1 = create_recorder(oid, metadata); - journal::JournalRecorder *recorder2 = create_recorder(oid, metadata); + JournalRecorderPtr recorder1 = create_recorder(oid, metadata); + JournalRecorderPtr recorder2 = create_recorder(oid, metadata); recorder1->append(234, create_payload(std::string(1, '1'))); recorder2->append(123, create_payload(std::string(metadata->get_object_size() - @@ -105,7 +101,7 @@ TEST_F(TestJournalRecorder, FutureFlush) { journal::JournalMetadataPtr metadata = create_metadata(oid); ASSERT_EQ(0, init_metadata(metadata)); - journal::JournalRecorder *recorder = create_recorder(oid, metadata); + JournalRecorderPtr recorder = create_recorder(oid, metadata); journal::Future future1 = recorder->append(123, create_payload("payload1")); journal::Future future2 = recorder->append(123, create_payload("payload2")); @@ -125,7 +121,7 @@ TEST_F(TestJournalRecorder, Flush) { journal::JournalMetadataPtr metadata = create_metadata(oid); ASSERT_EQ(0, init_metadata(metadata)); - journal::JournalRecorder *recorder = create_recorder(oid, metadata); + JournalRecorderPtr recorder = create_recorder(oid, metadata); journal::Future future1 = recorder->append(123, create_payload("payload1")); journal::Future future2 = recorder->append(123, create_payload("payload2")); @@ -150,7 +146,7 @@ TEST_F(TestJournalRecorder, OverflowCommitObjectNumber) { ASSERT_EQ(0, init_metadata(metadata)); ASSERT_EQ(0U, metadata->get_active_set()); - journal::JournalRecorder *recorder = create_recorder(oid, metadata); + JournalRecorderPtr recorder = create_recorder(oid, metadata); recorder->append(123, create_payload(std::string(metadata->get_object_size() - journal::Entry::get_fixed_size(), '1'))); -- 2.39.5