From 1e0a80cea23c5d98b7e93385ef3e6a8904385f00 Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Wed, 17 Feb 2021 14:15:57 +0000 Subject: [PATCH] mgr/rbd_support: mirror snapshot schedule should skip non-primary images And while here, suppress error messages for ENOENT errors. Fixes: https://tracker.ceph.com/issues/49284 Signed-off-by: Mykola Golub (cherry picked from commit d39eb283c5cee12c98afb2667d63112ef9409630) --- .../rbd_support/mirror_snapshot_schedule.py | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/pybind/mgr/rbd_support/mirror_snapshot_schedule.py b/src/pybind/mgr/rbd_support/mirror_snapshot_schedule.py index 81ad51d3fbd..e5a14e46787 100644 --- a/src/pybind/mgr/rbd_support/mirror_snapshot_schedule.py +++ b/src/pybind/mgr/rbd_support/mirror_snapshot_schedule.py @@ -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 -- 2.47.3