Comment 2 for bug 1357432

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

Reviewed: https://review.openstack.org/119635
Committed: https://git.openstack.org/cgit/openstack/cinder/commit/?id=7e95b05b937e632ae8aee82cfa8f6f31835e6316
Submitter: Jenkins
Branch: master

commit 7e95b05b937e632ae8aee82cfa8f6f31835e6316
Author: Zhiteng Huang <email address hidden>
Date: Sun Sep 7 10:22:52 2014 -0700

    Fix possible race condition for accept transfer

    Accept transfer API workflow is currently like this:

      call volume_api.accept_transfer()
        |
        --- RPC cast to volume manager
              |
              --- volume manager calls volume driver accept_transfer()

      update volume's DB record

    Given the non-blocking nature of RPC cast, what happens in volume
    manager and volume driver can happen in parallel with the DB update.
    If volume driver relies on original DB record to do things, then
    DB record shouldn't be updated until volume driver finishes its job.

    So this patch change volume RPC API accept_transfer() from cast
    to call to make sure the workflow is in serialized manner. Also
    elevated the context when volume manager tries to update the DB
    record when driver has done accept_transfer().

    Change-Id: Ieae52e167aa02967338e0be5d78d570d682faa7a
    Closes-bug: #1357432