db: Migrate "share snapshot metadata" APIs to enginefacade

Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
Change-Id: I3fa8e4e1e526d75051cb323702e3532d99008313
This commit is contained in:
Stephen Finucane 2023-09-29 11:03:59 +01:00
parent a55cafae8e
commit f3805e2a13
1 changed files with 48 additions and 62 deletions

View File

@ -3757,65 +3757,56 @@ def _share_snapshot_instances_status_update(
@require_context @require_context
@require_share_snapshot_exists @require_share_snapshot_exists
@context_manager.writer
def share_snapshot_metadata_get(context, share_snapshot_id): def share_snapshot_metadata_get(context, share_snapshot_id):
session = get_session() return _share_snapshot_metadata_get(context, share_snapshot_id)
return _share_snapshot_metadata_get(context,
share_snapshot_id, session=session)
@require_context @require_context
@require_share_snapshot_exists @require_share_snapshot_exists
@context_manager.writer
def share_snapshot_metadata_delete(context, share_snapshot_id, key): def share_snapshot_metadata_delete(context, share_snapshot_id, key):
session = get_session()
meta_ref = _share_snapshot_metadata_get_item( meta_ref = _share_snapshot_metadata_get_item(
context, share_snapshot_id, key, session=session) context, share_snapshot_id, key)
meta_ref.soft_delete(session=session) meta_ref.soft_delete(session=context.session)
@require_context @require_context
@require_share_snapshot_exists @require_share_snapshot_exists
@context_manager.writer
def share_snapshot_metadata_update(context, share_snapshot_id, def share_snapshot_metadata_update(context, share_snapshot_id,
metadata, delete): metadata, delete):
session = get_session()
return _share_snapshot_metadata_update(context, share_snapshot_id, return _share_snapshot_metadata_update(context, share_snapshot_id,
metadata, delete, metadata, delete)
session=session)
def share_snapshot_metadata_update_item(context, share_snapshot_id, @context_manager.writer
item): def share_snapshot_metadata_update_item(context, share_snapshot_id, item):
session = get_session()
return _share_snapshot_metadata_update(context, share_snapshot_id, return _share_snapshot_metadata_update(context, share_snapshot_id,
item, delete=False, item, delete=False)
session=session)
def share_snapshot_metadata_get_item(context, share_snapshot_id, @context_manager.reader
key): def share_snapshot_metadata_get_item(context, share_snapshot_id, key):
session = get_session() row = _share_snapshot_metadata_get_item(context, share_snapshot_id, key)
row = _share_snapshot_metadata_get_item(context, share_snapshot_id,
key, session=session)
result = {} result = {}
result[row['key']] = row['value'] result[row['key']] = row['value']
return result return result
def _share_snapshot_metadata_get_query(context, share_snapshot_id, def _share_snapshot_metadata_get_query(context, share_snapshot_id):
session=None):
session = session or get_session()
return (model_query(context, models.ShareSnapshotMetadata, return (model_query(context, models.ShareSnapshotMetadata,
session=session,
read_deleted="no"). read_deleted="no").
filter_by(share_snapshot_id=share_snapshot_id). filter_by(share_snapshot_id=share_snapshot_id).
options(joinedload('share_snapshot'))) options(joinedload('share_snapshot')))
def _share_snapshot_metadata_get(context, share_snapshot_id, session=None): def _share_snapshot_metadata_get(context, share_snapshot_id):
session = session or get_session() rows = _share_snapshot_metadata_get_query(
rows = _share_snapshot_metadata_get_query(context, share_snapshot_id, context, share_snapshot_id,
session=session).all() ).all()
result = {} result = {}
for row in rows: for row in rows:
@ -3823,12 +3814,10 @@ def _share_snapshot_metadata_get(context, share_snapshot_id, session=None):
return result return result
def _share_snapshot_metadata_get_item(context, share_snapshot_id, def _share_snapshot_metadata_get_item(context, share_snapshot_id, key):
key, session=None): result = _share_snapshot_metadata_get_query(
session = session or get_session() context, share_snapshot_id).filter_by(
result = (_share_snapshot_metadata_get_query( key=key).first()
context, share_snapshot_id, session=session).filter_by(
key=key).first())
if not result: if not result:
raise exception.MetadataItemNotFound raise exception.MetadataItemNotFound
return result return result
@ -3836,38 +3825,35 @@ def _share_snapshot_metadata_get_item(context, share_snapshot_id,
@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True) @oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True)
def _share_snapshot_metadata_update(context, share_snapshot_id, def _share_snapshot_metadata_update(context, share_snapshot_id,
metadata, delete, session=None): metadata, delete):
session = session or get_session()
delete = strutils.bool_from_string(delete) delete = strutils.bool_from_string(delete)
with session.begin(): if delete:
if delete: original_metadata = _share_snapshot_metadata_get(
original_metadata = _share_snapshot_metadata_get( context, share_snapshot_id)
context, share_snapshot_id, session=session) for meta_key, meta_value in original_metadata.items():
for meta_key, meta_value in original_metadata.items(): if meta_key not in metadata:
if meta_key not in metadata: meta_ref = _share_snapshot_metadata_get_item(
meta_ref = _share_snapshot_metadata_get_item( context, share_snapshot_id, meta_key,
context, share_snapshot_id, meta_key, )
session=session) meta_ref.soft_delete(session=context.session)
meta_ref.soft_delete(session=session)
meta_ref = None
# Now update all existing items with new values, or create new meta
# objects
for meta_key, meta_value in metadata.items():
# update the value whether it exists or not # Now update all existing items with new values, or create new meta
item = {"value": meta_value} # objects
meta_ref = _share_snapshot_metadata_get_query( meta_ref = None
context, share_snapshot_id, for meta_key, meta_value in metadata.items():
session=session).filter_by( # update the value whether it exists or not
key=meta_key).first() item = {"value": meta_value}
if not meta_ref: meta_ref = _share_snapshot_metadata_get_query(
meta_ref = models.ShareSnapshotMetadata() context, share_snapshot_id,
item.update({"key": meta_key, ).filter_by(key=meta_key).first()
"share_snapshot_id": share_snapshot_id}) if not meta_ref:
meta_ref.update(item) meta_ref = models.ShareSnapshotMetadata()
meta_ref.save(session=session) item.update({"key": meta_key,
"share_snapshot_id": share_snapshot_id})
meta_ref.update(item)
meta_ref.save(session=context.session)
return metadata return metadata
################################# #################################