From: Jason Dillaman Date: Fri, 13 May 2016 19:22:30 +0000 (-0400) Subject: journal: async callback for advancing the active object set X-Git-Tag: v11.0.0~518^2~9 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ca89abfd9e6f0e8edc3234afea387757ef694826;p=ceph.git journal: async callback for advancing the active object set Signed-off-by: Jason Dillaman --- diff --git a/src/journal/JournalMetadata.cc b/src/journal/JournalMetadata.cc index ba85f4b3959e..a05aa5a907ce 100644 --- a/src/journal/JournalMetadata.cc +++ b/src/journal/JournalMetadata.cc @@ -534,19 +534,26 @@ void JournalMetadata::set_minimum_set(uint64_t object_set) { m_minimum_set = object_set; } -void JournalMetadata::set_active_set(uint64_t object_set) { +int JournalMetadata::set_active_set(uint64_t object_set) { + C_SaferCond ctx; + set_active_set(object_set, &ctx); + return ctx.wait(); +} + +void JournalMetadata::set_active_set(uint64_t object_set, Context *on_finish) { Mutex::Locker locker(m_lock); ldout(m_cct, 20) << __func__ << ": current=" << m_active_set << ", new=" << object_set << dendl; if (m_active_set >= object_set) { + m_work_queue->queue(on_finish, 0); return; } librados::ObjectWriteOperation op; client::set_active_set(&op, object_set); - C_NotifyUpdate *ctx = new C_NotifyUpdate(this); + C_NotifyUpdate *ctx = new C_NotifyUpdate(this, on_finish); librados::AioCompletion *comp = librados::Rados::aio_create_completion(ctx, NULL, utils::rados_ctx_callback); diff --git a/src/journal/JournalMetadata.h b/src/journal/JournalMetadata.h index c9e6d931bfc7..9d19af69f103 100644 --- a/src/journal/JournalMetadata.h +++ b/src/journal/JournalMetadata.h @@ -110,7 +110,8 @@ public: return m_minimum_set; } - void set_active_set(uint64_t object_set); + int set_active_set(uint64_t object_set); + void set_active_set(uint64_t object_set, Context *on_finish); inline uint64_t get_active_set() const { Mutex::Locker locker(m_lock); return m_active_set; diff --git a/src/test/journal/test_JournalMetadata.cc b/src/test/journal/test_JournalMetadata.cc index 850263d88804..b0bb41c844c9 100644 --- a/src/test/journal/test_JournalMetadata.cc +++ b/src/test/journal/test_JournalMetadata.cc @@ -110,7 +110,7 @@ TEST_F(TestJournalMetadata, UpdateActiveObject) { ASSERT_EQ(0U, metadata1->get_active_set()); - metadata1->set_active_set(123); + ASSERT_EQ(0, metadata1->set_active_set(123)); ASSERT_TRUE(wait_for_update(metadata1)); ASSERT_EQ(123U, metadata1->get_active_set()); diff --git a/src/test/journal/test_JournalPlayer.cc b/src/test/journal/test_JournalPlayer.cc index 7ad92be3e2ca..54e555fc37d6 100644 --- a/src/test/journal/test_JournalPlayer.cc +++ b/src/test/journal/test_JournalPlayer.cc @@ -374,7 +374,7 @@ TEST_F(TestJournalPlayer, PrefetchSkippedObject) { journal::JournalMetadataPtr metadata = create_metadata(oid); ASSERT_EQ(0, init_metadata(metadata)); - metadata->set_active_set(2); + ASSERT_EQ(0, metadata->set_active_set(2)); journal::JournalPlayer *player = create_player(oid, metadata); @@ -420,7 +420,7 @@ TEST_F(TestJournalPlayer, ImbalancedJournal) { journal::JournalMetadataPtr metadata = create_metadata(oid); ASSERT_EQ(0, init_metadata(metadata)); - metadata->set_active_set(2); + ASSERT_EQ(0, metadata->set_active_set(2)); metadata->set_minimum_set(2); journal::JournalPlayer *player = create_player(oid, metadata); @@ -472,7 +472,7 @@ TEST_F(TestJournalPlayer, LiveReplayLaggyAppend) { ASSERT_EQ(0, write_entry(oid, 0, 0, 2)); ASSERT_EQ(0, write_entry(oid, 0, 0, 4)); ASSERT_EQ(0, write_entry(oid, 3, 0, 5)); // laggy entry 0/3 in object 1 - metadata->set_active_set(1); + ASSERT_EQ(0, metadata->set_active_set(1)); player->prefetch_and_watch(0.25); Entries entries; diff --git a/src/test/journal/test_JournalTrimmer.cc b/src/test/journal/test_JournalTrimmer.cc index 9a9291fb418d..296a9da8cc3b 100644 --- a/src/test/journal/test_JournalTrimmer.cc +++ b/src/test/journal/test_JournalTrimmer.cc @@ -72,7 +72,7 @@ TEST_F(TestJournalTrimmer, Committed) { ASSERT_EQ(0, init_metadata(metadata)); ASSERT_TRUE(wait_for_update(metadata)); - metadata->set_active_set(10); + ASSERT_EQ(0, metadata->set_active_set(10)); ASSERT_TRUE(wait_for_update(metadata)); uint64_t commit_tid1; @@ -115,7 +115,7 @@ TEST_F(TestJournalTrimmer, CommittedWithOtherClient) { ASSERT_EQ(0, init_metadata(metadata)); ASSERT_TRUE(wait_for_update(metadata)); - metadata->set_active_set(10); + ASSERT_EQ(0, metadata->set_active_set(10)); ASSERT_TRUE(wait_for_update(metadata)); uint64_t commit_tid1; @@ -150,7 +150,7 @@ TEST_F(TestJournalTrimmer, RemoveObjects) { ASSERT_EQ(0, init_metadata(metadata)); ASSERT_TRUE(wait_for_update(metadata)); - metadata->set_active_set(10); + ASSERT_EQ(0, metadata->set_active_set(10)); ASSERT_TRUE(wait_for_update(metadata)); ASSERT_EQ(0, append(oid + ".0", create_payload("payload")));