]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/rbd_support: mirror snapshot schedule should skip non-primary images 39863/head
authorMykola Golub <mgolub@suse.com>
Wed, 17 Feb 2021 14:15:57 +0000 (14:15 +0000)
committerMykola Golub <mgolub@suse.com>
Fri, 5 Mar 2021 16:23:09 +0000 (18:23 +0200)
And while here, suppress error messages for ENOENT errors.

Fixes: https://tracker.ceph.com/issues/49284
Signed-off-by: Mykola Golub <mgolub@suse.com>
(cherry picked from commit d39eb283c5cee12c98afb2667d63112ef9409630)

src/pybind/mgr/rbd_support/mirror_snapshot_schedule.py

index 81ad51d3fbdb2794bb2c83b3e19f80ee9197d717..e5a14e46787769c7ab9be1c6299caa2bbc500aff 100644 (file)
@@ -216,9 +216,10 @@ class CreateSnapshotRequests:
                 pool_id, namespace, image_id, comp.get_return_value()))
 
         if comp.get_return_value() < 0:
-            self.log.error(
-                "error when opening {}/{}/{}: {}".format(
-                    pool_id, namespace, image_id, comp.get_return_value()))
+            if comp.get_return_value() != -errno.ENOENT:
+                self.log.error(
+                    "error when opening {}/{}/{}: {}".format(
+                        pool_id, namespace, image_id, comp.get_return_value()))
             self.finish(image_spec)
             return
 
@@ -249,9 +250,10 @@ class CreateSnapshotRequests:
                 pool_id, namespace, image_id, comp.get_return_value(), mode))
 
         if comp.get_return_value() < 0:
-            self.log.error(
-                "error when getting mirror mode for {}/{}/{}: {}".format(
-                    pool_id, namespace, image_id, comp.get_return_value()))
+            if comp.get_return_value() != -errno.ENOENT:
+                self.log.error(
+                    "error when getting mirror mode for {}/{}/{}: {}".format(
+                        pool_id, namespace, image_id, comp.get_return_value()))
             self.close_image(image_spec, image)
             return
 
@@ -290,9 +292,18 @@ class CreateSnapshotRequests:
                 pool_id, namespace, image_id, comp.get_return_value(), info))
 
         if comp.get_return_value() < 0:
-            self.log.error(
-                "error when getting mirror info for {}/{}/{}: {}".format(
-                    pool_id, namespace, image_id, comp.get_return_value()))
+            if comp.get_return_value() != -errno.ENOENT:
+                self.log.error(
+                    "error when getting mirror info for {}/{}/{}: {}".format(
+                        pool_id, namespace, image_id, comp.get_return_value()))
+            self.close_image(image_spec, image)
+            return
+
+        if not info['primary']:
+            self.log.debug(
+                "CreateSnapshotRequests.handle_get_mirror_info: {}/{}/{}: {}".format(
+                    pool_id, namespace, image_id,
+                    "is not primary"))
             self.close_image(image_spec, image)
             return
 
@@ -324,7 +335,8 @@ class CreateSnapshotRequests:
             "CreateSnapshotRequests.handle_create_snapshot for {}/{}/{}: r={}, snap_id={}".format(
                 pool_id, namespace, image_id, comp.get_return_value(), snap_id))
 
-        if comp.get_return_value() < 0:
+        if comp.get_return_value() < 0 and \
+           comp.get_return_value() != -errno.ENOENT:
             self.log.error(
                 "error when creating snapshot for {}/{}/{}: {}".format(
                     pool_id, namespace, image_id, comp.get_return_value()))
@@ -529,7 +541,9 @@ class MirrorSnapshotScheduleHandler:
                     [(x['id'], x['name']) for x in filter(
                         lambda x: x['id'] in mirror_images,
                         rbd.RBD().list2(ioctx))])
-                for image_id in mirror_images:
+                for image_id, info in mirror_images.items():
+                    if not info['primary']:
+                        continue
                     image_name = image_names.get(image_id)
                     if not image_name:
                         continue