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: v15.2.2~78^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F34387%2Fhead;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 b71458b5cb93..468928d1d92a 100644 --- a/src/pybind/rbd/rbd.pyx +++ b/src/pybind/rbd/rbd.pyx @@ -5393,6 +5393,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 1bd84e81f84a..3a487874c099 100644 --- a/src/test/pybind/test_rbd.py +++ b/src/test/pybind/test_rbd.py @@ -1855,10 +1855,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'])