]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: avoid recursive callback when replaying journal
authorJason Dillaman <dillaman@redhat.com>
Fri, 15 Jan 2016 15:38:54 +0000 (10:38 -0500)
committerJason Dillaman <dillaman@redhat.com>
Fri, 15 Jan 2016 15:40:30 +0000 (10:40 -0500)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/journal/Replay.cc
src/test/librbd/journal/test_mock_Replay.cc

index f224214f9b5a18d94232d1727273340dcbea5299..c2cddde6a7095eafa1dcba6289154ef75f04a773 100644 (file)
@@ -47,6 +47,8 @@ void Replay<I>::process(bufferlist::iterator *it, Context *on_ready,
   CephContext *cct = m_image_ctx.cct;
   ldout(cct, 20) << this << " " << __func__ << dendl;
 
+  on_ready = util::create_async_context_callback(m_image_ctx, on_ready);
+
   journal::EventEntry event_entry;
   try {
     ::decode(event_entry, *it);
@@ -255,8 +257,7 @@ void Replay<I>::handle_event(const journal::SnapCreateEvent &event,
   // do not process more events until the state machine is ready
   // since it will affect IO
   op_event->op_in_progress = true;
-  op_event->on_start_ready = util::create_async_context_callback(
-    m_image_ctx, on_ready);
+  op_event->on_start_ready = on_ready;
 }
 
 template <typename I>
@@ -393,8 +394,7 @@ void Replay<I>::handle_event(const journal::ResizeEvent &event,
   // do not process more events until the state machine is ready
   // since it will affect IO
   op_event->op_in_progress = true;
-  op_event->on_start_ready = util::create_async_context_callback(
-    m_image_ctx, on_ready);
+  op_event->on_start_ready = on_ready;
 }
 
 template <typename I>
index 90475f65cc975f7b7b1b329886ac430028452dc8..81e8dd152a5ebdbdb1def8bcd889b26d96004118 100644 (file)
@@ -447,6 +447,7 @@ TEST_F(TestMockJournalReplay, OpEventError) {
 
   MockImageCtx mock_image_ctx(*ictx);
   MockJournalReplay mock_journal_replay(mock_image_ctx);
+  expect_op_work_queue(mock_image_ctx);
 
   InSequence seq;
   Context *on_finish;
@@ -513,6 +514,7 @@ TEST_F(TestMockJournalReplay, SnapRemoveEvent) {
 
   MockImageCtx mock_image_ctx(*ictx);
   MockJournalReplay mock_journal_replay(mock_image_ctx);
+  expect_op_work_queue(mock_image_ctx);
 
   InSequence seq;
   Context *on_finish;
@@ -543,6 +545,7 @@ TEST_F(TestMockJournalReplay, SnapRenameEvent) {
 
   MockImageCtx mock_image_ctx(*ictx);
   MockJournalReplay mock_journal_replay(mock_image_ctx);
+  expect_op_work_queue(mock_image_ctx);
 
   InSequence seq;
   Context *on_finish;
@@ -574,6 +577,7 @@ TEST_F(TestMockJournalReplay, SnapProtectEvent) {
 
   MockImageCtx mock_image_ctx(*ictx);
   MockJournalReplay mock_journal_replay(mock_image_ctx);
+  expect_op_work_queue(mock_image_ctx);
 
   InSequence seq;
   Context *on_finish;
@@ -604,6 +608,7 @@ TEST_F(TestMockJournalReplay, SnapUnprotectEvent) {
 
   MockImageCtx mock_image_ctx(*ictx);
   MockJournalReplay mock_journal_replay(mock_image_ctx);
+  expect_op_work_queue(mock_image_ctx);
 
   InSequence seq;
   Context *on_finish;
@@ -634,6 +639,7 @@ TEST_F(TestMockJournalReplay, SnapRollbackEvent) {
 
   MockImageCtx mock_image_ctx(*ictx);
   MockJournalReplay mock_journal_replay(mock_image_ctx);
+  expect_op_work_queue(mock_image_ctx);
 
   InSequence seq;
   Context *on_finish;
@@ -664,6 +670,7 @@ TEST_F(TestMockJournalReplay, RenameEvent) {
 
   MockImageCtx mock_image_ctx(*ictx);
   MockJournalReplay mock_journal_replay(mock_image_ctx);
+  expect_op_work_queue(mock_image_ctx);
 
   InSequence seq;
   Context *on_finish;
@@ -730,6 +737,7 @@ TEST_F(TestMockJournalReplay, FlattenEvent) {
 
   MockImageCtx mock_image_ctx(*ictx);
   MockJournalReplay mock_journal_replay(mock_image_ctx);
+  expect_op_work_queue(mock_image_ctx);
 
   InSequence seq;
   Context *on_finish;
@@ -760,6 +768,7 @@ TEST_F(TestMockJournalReplay, UnknownEvent) {
 
   MockImageCtx mock_image_ctx(*ictx);
   MockJournalReplay mock_journal_replay(mock_image_ctx);
+  expect_op_work_queue(mock_image_ctx);
 
   InSequence seq;