Moving task cache update into task creation transaction

Doing this we avoid inclusion of task cache update statement into the next
transaction which may cause different problems such as deadlock.
In this particular case we've got the following deadlock:
1. DeleteIBPImagesTask makes UPDATE tasks SET cache....
2. Response handler in receiver makes SELECT clusters FOR UPDATE
3. The code following DeleteIBPImagesTask makes SELECT clusters FOR UPDATE
4. Response handler performs SELECTS tasks FOR UPDATE

Change-Id: Ic8e5f2386364421b0667f920499e031f587f726e
Closes-Bug: #1653083
This commit is contained in:
Georgy Kibardin 2017-01-30 11:47:50 +03:00
parent 542b8558f2
commit ff04eb8394
1 changed files with 2 additions and 1 deletions

View File

@ -909,8 +909,9 @@ class DeleteIBPImagesTask(object):
def execute(cls, cluster, image_data):
task = Task(name=consts.TASK_NAMES.remove_images, cluster=cluster)
db().add(task)
message = cls.message(task, image_data)
db().commit()
rpc.cast('naily', cls.message(task, image_data))
rpc.cast('naily', message)
class StopDeploymentTask(object):