Merge "db: Migrate "async operation" APIs to enginefacade"

This commit is contained in:
Zuul 2023-05-05 03:21:19 +00:00 committed by Gerrit Code Review
commit 3e6d99c8c6
1 changed files with 44 additions and 51 deletions

View File

@ -6828,10 +6828,11 @@ def _backend_info_query(context, host, read_deleted=False):
###################
def _async_operation_data_query(session, context, entity_id, key=None,
read_deleted=False):
def _async_operation_data_query(
context, entity_id, key=None, read_deleted=False,
):
query = model_query(
context, models.AsynchronousOperationData, session=session,
context, models.AsynchronousOperationData,
read_deleted=read_deleted,
).filter_by(
entity_uuid=entity_id,
@ -6846,12 +6847,9 @@ def _async_operation_data_query(session, context, entity_id, key=None,
@require_context
def async_operation_data_get(context, entity_id, key=None,
default=None, session=None):
if not session:
session = get_session()
query = _async_operation_data_query(session, context, entity_id, key)
@context_manager.reader
def async_operation_data_get(context, entity_id, key=None, default=None):
query = _async_operation_data_query(context, entity_id, key)
if key is None or isinstance(key, list):
return {item.key: item.value for item in query.all()}
@ -6861,55 +6859,50 @@ def async_operation_data_get(context, entity_id, key=None,
@require_context
def async_operation_data_update(context, entity_id, details,
delete_existing=False, session=None):
@context_manager.writer
def async_operation_data_update(
context, entity_id, details, delete_existing=False,
):
new_details = copy.deepcopy(details)
if not session:
session = get_session()
# Process existing data
original_data = context.session.query(
models.AsynchronousOperationData).filter_by(
entity_uuid=entity_id,
).all()
with session.begin():
# Process existing data
original_data = session.query(
models.AsynchronousOperationData).filter_by(
entity_uuid=entity_id).all()
for data_ref in original_data:
in_new_details = data_ref['key'] in new_details
for data_ref in original_data:
in_new_details = data_ref['key'] in new_details
if in_new_details:
new_value = str(new_details.pop(data_ref['key']))
data_ref.update({
"value": new_value,
"deleted": 0,
"deleted_at": None
})
data_ref.save(session=session)
elif delete_existing and data_ref['deleted'] != 1:
data_ref.update({
"deleted": 1, "deleted_at": timeutils.utcnow()
})
data_ref.save(session=session)
# Add new data
for key, value in new_details.items():
data_ref = models.AsynchronousOperationData()
if in_new_details:
new_value = str(new_details.pop(data_ref['key']))
data_ref.update({
"entity_uuid": entity_id,
"key": key,
"value": str(value)
"value": new_value,
"deleted": 0,
"deleted_at": None
})
data_ref.save(session=session)
data_ref.save(session=context.session)
elif delete_existing and data_ref['deleted'] != 1:
data_ref.update({
"deleted": 1, "deleted_at": timeutils.utcnow()
})
data_ref.save(session=context.session)
return details
# Add new data
for key, value in new_details.items():
data_ref = models.AsynchronousOperationData()
data_ref.update({
"entity_uuid": entity_id,
"key": key,
"value": str(value)
})
data_ref.save(session=context.session)
return details
@require_context
def async_operation_data_delete(context, entity_id, key=None, session=None):
if not session:
session = get_session()
with session.begin():
query = _async_operation_data_query(session, context,
entity_id, key)
query.update({"deleted": 1, "deleted_at": timeutils.utcnow()})
@context_manager.writer
def async_operation_data_delete(context, entity_id, key=None):
query = _async_operation_data_query(context, entity_id, key)
query.update({"deleted": 1, "deleted_at": timeutils.utcnow()})