From 6707ca7bcbed9485fa73c6d0de039438966ac5cc Mon Sep 17 00:00:00 2001 From: Maurice Escher Date: Tue, 13 Apr 2021 09:36:48 +0200 Subject: [PATCH] Reuse _set_instances_share_data for replicas. Replicas are just special instances after all, no need for duplicate code and missing on improvements like exception handling on NotFound error. Change-Id: I31fabebc6a60814a4cfc04ae0deb49dcb66cab0f Closes-Bug: #1923566 (cherry picked from commit 29a943fde726f3c667532079eee7297f0579d951) (cherry picked from commit 5bd8e46da56a6caa54634bf369ec7a9a335e73e4) (cherry picked from commit 1ae67eb0d6dd2b2f1a3a5b38736514ed8a0a20b2) --- manila/db/sqlalchemy/api.py | 21 +++++-------------- ...replica-parent-share-d8e50659c02b941a.yaml | 5 +++++ 2 files changed, 10 insertions(+), 16 deletions(-) create mode 100644 releasenotes/notes/bug-1923566-fix-notfound-replica-parent-share-d8e50659c02b941a.yaml diff --git a/manila/db/sqlalchemy/api.py b/manila/db/sqlalchemy/api.py index e66de47e08..fc1bb346d4 100644 --- a/manila/db/sqlalchemy/api.py +++ b/manila/db/sqlalchemy/api.py @@ -1712,17 +1712,6 @@ def _share_replica_get_with_filters(context, share_id=None, replica_id=None, return query -def _set_replica_share_data(context, replicas, session): - if replicas and not isinstance(replicas, list): - replicas = [replicas] - - for replica in replicas: - parent_share = share_get(context, replica['share_id'], session=session) - replica.set_share_data(parent_share) - - return replicas - - @require_context def share_replicas_get_all(context, with_share_data=False, with_share_server=True, session=None): @@ -1733,7 +1722,7 @@ def share_replicas_get_all(context, with_share_data=False, context, with_share_server=with_share_server, session=session).all() if with_share_data: - result = _set_replica_share_data(context, result, session) + result = _set_instances_share_data(context, result, session) return result @@ -1750,7 +1739,7 @@ def share_replicas_get_all_by_share(context, share_id, share_id=share_id, session=session).all() if with_share_data: - result = _set_replica_share_data(context, result, session) + result = _set_instances_share_data(context, result, session) return result @@ -1769,7 +1758,7 @@ def share_replicas_get_available_active_replica(context, share_id, status=constants.STATUS_AVAILABLE, session=session).first() if result and with_share_data: - result = _set_replica_share_data(context, result, session)[0] + result = _set_instances_share_data(context, result, session)[0] return result @@ -1788,7 +1777,7 @@ def share_replica_get(context, replica_id, with_share_data=False, raise exception.ShareReplicaNotFound(replica_id=replica_id) if with_share_data: - result = _set_replica_share_data(context, result, session)[0] + result = _set_instances_share_data(context, result, session)[0] return result @@ -1807,7 +1796,7 @@ def share_replica_update(context, share_replica_id, values, context, share_replica_id, values, session=session) if with_share_data: - updated_share_replica = _set_replica_share_data( + updated_share_replica = _set_instances_share_data( context, updated_share_replica, session)[0] return updated_share_replica diff --git a/releasenotes/notes/bug-1923566-fix-notfound-replica-parent-share-d8e50659c02b941a.yaml b/releasenotes/notes/bug-1923566-fix-notfound-replica-parent-share-d8e50659c02b941a.yaml new file mode 100644 index 0000000000..b2c1b18aba --- /dev/null +++ b/releasenotes/notes/bug-1923566-fix-notfound-replica-parent-share-d8e50659c02b941a.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - Fixed NotFound error in share replica periodic tasks. It could happen that + the parent share of the replica that was being worked on had already been + deleted.