Update git submodules

* Update cyborg from branch 'master'
  - Merge "Check during ARQ bind that the target instance has no other ARQs."
  - Check during ARQ bind that the target instance has no other ARQs.
    
    In the ARQ create/bind flow, new ARQs can be created for a device profile
    any time. However, if an attempt is made to bind those created ARQs to an
    instance, it must be ensured that the instance does not already have other
    ARQs bound to it. In the future, we may allow that for hot adds,
    but not now.
    
    Duplicate binds may be requested if the APIs are invoked directly, by an
    admin or a script. That is, the admin/script calls POST to create ARQs,
    then calls PATCH to bind them to some instance UUID, which happens to be
    an existing instance with ARQs. IOW, this is user error.
    
    This can also happen in principle when an instance is rescheduled to
    another host by Nova - but only in the future when ARQ deletions are
    made asynchronous. During rescheduling of an instance, Nova is expected
    to delete the bound ARQs for that instance before creating/binding ARQs
    to a different host. That is fine today because ARQ deletions are
    synchronous -- they complete before returning to the caller.
    
    But, in the future, Cyborg could/should delete ARQs asynchronously, i.e.,
    the API call returns before the deletion has completed. That is because
    the unbind part of the deletion may require device cleanup if some kind,
    which may take time. When ARQ deletions become asynchronous, there could
    be a race condition where the deletion is still in progress when the
    next bind call for rescheduling comes in. That is, the race
    scenario is like this:
    * Nova calls Cyborg to delete ARQs for an instance prior to rescheduling.
      The call returns while the deletion is still in progress.
    * Nova calls Cyborg to create ARQs for a device profile. Since there is
      no reference to any instance or host here, Cyborg has to satisfy this
      request.
    * Nova calls Cyborg to bind the new ARQs to the same instance but a
      different host.
    
    To handle this race, one option is to queue the bind till the deletion
    succeeds: but that is complex. Another option is to let the bind go
    through if the instance's ARQs are all in deleting state. But that still
    allows duplicate binds for some window of time till the deletions
    complete. This scenario may be rare enough that the simple solution of
    failing the duplicate bind is adequate.
    
    Note that the Nova code deletes the created ARQs if bind fails during
    rescheduling:
    https://review.opendev.org/#/c/673735/44/nova/conductor/manager.py@598
    
    Change-Id: I85bf8fa70f776520f3b1f5eef09ca1e054a210f3
This commit is contained in:
Zuul 2020-04-06 23:26:46 +00:00 committed by Gerrit Code Review
parent 84459186cc
commit 8b8c101164
1 changed files with 1 additions and 1 deletions

2
cyborg

@ -1 +1 @@
Subproject commit 3a600984f7d857c0207449152a99e60dfa71ad3d
Subproject commit 5d0ed50b38a2916ff6c56864aa03cdca5b638547