]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: Fix mirror_image_get_status in rbd python bindings
authorWill Smith <wsmith@linode.com>
Fri, 23 Jul 2021 19:18:12 +0000 (15:18 -0400)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 30 Aug 2021 12:18:20 +0000 (14:18 +0200)
When retrieving the status of a mirrored image from the Python rbd
library, a TypeError is raised.

*To Reproduce:*

Set up two Ceph clusters for block storage, and configure image
mirroring between their pools.  Create a least one image with mirroring
enabled, then run the following script on either cluster (once the image
exists everywhere):

```python
import rados, rbd

CONF_PATH = "YOUR-CONF-PATH"
POOL_NAME = "YOUR-POOL-NAME"
IMAGE_LABEL = "YOUR-IMAGE-LABEL"

with rados.Rados(conffile=CONF_PATH) as cluster:
  with cluster.open_ioctx(POOL_NAME) as ioctx:
    with rbd.Image(ioctx, IMAGE_LABEL) as image:
      image.mirror_image_get_status()
```

This will result in the following stack trace:

```
Traceback (most recent call last):
  File "repo-bug.py", line 10, in <module>
    image.mirror_image_get_status()
  File "rbd.pyx", line 3363, in rbd.requires_not_closed.wrapper
  File "rbd.pyx", line 5209, in rbd.Image.mirror_image_get_status
TypeError: list indices must be integers or slices, not str
```

Fixes: https://tracker.ceph.com/issues/51867
Signed-off-by: Will Smith <wsmith@linode.com>
(cherry picked from commit 5dfda932b2012bb11a1860d8a81de3208b17f622)

src/pybind/rbd/rbd.pyx

index 0bdfcf52adeae4b94c51646656cc8ac904254769..a231d56f19487eaf84fd3f98d236a3d6ff8b5dcd 100644 (file)
@@ -5206,7 +5206,7 @@ written." % (self.name, ret, length))
                 if mirror_uuid == '':
                     local_status = site_status
                 else:
-                    site_statuses['mirror_uuid'] = mirror_uuid
+                    site_status['mirror_uuid'] = mirror_uuid
                     site_statuses += site_status
             status = {
                 'name': decode_cstr(c_status.name),