From 1ae67eb0d6dd2b2f1a3a5b38736514ed8a0a20b2 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) --- 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 7d8ccb699a..ad4b53d8e8 100644 --- a/manila/db/sqlalchemy/api.py +++ b/manila/db/sqlalchemy/api.py @@ -1807,17 +1807,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): @@ -1828,7 +1817,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 @@ -1845,7 +1834,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 @@ -1864,7 +1853,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 @@ -1883,7 +1872,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 @@ -1902,7 +1891,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.