]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
journal: async callback for advancing the active object set
authorJason Dillaman <dillaman@redhat.com>
Fri, 13 May 2016 19:22:30 +0000 (15:22 -0400)
committerJason Dillaman <dillaman@redhat.com>
Wed, 18 May 2016 15:02:28 +0000 (11:02 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/journal/JournalMetadata.cc
src/journal/JournalMetadata.h
src/test/journal/test_JournalMetadata.cc
src/test/journal/test_JournalPlayer.cc
src/test/journal/test_JournalTrimmer.cc

index ba85f4b3959eaeb42852ece65099b1bf3174d2fc..a05aa5a907ce00fca539dde75c76f9983be43ba9 100644 (file)
@@ -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);
index c9e6d931bfc760d7c6195c620977bba8f3307ec5..9d19af69f103245f15245c57c95fbba21ebd9c6d 100644 (file)
@@ -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;
index 850263d888042f7ce70f0e43fdf1c92d6b17c2ea..b0bb41c844c99c6ed72c218998658222565c34e9 100644 (file)
@@ -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());
index 7ad92be3e2ca090d70a039b4b65a66d0583747b6..54e555fc37d6812ae16541bcd9ee065bcac01904 100644 (file)
@@ -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;
index 9a9291fb418dc582c9f6725bc17f933edad3f2e5..296a9da8cc3bf5750257ee0f18be35a721ebadcb 100644 (file)
@@ -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")));