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=refs%2Fpull%2F34388%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 f7685d60e06c..a389a3d10cea 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 214266515fe4..a353075e9a9d 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'])