From 9a6bad3bd7eaa733042c0a23aaf48be4fa6f84ce Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Wed, 15 Jun 2016 16:34:44 -0400 Subject: [PATCH] rbd-mirror: ignore empty snapshot sequence mapping This invalid condition will be gracefully detected and handled when the snapshot mappings are computed. Fixes: http://tracker.ceph.com/issues/16329 Signed-off-by: Jason Dillaman (cherry picked from commit 58ed8a18e91401333bc3f3f957ce5d715b6687b6) --- .../image_sync/test_mock_ImageCopyRequest.cc | 22 +++++++++++++++++++ .../rbd_mirror/image_sync/ImageCopyRequest.cc | 1 - 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/test/rbd_mirror/image_sync/test_mock_ImageCopyRequest.cc b/src/test/rbd_mirror/image_sync/test_mock_ImageCopyRequest.cc index 1c0241ff93ea9..3d0855f31af72 100644 --- a/src/test/rbd_mirror/image_sync/test_mock_ImageCopyRequest.cc +++ b/src/test/rbd_mirror/image_sync/test_mock_ImageCopyRequest.cc @@ -596,6 +596,28 @@ TEST_F(TestMockImageSyncImageCopyRequest, EmptySnapMap) { ASSERT_EQ(-EINVAL, ctx.wait()); } +TEST_F(TestMockImageSyncImageCopyRequest, EmptySnapSeqs) { + ASSERT_EQ(0, create_snap("snap1")); + ASSERT_EQ(0, create_snap("snap2")); + m_client_meta.snap_seqs = {}; + m_client_meta.sync_points = {{"snap2", "snap1", boost::none}}; + + librbd::MockImageCtx mock_remote_image_ctx(*m_remote_image_ctx); + librbd::MockImageCtx mock_local_image_ctx(*m_local_image_ctx); + journal::MockJournaler mock_journaler; + + expect_get_snap_id(mock_remote_image_ctx); + + C_SaferCond ctx; + MockImageCopyRequest *request = create_request(mock_remote_image_ctx, + mock_local_image_ctx, + mock_journaler, + m_client_meta.sync_points.front(), + &ctx); + request->send(); + ASSERT_EQ(-EINVAL, ctx.wait()); +} + } // namespace image_sync } // namespace mirror } // namespace rbd diff --git a/src/tools/rbd_mirror/image_sync/ImageCopyRequest.cc b/src/tools/rbd_mirror/image_sync/ImageCopyRequest.cc index 14c75cd6751c5..336f114c41e40 100644 --- a/src/tools/rbd_mirror/image_sync/ImageCopyRequest.cc +++ b/src/tools/rbd_mirror/image_sync/ImageCopyRequest.cc @@ -41,7 +41,6 @@ ImageCopyRequest::ImageCopyRequest(I *local_image_ctx, I *remote_image_ctx, m_update_sync_point_interval(g_ceph_context->_conf->rbd_mirror_sync_point_update_age), m_client_meta_copy(*client_meta) { assert(!m_client_meta_copy.sync_points.empty()); - assert(!m_client_meta_copy.snap_seqs.empty()); } template -- 2.39.5