Comment 4 for bug 1037372

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to nova (master)

Reviewed: https://review.openstack.org/12222
Committed: http://github.com/openstack/nova/commit/4082c8375a6ae7e7e67c7ad2e263be2d5fc3dd1f
Submitter: Jenkins
Branch: master

commit 4082c8375a6ae7e7e67c7ad2e263be2d5fc3dd1f
Author: Yun Mao <email address hidden>
Date: Thu Aug 30 14:55:13 2012 -0400

    Address race condition from concurrent task state update

    task_state acts like a guard to avoid concurrent tasks to be
    scheduled. There might be two race conditions:

     1) two tasks are concurrently accepted by api, check task_state to be
     None and allow the tasks to be executed concurrently.

     2) one ordinary task is running, so that task_state is set. The delete
     task is accepted at API, and will "take over" and change task_state to
     DELETING. However the first task may continue to update task_state or
     set it to None as it finishes.

    This patch specifies current expected task_state when updating task_state.
    If unexpected state is met, abort the task without updating. Various
    compute tests are fixed accordingly to set the pre condition of the
    task state.

    Part of bug 1037372
    Change-Id: I5fdf0946c728a47febb56ad468043a828b2736c8