From: zhangdaolong Date: Tue, 24 Mar 2020 00:51:44 +0000 (+0800) Subject: pybind/rbd: fix no lockers are obtained, ImageNotFound exception will be output X-Git-Tag: v14.2.10~141^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=696cb63d7e78b5201b42cb1763a7cec41528708d;p=ceph.git pybind/rbd: fix no lockers are obtained, ImageNotFound exception will be output No lockers are obtained, ImageNotFound exception will be output, but tht image is always exist.when lockers number is zero, Should not output any exceptions。 Fixes: https://tracker.ceph.com/issues/44613 Signed-off-by: zhangdaolong (cherry picked from commit a183aac978dac69f996250324975073a78cb476b) --- diff --git a/src/pybind/rbd/rbd.pyx b/src/pybind/rbd/rbd.pyx index f7685d60e06..a389a3d10ce 100644 --- a/src/pybind/rbd/rbd.pyx +++ b/src/pybind/rbd/rbd.pyx @@ -4721,6 +4721,9 @@ cdef class LockOwnerIterator(object): &self.num_lock_owners) if ret >= 0: break + elif ret == -errno.ENOENT: + self.num_lock_owners = 0 + break elif ret != -errno.ERANGE: raise make_ex(ret, 'error listing lock owners for image %s' % image.name) diff --git a/src/test/pybind/test_rbd.py b/src/test/pybind/test_rbd.py index 214266515fe..a353075e9a9 100644 --- a/src/test/pybind/test_rbd.py +++ b/src/test/pybind/test_rbd.py @@ -1728,10 +1728,13 @@ class TestExclusiveLock(object): rados2.conf_set('rbd_blacklist_on_break_lock', 'true') with Image(ioctx2, image_name) as image, \ Image(blacklist_ioctx, image_name) as blacklist_image: + + lock_owners = list(image.lock_get_owners()) + eq(0, len(lock_owners)) + blacklist_image.lock_acquire(RBD_LOCK_MODE_EXCLUSIVE) assert_raises(ReadOnlyImage, image.lock_acquire, RBD_LOCK_MODE_EXCLUSIVE) - lock_owners = list(image.lock_get_owners()) eq(1, len(lock_owners)) eq(RBD_LOCK_MODE_EXCLUSIVE, lock_owners[0]['mode'])