db: retry instance_info_cache_update() on deadlock

If a Galera cluster is used in multi-writer mode it's possible, that
instance_info_cache_update() will be executed concurrently on two
different MySQL hosts for the very same row, which causes a deadlock
exception for one of the callers due to how Galera works internally.

This can affect operations like association or disassociation of
floating IPs, which will fail, if instance_info_cache_update() does
not handle deadlocks gracefully, i.e. is not retried.

Closes-Bug: #1567336

Change-Id: Ib5abffd94d2480dfbcc8b6cca7b1c73ce39e7d10
This commit is contained in:
Roman Podoliaka 2016-04-07 13:25:03 +03:00
parent 754e51e5a2
commit 3e5a9612d1

View File

@ -3005,6 +3005,7 @@ def instance_info_cache_get(context, instance_uuid):
@require_context
@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True)
@pick_context_manager_writer
def instance_info_cache_update(context, instance_uuid, values):
"""Update an instance info cache record in the table.