From: Jason Dillaman Date: Wed, 8 Jun 2016 16:49:04 +0000 (-0400) Subject: rbd-mirror: refresh image after creating sync point snapshot X-Git-Tag: v11.0.0~244^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F9598%2Fhead;p=ceph.git rbd-mirror: refresh image after creating sync point snapshot Fixes: http://tracker.ceph.com/issues/16196 Signed-off-by: Jason Dillaman --- diff --git a/src/test/rbd_mirror/image_sync/test_mock_SyncPointCreateRequest.cc b/src/test/rbd_mirror/image_sync/test_mock_SyncPointCreateRequest.cc index 75c64797a79..faff6a73e90 100644 --- a/src/test/rbd_mirror/image_sync/test_mock_SyncPointCreateRequest.cc +++ b/src/test/rbd_mirror/image_sync/test_mock_SyncPointCreateRequest.cc @@ -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, diff --git a/src/tools/rbd_mirror/image_sync/SyncPointCreateRequest.cc b/src/tools/rbd_mirror/image_sync/SyncPointCreateRequest.cc index 102d48908dd..2c344bad1ad 100644 --- a/src/tools/rbd_mirror/image_sync/SyncPointCreateRequest.cc +++ b/src/tools/rbd_mirror/image_sync/SyncPointCreateRequest.cc @@ -138,6 +138,30 @@ void SyncPointCreateRequest::handle_create_snap(int r) { return; } + send_final_refresh_image(); +} + +template +void SyncPointCreateRequest::send_final_refresh_image() { + dout(20) << dendl; + + Context *ctx = create_context_callback< + SyncPointCreateRequest, + &SyncPointCreateRequest::handle_final_refresh_image>(this); + m_remote_image_ctx->state->refresh(ctx); +} + +template +void SyncPointCreateRequest::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); } diff --git a/src/tools/rbd_mirror/image_sync/SyncPointCreateRequest.h b/src/tools/rbd_mirror/image_sync/SyncPointCreateRequest.h index 0aef0f8de64..45275ec4e2f 100644 --- a/src/tools/rbd_mirror/image_sync/SyncPointCreateRequest.h +++ b/src/tools/rbd_mirror/image_sync/SyncPointCreateRequest.h @@ -56,6 +56,9 @@ private: * CREATE_SNAP . . . . * | * v + * REFRESH_IMAGE + * | + * v * * * @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); };