)]}'
{"id":"openstack%2Fnova~1003994","triplet_id":"openstack%2Fnova~master~Iac6666fe900359499e502cd0eb0f887819796e58","project":"openstack/nova","branch":"master","topic":"bug/2166474","attention_set":{"9708":{"account":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"last_update":"2026-09-04 17:26:47.000000000","reason":"A robot voted negatively on a label"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"Iac6666fe900359499e502cd0eb0f887819796e58","subject":"Fix parallel evacuations pushing instance to ERROR","status":"NEW","created":"2026-09-04 15:17:17.000000000","updated":"2026-09-04 17:26:47.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"bc4b59077c988e11591c3e50c0631f4f7844d7c2","_number":1003994,"virtual_id_number":1003994,"owner":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"actions":{},"labels":{"Verified":{"disliked":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":-1,"date":"2026-09-04 17:26:47.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":-1,"default_value":0,"optional":true},"Code-Review":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Review-Priority":{"all":[{"value":0,"permitted_voting_range":{"min":0,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{" 0":"Default Priority","+1":"Contributor Review Promise","+2":"Core Review Promise"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"CC":[{"_account_id":14384,"name":"Quobyte CI","email":"openstack-ci-external@quobyte.com","username":"quobyteci","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-09-04 15:50:15.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2026-09-04 16:14:17.000000000","updated_by":{"_account_id":14384,"name":"Quobyte CI","email":"openstack-ci-external@quobyte.com","username":"quobyteci","tags":["SERVICE_USER"]},"reviewer":{"_account_id":14384,"name":"Quobyte CI","email":"openstack-ci-external@quobyte.com","username":"quobyteci","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2026-09-04 17:26:47.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"e7b98c78167496951a48c6542b806c62ef9f9796","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2026-09-04 15:17:17.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"04289fba94c32edc1e394cc2ed9db7ef81d89360","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-04 15:50:15.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/815bf351e799437388ee6d41b7beff05\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/ef17fec4eecd4f8baccf8e060bf0871b : FAILURE in 14m 10s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/c90e60d2c8a84423863b4c307b7a1daa : FAILURE in 16m 47s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/f7de2039e62747e8bae83f154d540033 : FAILURE in 31m 17s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"20a4e14c5f295da3ff48184db3f35f19d3cf26df","author":{"_account_id":14384,"name":"Quobyte CI","email":"openstack-ci-external@quobyte.com","username":"quobyteci","tags":["SERVICE_USER"]},"date":"2026-09-04 16:14:17.000000000","message":"Patch Set 1:\n\nBuild Successful \n\n* quobyteci:  nova_quobyteci : SUCCESS, logs at: https://oscilogs.quobyte.com/logs/Iac6666fe900359499e502cd0eb0f887819796e58 .","accounts_in_message":[],"_revision_number":1},{"id":"bc4b59077c988e11591c3e50c0631f4f7844d7c2","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-04 17:26:47.000000000","message":"Patch Set 1: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/0353d60c19cb4aa197df9e8abaa2b9ea\n\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/c0f5b6f941844e148e35ee27601c8bd6 : SUCCESS in 40m 25s\n- tempest-integrated-compute https://zuul.opendev.org/t/openstack/build/d3f4076a2d884b3693eca32f0e5cf3cd : SUCCESS in 44m 56s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/31e8c97a9e75493baa39e0a97b99c4cd : SUCCESS in 40m 56s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/aaf145b6de674c9e93601074d0d2865b : FAILURE in 20m 17s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/71be634f2bcf44ad9d0f96d3d0498806 : FAILURE in 8m 23s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/8bec79137b344b8c8f7663f697a30047 : FAILURE in 8m 10s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/7ce41ac1833e4fa382102b62ad14abb1 : FAILURE in 8m 05s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/28a9bba0a1ac43bb9483e4f51822e525 : FAILURE in 13m 34s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/91fad7d81d604ebab6d4aebb80f31d47 : SUCCESS in 5m 51s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/9245a187f5e9407f8bfbaf41c4f803dd : SUCCESS in 8m 13s\n- ironic-tempest-bios-ipmi-autodetect https://zuul.opendev.org/t/openstack/build/442c1664e81f4b1e98ad5d8b96fb8910 : SUCCESS in 1h 15m 43s (non-voting)\n- nova-ceph-multistore https://zuul.opendev.org/t/openstack/build/4c89c0fa5a2543e983711615a4c432ec : SUCCESS in 1h 27m 25s\n- nova-live-migration https://zuul.opendev.org/t/openstack/build/8a89be28c2a54c7fa7c6512e5f3527b8 : SUCCESS in 51m 25s\n- nova-whitebox https://zuul.opendev.org/t/openstack/build/c98ef87f192b4cbebe872f6e06760a11 : SUCCESS in 38m 04s\n- nova-graceful-shutdown https://zuul.opendev.org/t/openstack/build/02fe79ae59b44b29a9a6dd6f52285c33 : SUCCESS in 1h 01m 18s\n- nova-live-migration-ceph https://zuul.opendev.org/t/openstack/build/574271427db14640a14265989816f141 : SUCCESS in 27m 31s\n- nova-multi-cell https://zuul.opendev.org/t/openstack/build/ed4c745ac25f40b686919254ab41a6d2 : SUCCESS in 2h 03m 35s\n- nova-next https://zuul.opendev.org/t/openstack/build/18e1a5e1c3994059a87da80ae174f1bb : SUCCESS in 1h 30m 31s\n- nova-alt-configurations https://zuul.opendev.org/t/openstack/build/3bd4d3c824cc4a8381a45399194a6797 : SUCCESS in 52m 38s\n- nova-tox-validate-backport https://zuul.opendev.org/t/openstack/build/458658369ac7419f82df03d71d64309b : SUCCESS in 6m 09s (non-voting)\n- nova-tox-functional-py311 https://zuul.opendev.org/t/openstack/build/9e40afb1a3f14a9e9112bf6853a29330 : FAILURE in 29m 16s\n- nova-tox-functional-py313 https://zuul.opendev.org/t/openstack/build/237a68511bc243ebabd631dc9e74bd38 : FAILURE in 29m 48s\n- nova-tox-functional-py313-threading https://zuul.opendev.org/t/openstack/build/9e2435c645e94fd895dcf6011532a72b : FAILURE in 40m 07s\n- nova-grenade-multinode https://zuul.opendev.org/t/openstack/build/3448930b65b84b2b8cad9aae755b4b39 : SUCCESS in 1h 25m 27s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/8213c2df444a46568d96f309acca8639 : SUCCESS in 38m 22s\n- cyborg-tempest-py3 https://zuul.opendev.org/t/openstack/build/962cd1dc68114af48e47e7e06828bf40 : SUCCESS in 51m 17s (non-voting)\n- barbican-tempest-plugin-simple-crypto https://zuul.opendev.org/t/openstack/build/4d01349e4f25487697b921bfecd2b4a9 : SUCCESS in 34m 09s (non-voting)\n- nova-tox-py313-threading https://zuul.opendev.org/t/openstack/build/03b3238770c34bb6b8d111c7ce154d0d : FAILURE in 12m 44s","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"83850e493d18d0a0353249762214291d2a8bbe95","revisions":{"83850e493d18d0a0353249762214291d2a8bbe95":{"kind":"REWORK","_number":1,"created":"2026-09-04 15:17:17.000000000","uploader":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"ref":"refs/changes/94/1003994/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/nova","ref":"refs/changes/94/1003994/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/nova refs/changes/94/1003994/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/nova refs/changes/94/1003994/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/nova refs/changes/94/1003994/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/nova refs/changes/94/1003994/1"}}},"commit":{"parents":[{"commit":"ad5e2ea26e3bd80a84e0ab205ceef4200906ded1","subject":"Stabilize _test_interface_attach_and_detach","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/ad5e2ea26e3bd80a84e0ab205ceef4200906ded1"}]}],"author":{"name":"Balazs Gibizer","email":"gibi@redhat.com","date":"2026-09-04 13:43:14.000000000","tz":120},"committer":{"name":"Balazs Gibizer","email":"gibi@redhat.com","date":"2026-09-04 15:14:13.000000000","tz":120},"subject":"Fix parallel evacuations pushing instance to ERROR","message":"Fix parallel evacuations pushing instance to ERROR\n\nMultiple evacuation requests issued in parallel for the same VM are\naccepted by the nova-api and they race on the destination compute\nleading to various errors like Instance already exists or Unexpected\nTask state which effects both the first and subsequence evacuation\nattempts and putting the instance in ERROR state.\n\nThere are two independent races:\n1. Broken task_state precondition check in compute.api.evacuate()\n\n   compute.api.evacuate() tried to guard against overlapping evacuations\n   by moving task_state from None to REBUILDING only if it was still\n   None, using instance.save(expected_task_state\u003dNone). That is a wrong\n   call, expected_task_state needs to be a list, single None is the\n   default value which mean no precondition. The fix is to use\n   expected_task_state\u003d(None,).\n\n2. Stale instance.host in nova-api after precondition check\n\n   Even with a working precondition check, a second evacuation could still\n   slip through sequentially. The source compute liveness check\n   reads instance.host from the stale in-memory instance that was loaded\n   from the DB before the pre-condition check. So a request could\n   validate the old (down) host, then pass the precondition check due to\n   a bug on the compute side resetting the task_state to None before\n   setting the instance.host to the destination.\n\n   This needed a fix in two places:\n\n   * In compute.api.evacuate() the task_state check is now done first.\n     Instance.save() refreshes instance state from the DB including\n     any new instance.host value so the liveness check is now checking\n     a fresh instance.host value.\n\n   * In the compute manager the instance is kept in task_state\u003dREBUILDING\n     until after finish_evacuation() has committed the new host. Only\n     then is task_state cleared (or moved to POWERING_OFF for a stopped\n     instance). This guarantees the invariant that task_state\u003dNone never\n     coexists with the old host in the DB, which is what makes the API\n     side re-check reliable.\n\nKeeping task_state\u003dREBUILDING until the host is committed required\nmoving the target-state restoration and the rebuild.end notification out\nof _do_rebuild_instance and after finish_evacuation, so the notification\nstill reports the final, settled instance state.\n\nTODO:\n* test coverage\n\nCloses-Bug: #2166474\nChange-Id: Iac6666fe900359499e502cd0eb0f887819796e58\nSigned-off-by: Balazs Gibizer \u003cgibi@redhat.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/83850e493d18d0a0353249762214291d2a8bbe95"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/83850e493d18d0a0353249762214291d2a8bbe95"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY"},{"label":"Workflow","status":"MAY"},{"label":"Review-Priority","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Review-Priority","description":"Review Priority","status":"NOT_APPLICABLE","is_legacy":false,"applicability_expression_result":{"fulfilled":false,"status":"FAIL"},"submittability_expression_result":{"expression":"is:true","fulfilled":true,"status":"NOT_EVALUATED","passing_atoms":[],"failing_atoms":[],"atom_explanations":{}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Workflow\u003dMAX","label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
