]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: refresh image after creating sync point snapshot 9627/head
authorJason Dillaman <dillaman@redhat.com>
Wed, 8 Jun 2016 16:49:04 +0000 (12:49 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 10 Jun 2016 16:41:28 +0000 (12:41 -0400)
Fixes: http://tracker.ceph.com/issues/16196
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit c9a3e3be7ddc31992167d55de12bbe6849447b43)

src/test/rbd_mirror/image_sync/test_mock_SyncPointCreateRequest.cc
src/tools/rbd_mirror/image_sync/SyncPointCreateRequest.cc
src/tools/rbd_mirror/image_sync/SyncPointCreateRequest.h

index 75c64797a79f52e2ec6017f2fb9aa317f3353dc8..faff6a73e906a71c3e878c5f98fdf1d4e31c3e2b 100644 (file)
@@ -79,6 +79,7 @@ TEST_F(TestMockImageSyncSyncPointCreateRequest, Success) {
   expect_update_client(mock_journaler, 0);
   expect_image_refresh(mock_remote_image_ctx, 0);
   expect_snap_create(mock_remote_image_ctx, 0);
+  expect_image_refresh(mock_remote_image_ctx, 0);
 
   C_SaferCond ctx;
   MockSyncPointCreateRequest *req = create_request(mock_remote_image_ctx,
@@ -100,6 +101,7 @@ TEST_F(TestMockImageSyncSyncPointCreateRequest, ResyncSuccess) {
   expect_update_client(mock_journaler, 0);
   expect_image_refresh(mock_remote_image_ctx, 0);
   expect_snap_create(mock_remote_image_ctx, 0);
+  expect_image_refresh(mock_remote_image_ctx, 0);
 
   C_SaferCond ctx;
   MockSyncPointCreateRequest *req = create_request(mock_remote_image_ctx,
@@ -123,6 +125,7 @@ TEST_F(TestMockImageSyncSyncPointCreateRequest, SnapshotExists) {
   expect_update_client(mock_journaler, 0);
   expect_image_refresh(mock_remote_image_ctx, 0);
   expect_snap_create(mock_remote_image_ctx, 0);
+  expect_image_refresh(mock_remote_image_ctx, 0);
 
   C_SaferCond ctx;
   MockSyncPointCreateRequest *req = create_request(mock_remote_image_ctx,
index 102d48908ddad27fcd59cd0c80632ec4bee4a438..2c344bad1ad5b7f40f745d7a5cf93a0ebdc0b347 100644 (file)
@@ -138,6 +138,30 @@ void SyncPointCreateRequest<I>::handle_create_snap(int r) {
     return;
   }
 
+  send_final_refresh_image();
+}
+
+template <typename I>
+void SyncPointCreateRequest<I>::send_final_refresh_image() {
+  dout(20) << dendl;
+
+  Context *ctx = create_context_callback<
+    SyncPointCreateRequest<I>,
+    &SyncPointCreateRequest<I>::handle_final_refresh_image>(this);
+  m_remote_image_ctx->state->refresh(ctx);
+}
+
+template <typename I>
+void SyncPointCreateRequest<I>::handle_final_refresh_image(int r) {
+  dout(20) << ": r=" << r << dendl;
+
+  if (r < 0) {
+    derr << ": failed to refresh image for snapshot: " << cpp_strerror(r)
+         << dendl;
+    finish(r);
+    return;
+  }
+
   finish(0);
 }
 
index 0aef0f8de648b6670c2f958dc7a5ac1d0193d3f9..45275ec4e2fb59795040bc3b0a7aa289ee12f3c0 100644 (file)
@@ -56,6 +56,9 @@ private:
    * CREATE_SNAP . . . .
    *    |
    *    v
+   * REFRESH_IMAGE
+   *    |
+   *    v
    * <finish>
    *
    * @endverbatim
@@ -78,6 +81,9 @@ private:
   void send_create_snap();
   void handle_create_snap(int r);
 
+  void send_final_refresh_image();
+  void handle_final_refresh_image(int r);
+
   void finish(int r);
 };