From 6f573ca2d63784e4a2b1e7a410044afdf58f6801 Mon Sep 17 00:00:00 2001 From: Jason Dillaman <dillaman@redhat.com> Date: Thu, 30 Jun 2016 10:24:01 -0400 Subject: [PATCH] rbd-mirror: gracefully fail if object map is unavailable If the exclusive lock was lost due to a watch failure from an overloaded cluster, gracefully abort the image sync. Fixes: http://tracker.ceph.com/issues/16558 Signed-off-by: Jason Dillaman <dillaman@redhat.com> --- src/tools/rbd_mirror/image_sync/ObjectCopyRequest.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/tools/rbd_mirror/image_sync/ObjectCopyRequest.cc b/src/tools/rbd_mirror/image_sync/ObjectCopyRequest.cc index 89acd037a6c..9975b5bf815 100644 --- a/src/tools/rbd_mirror/image_sync/ObjectCopyRequest.cc +++ b/src/tools/rbd_mirror/image_sync/ObjectCopyRequest.cc @@ -235,6 +235,13 @@ void ObjectCopyRequest<I>::send_update_object_map() { m_local_image_ctx->snap_lock.put_read(); finish(0); return; + } else if (m_local_image_ctx->object_map == nullptr) { + // possible that exclusive lock was lost in background + derr << ": object map is not initialized" << dendl; + + m_local_image_ctx->snap_lock.put_read(); + finish(-EINVAL); + return; } assert(m_local_image_ctx->object_map != nullptr);