Comment 6 for bug 1843090

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

Reviewed: https://review.opendev.org/680762
Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=b36c44c449533edfbcfd970ccef9d794ac3b4171
Submitter: Zuul
Branch: master

commit b36c44c449533edfbcfd970ccef9d794ac3b4171
Author: Matt Riedemann <email address hidden>
Date: Fri Sep 6 15:13:00 2019 -0400

    Handle legacy request spec dict in ComputeTaskManager._cold_migrate

    Prior to change I4244f7dd8fe74565180f73684678027067b4506e in Stein,
    conductor would pass a legacy dict request spec to compute during
    cold migrate / resize and if compute rescheduled it would not pass
    the request spec back to conductor, so the _cold_migrate method in
    conductor would have to create a new RequestSpec from components
    it had available.

    As of that change, compute will send the request spec it got back
    to conductor and _cold_migrate avoids the RequestSpec.from_components
    call.

    There are two issues here:

    1. Technically if conductor RPC API is pinned to less than 1.13 the
       ComputeTaskAPI.migrate_server method will remove the request spec
       from the call to conductor. So conductor (server-side) can still
       not get a RequestSpec and need to use from_components. As a result
       the TODO in the _cold_migrate method needs to be updated since we
       require an RPC API major version bump to make request spec required.

    2. Just because conductor is passing compute a RequestSpec object, if
       compute RPC API versions are pinned to less than 5.1, conductor will
       pass a legacy request spec dict to compute and compute will send that
       back to conductor, so the _cold_migrate method needs to handle getting
       a request spec that is a dict and convert it to an object. A new test
       is added for that case.

    Change-Id: I188b7aa9cb220f93e69a68f0c3592b28d41ba5b6
    Closes-Bug: #1843090