Always start transactions in quota cleanup methods
If the previous action that let to the quota reservation cancelling was the result of a database connection getting interrupted, attempting to query without calling session.begin() will result in a sqlalchemy.exc.ResourceClosedError. This alters the quota methods that mutate DB state to use a transaction with the new oslo DB enginefacade decorators that start a transaction for us. Partial-Bug: #1596075 Partially-Implements: blueprint enginefacade-switch Change-Id: I3d0539b11795cbcf97e70e1ec39013221a00d6d5
This commit is contained in:
parent
4a98b31b6a
commit
3ad23f42c7
@ -121,6 +121,7 @@ def set_quota_usage(context, resource, tenant_id,
|
||||
usage_data.dirty)
|
||||
|
||||
|
||||
@db_api.context_manager.writer
|
||||
def set_quota_usage_dirty(context, resource, tenant_id, dirty=True):
|
||||
"""Set quota usage dirty bit for a given resource and tenant.
|
||||
|
||||
@ -134,6 +135,7 @@ def set_quota_usage_dirty(context, resource, tenant_id, dirty=True):
|
||||
return query.update({'dirty': dirty})
|
||||
|
||||
|
||||
@db_api.context_manager.writer
|
||||
def set_resources_quota_usage_dirty(context, resources, tenant_id, dirty=True):
|
||||
"""Set quota usage dirty bit for a given tenant and multiple resources.
|
||||
|
||||
@ -151,6 +153,7 @@ def set_resources_quota_usage_dirty(context, resources, tenant_id, dirty=True):
|
||||
return query.update({'dirty': dirty}, synchronize_session=False)
|
||||
|
||||
|
||||
@db_api.context_manager.writer
|
||||
def set_all_quota_usage_dirty(context, resource, dirty=True):
|
||||
"""Set the dirty bit on quota usage for all tenants.
|
||||
|
||||
@ -196,6 +199,7 @@ def get_reservation(context, reservation_id):
|
||||
for delta in resv.resource_deltas))
|
||||
|
||||
|
||||
@db_api.context_manager.writer
|
||||
def remove_reservation(context, reservation_id, set_dirty=False):
|
||||
delete_query = context.session.query(quota_models.Reservation).filter_by(
|
||||
id=reservation_id)
|
||||
@ -250,6 +254,7 @@ def get_reservations_for_resources(context, tenant_id, resources,
|
||||
for (resource, exp, total_reserved) in resv_query)
|
||||
|
||||
|
||||
@db_api.context_manager.writer
|
||||
def remove_expired_reservations(context, tenant_id=None):
|
||||
now = utcnow()
|
||||
resv_query = context.session.query(quota_models.Reservation)
|
||||
|
Loading…
Reference in New Issue
Block a user