early return for _share_replica_update() if there is no active replica

If the parent share of the replica has no active replica,
this is an error situation where _share_replica_update() simply
returns and logs a warning if the replica being acted on has not
been already in error state itself before.

Change-Id: I9bdbbaafba413fa4b2a783130fd58a4b6c2cea4b
Partial-Bug: #1924230
This commit is contained in:
Maurice Escher 2021-04-16 15:26:20 +02:00 committed by Goutham Pacha Ravi
parent 6943b31697
commit 7b7d18e142
1 changed files with 16 additions and 3 deletions

View File

@ -2652,9 +2652,22 @@ class ShareManager(manager.SchedulerDependentManager):
with_share_data=True, with_share_server=True)
)
_active_replica = [x for x in replica_list
if x['replica_state'] ==
constants.REPLICA_STATE_ACTIVE][0]
_active_replica = next((x for x in replica_list
if x['replica_state'] ==
constants.REPLICA_STATE_ACTIVE), None)
if _active_replica is None:
if share_replica['replica_state'] != constants.STATUS_ERROR:
# only log warning if replica_state was not already in error
msg = (("Replica parent share %(id)s has no active "
"replica.") % {'id': share_replica['share_id']})
LOG.warning(msg)
self.db.share_replica_update(context, share_replica['id'],
{'replica_state':
constants.STATUS_ERROR})
# without a related active replica, we cannot act on any
# non-active replica
return
# Get snapshots for the share.
share_snapshots = self.db.share_snapshot_get_all_for_share(