From: Jason Dillaman Date: Thu, 30 Jan 2020 19:32:37 +0000 (-0500) Subject: rbd-mirror: permit opening local image in snapshot-based mode X-Git-Tag: v15.1.1~472^2~9 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e77fb2e24ef615317a892cfa7b2ae454c94f2efa;p=ceph.git rbd-mirror: permit opening local image in snapshot-based mode Drop the temporary test to ensure the image was in journal mode. Also ignore missing exclusive lock feature when in snapshot mode. Signed-off-by: Jason Dillaman --- diff --git a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc index a02715202447..6606a5009e15 100644 --- a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc @@ -184,13 +184,6 @@ void OpenLocalImageRequest::handle_get_mirror_info(int r) { return; } - if (m_mirror_image.mode != cls::rbd::MIRROR_IMAGE_MODE_JOURNAL) { - dout(5) << ": local image is in unsupported mode: " << m_mirror_image.mode - << dendl; - send_close_image(-EOPNOTSUPP); - return; - } - // if the local image owns the tag -- don't steal the lock since // we aren't going to mirror peer data into this image anyway if (m_promotion_state == librbd::mirror::PROMOTION_STATE_PRIMARY) { @@ -204,15 +197,20 @@ void OpenLocalImageRequest::handle_get_mirror_info(int r) { template void OpenLocalImageRequest::send_lock_image() { - dout(20) << dendl; - std::shared_lock owner_locker{(*m_local_image_ctx)->owner_lock}; if ((*m_local_image_ctx)->exclusive_lock == nullptr) { - derr << ": image does not support exclusive lock" << dendl; - send_close_image(-EINVAL); + owner_locker.unlock(); + if (m_mirror_image.mode == cls::rbd::MIRROR_IMAGE_MODE_SNAPSHOT) { + finish(0); + } else { + derr << ": image does not support exclusive lock" << dendl; + send_close_image(-EINVAL); + } return; } + dout(20) << dendl; + // disallow any proxied maintenance operations before grabbing lock (*m_local_image_ctx)->exclusive_lock->block_requests(-EROFS);