)]}'
{"api-ref/source/parameters.yaml":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1234e46b7d077e7419bf4996dbd4ad85cc92e192","unresolved":false,"context_lines":[{"line_number":3130,"context_line":"    Force an evacuation by not verifying the provided destination host by the"},{"line_number":3131,"context_line":"    scheduler."},{"line_number":3132,"context_line":""},{"line_number":3133,"context_line":"    Starting from version 2.68 this field is no longer accepted as it is not"},{"line_number":3134,"context_line":"    possible to support the request for servers with complex resource"},{"line_number":3135,"context_line":"    allocations."},{"line_number":3136,"context_line":""},{"line_number":3137,"context_line":"    .. warning:: This could result in failures to actually evacuate the"},{"line_number":3138,"context_line":"      instance to the specified host. It is recommended to either not specify"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fdfeff1_e53e3ed9","line":3135,"range":{"start_line":3133,"start_character":0,"end_line":3135,"end_character":16},"updated":"2019-02-06 02:58:35.000000000","message":"IMO, it is redundant because max_version is added and the same description is added in api-ref/source/servers-admin-action.inc.","commit_id":"3f0cc8c27856461eb6b4366254260033c9910875"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"880df804fd0c6c55d39e464eb5fbf3d2af492197","unresolved":false,"context_lines":[{"line_number":3130,"context_line":"    Force an evacuation by not verifying the provided destination host by the"},{"line_number":3131,"context_line":"    scheduler."},{"line_number":3132,"context_line":""},{"line_number":3133,"context_line":"    Starting from version 2.68 this field is no longer accepted as it is not"},{"line_number":3134,"context_line":"    possible to support the request for servers with complex resource"},{"line_number":3135,"context_line":"    allocations."},{"line_number":3136,"context_line":""},{"line_number":3137,"context_line":"    .. warning:: This could result in failures to actually evacuate the"},{"line_number":3138,"context_line":"      instance to the specified host. It is recommended to either not specify"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fdfeff1_0dc4c43f","line":3135,"range":{"start_line":3133,"start_character":0,"end_line":3135,"end_character":16},"in_reply_to":"9fdfeff1_e53e3ed9","updated":"2019-02-06 11:22:03.000000000","message":"Done","commit_id":"3f0cc8c27856461eb6b4366254260033c9910875"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1234e46b7d077e7419bf4996dbd4ad85cc92e192","unresolved":false,"context_lines":[{"line_number":3153,"context_line":"    Force a live-migration by not verifying the provided destination host by"},{"line_number":3154,"context_line":"    the scheduler."},{"line_number":3155,"context_line":""},{"line_number":3156,"context_line":"    Starting from version 2.68 this field is no longer accepted as it is not"},{"line_number":3157,"context_line":"    possible to support the request for servers with complex resource"},{"line_number":3158,"context_line":"    allocations."},{"line_number":3159,"context_line":""},{"line_number":3160,"context_line":"    .. warning:: This could result in failures to actually live migrate the"},{"line_number":3161,"context_line":"      instance to the specified host. It is recommended to either not specify"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fdfeff1_8523b2be","line":3158,"range":{"start_line":3156,"start_character":0,"end_line":3158,"end_character":16},"updated":"2019-02-06 02:58:35.000000000","message":"ditto","commit_id":"3f0cc8c27856461eb6b4366254260033c9910875"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"880df804fd0c6c55d39e464eb5fbf3d2af492197","unresolved":false,"context_lines":[{"line_number":3153,"context_line":"    Force a live-migration by not verifying the provided destination host by"},{"line_number":3154,"context_line":"    the scheduler."},{"line_number":3155,"context_line":""},{"line_number":3156,"context_line":"    Starting from version 2.68 this field is no longer accepted as it is not"},{"line_number":3157,"context_line":"    possible to support the request for servers with complex resource"},{"line_number":3158,"context_line":"    allocations."},{"line_number":3159,"context_line":""},{"line_number":3160,"context_line":"    .. warning:: This could result in failures to actually live migrate the"},{"line_number":3161,"context_line":"      instance to the specified host. It is recommended to either not specify"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fdfeff1_2dc1882f","line":3158,"range":{"start_line":3156,"start_character":0,"end_line":3158,"end_character":16},"in_reply_to":"9fdfeff1_8523b2be","updated":"2019-02-06 11:22:03.000000000","message":"Done","commit_id":"3f0cc8c27856461eb6b4366254260033c9910875"}],"api-ref/source/servers-admin-action.inc":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"919cc4888cb7daf1156e1e72116b8756c338f2a8","unresolved":false,"context_lines":[{"line_number":123,"context_line":"is not suitable to do migration, the scheduler tries up to"},{"line_number":124,"context_line":"``migrate_max_retries`` rescheduling attempts."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Starting from API version 2.68, the ``force`` parameter is no longer accepted as"},{"line_number":127,"context_line":"this could not be meaningfully supported by servers with complex resource"},{"line_number":128,"context_line":"allocations."},{"line_number":129,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":8,"id":"9fdfeff1_ac730380","line":126,"updated":"2019-02-08 21:59:58.000000000","message":"nit: I\u0027d move this after the 2.34 mention since these are going in ascending order (2.25 and then 2.34).","commit_id":"6cd52cfe9e2abe16a2a2a75659a031e07ad345e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac520fdc3d8abb08588b67fcea19bfd05d93885f","unresolved":false,"context_lines":[{"line_number":123,"context_line":"is not suitable to do migration, the scheduler tries up to"},{"line_number":124,"context_line":"``migrate_max_retries`` rescheduling attempts."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Starting from API version 2.68, the ``force`` parameter is no longer accepted as"},{"line_number":127,"context_line":"this could not be meaningfully supported by servers with complex resource"},{"line_number":128,"context_line":"allocations."},{"line_number":129,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":8,"id":"9fdfeff1_0ce00ffa","line":126,"in_reply_to":"9fdfeff1_ac730380","updated":"2019-02-08 22:07:12.000000000","message":"Done","commit_id":"6cd52cfe9e2abe16a2a2a75659a031e07ad345e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"919cc4888cb7daf1156e1e72116b8756c338f2a8","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Starting from API version 2.68, the ``force`` parameter is no longer accepted as"},{"line_number":127,"context_line":"this could not be meaningfully supported by servers with complex resource"},{"line_number":128,"context_line":"allocations."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Starting from API version 2.25, the ``block_migration`` parameter could be"},{"line_number":131,"context_line":"to ``auto`` so that nova can decide value of block_migration during live"}],"source_content_type":"text/x-c++src","patch_set":8,"id":"9fdfeff1_cc6e8795","line":128,"updated":"2019-02-08 21:59:58.000000000","message":"We could also say this same thing in the evacuate API reference.","commit_id":"6cd52cfe9e2abe16a2a2a75659a031e07ad345e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac520fdc3d8abb08588b67fcea19bfd05d93885f","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Starting from API version 2.68, the ``force`` parameter is no longer accepted as"},{"line_number":127,"context_line":"this could not be meaningfully supported by servers with complex resource"},{"line_number":128,"context_line":"allocations."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"Starting from API version 2.25, the ``block_migration`` parameter could be"},{"line_number":131,"context_line":"to ``auto`` so that nova can decide value of block_migration during live"}],"source_content_type":"text/x-c++src","patch_set":8,"id":"9fdfeff1_ace6a315","line":128,"in_reply_to":"9fdfeff1_cc6e8795","updated":"2019-02-08 22:07:12.000000000","message":"Done","commit_id":"6cd52cfe9e2abe16a2a2a75659a031e07ad345e0"}],"nova/api/openstack/compute/evacuate.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"754a388cc5bb6b249e07d35dbed36b117cf75e49","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        on_shared_storage \u003d self._get_on_shared_storage(req, evacuate_body)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.29\u0027,"},{"line_number":95,"context_line":"                                            max_version\u003d\u00272.67\u0027):"},{"line_number":96,"context_line":"            force \u003d body[\"evacuate\"].get(\"force\", False)"},{"line_number":97,"context_line":"            force \u003d strutils.bool_from_string(force, strict\u003dTrue)"},{"line_number":98,"context_line":"            if force is True and not host:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_1b5e5145","line":95,"range":{"start_line":94,"start_character":0,"end_line":95,"end_character":64},"updated":"2019-02-05 11:52:16.000000000","message":"If I do this (which I don\u0027t need to do since the parameter will never be set due to the schema validation) then \u0027force\u0027 will always be None. This causes the below failures due to [1] not triggering. I wonder if [1] should be changed anyway as those same issues could be conceivably triggered with an old microversion. Will test but leaving this as a note to self in the interim.\n\n- nova.tests.functional.test_servers.ServerLiveMigrateForceAndAbortWithNestedResourcesRequest.test_live_migrate_delete\n- nova.tests.functional.test_servers.ServerLiveMigrateForceAndAbortWithNestedResourcesRequest.test_live_migrate_force_complete\n- nova.tests.functional.test_servers.ServerMovingTests.test_live_migrate_pre_check_fails\n- nova.tests.functional.test_servers.ServerMovingTestsWithNestedComputes.test_live_migrate_pre_check_fails\n- nova.tests.functional.test_servers.ServerMovingTestsWithNestedResourceRequests.test_live_migrate\n- nova.tests.functional.test_servers.ServerMovingTestsWithNestedResourceRequests.test_live_migrate_pre_check_fails\n- nova.tests.functional.test_servers.ServerMovingTestsWithNestedResourceRequests.test_evacuate_host_specified_but_not_forced\n\n[1] https://github.com/openstack/nova/blob/570b07e53/nova/compute/api.py#L4661-L4662","commit_id":"1198e6ea4a610cab204acb0bf36a5fe6565d6c57"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"79a061cddeb8d8a502424597046257cfb6eac50f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    @wsgi.action(\u0027evacuate\u0027)"},{"line_number":76,"context_line":"    @validation.schema(evacuate.evacuate, \"2.0\", \"2.13\")"},{"line_number":77,"context_line":"    @validation.schema(evacuate.evacuate_v214, \"2.14\", \"2.28\")"},{"line_number":78,"context_line":"    @validation.schema(evacuate.evacuate_v2_29, \"2.29\")"},{"line_number":79,"context_line":"    @validation.schema(evacuate.evacuate_v2_68, \"2.68\")"},{"line_number":80,"context_line":"    def _evacuate(self, req, id, body):"},{"line_number":81,"context_line":"        \"\"\"Permit admins to evacuate a server from a failed host"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_fa032272","line":78,"range":{"start_line":78,"start_character":4,"end_line":78,"end_character":55},"updated":"2019-02-07 01:05:41.000000000","message":"@validation.schema(evacuate.evacuate_v2_29, \"2.29\", \"2.67\")","commit_id":"a5d78b17e7f538c75eff938f4ace14c01c5d34b4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9c0031c7e34c68b9d71523362a4df2a31a939e2e","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    @wsgi.action(\u0027evacuate\u0027)"},{"line_number":76,"context_line":"    @validation.schema(evacuate.evacuate, \"2.0\", \"2.13\")"},{"line_number":77,"context_line":"    @validation.schema(evacuate.evacuate_v214, \"2.14\", \"2.28\")"},{"line_number":78,"context_line":"    @validation.schema(evacuate.evacuate_v2_29, \"2.29\")"},{"line_number":79,"context_line":"    @validation.schema(evacuate.evacuate_v2_68, \"2.68\")"},{"line_number":80,"context_line":"    def _evacuate(self, req, id, body):"},{"line_number":81,"context_line":"        \"\"\"Permit admins to evacuate a server from a failed host"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_93b437d3","line":78,"range":{"start_line":78,"start_character":4,"end_line":78,"end_character":55},"in_reply_to":"9fdfeff1_fa032272","updated":"2019-02-07 16:43:36.000000000","message":"Done","commit_id":"a5d78b17e7f538c75eff938f4ace14c01c5d34b4"}],"nova/api/openstack/compute/migrate_server.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"79a061cddeb8d8a502424597046257cfb6eac50f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    @wsgi.action(\u0027os-migrateLive\u0027)"},{"line_number":85,"context_line":"    @validation.schema(migrate_server.migrate_live, \"2.0\", \"2.24\")"},{"line_number":86,"context_line":"    @validation.schema(migrate_server.migrate_live_v2_25, \"2.25\", \"2.29\")"},{"line_number":87,"context_line":"    @validation.schema(migrate_server.migrate_live_v2_30, \"2.30\")"},{"line_number":88,"context_line":"    @validation.schema(migrate_server.migrate_live_v2_68, \"2.68\")"},{"line_number":89,"context_line":"    def _migrate_live(self, req, id, body):"},{"line_number":90,"context_line":"        \"\"\"Permit admins to (live) migrate a server to a new host.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_5af26e9c","line":87,"range":{"start_line":87,"start_character":4,"end_line":87,"end_character":65},"updated":"2019-02-07 01:05:41.000000000","message":"@validation.schema(migrate_server.migrate_live_v2_30, \"2.30\", \"2.67\")","commit_id":"a5d78b17e7f538c75eff938f4ace14c01c5d34b4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9c0031c7e34c68b9d71523362a4df2a31a939e2e","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    @wsgi.action(\u0027os-migrateLive\u0027)"},{"line_number":85,"context_line":"    @validation.schema(migrate_server.migrate_live, \"2.0\", \"2.24\")"},{"line_number":86,"context_line":"    @validation.schema(migrate_server.migrate_live_v2_25, \"2.25\", \"2.29\")"},{"line_number":87,"context_line":"    @validation.schema(migrate_server.migrate_live_v2_30, \"2.30\")"},{"line_number":88,"context_line":"    @validation.schema(migrate_server.migrate_live_v2_68, \"2.68\")"},{"line_number":89,"context_line":"    def _migrate_live(self, req, id, body):"},{"line_number":90,"context_line":"        \"\"\"Permit admins to (live) migrate a server to a new host.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_f3c4a342","line":87,"range":{"start_line":87,"start_character":4,"end_line":87,"end_character":65},"in_reply_to":"9fdfeff1_5af26e9c","updated":"2019-02-07 16:43:36.000000000","message":"Done","commit_id":"a5d78b17e7f538c75eff938f4ace14c01c5d34b4"}],"nova/api/openstack/compute/schemas/evacuate.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7628759d26b28b0b9775dcb67cf4a2c11fc105bd","unresolved":false,"context_lines":[{"line_number":43,"context_line":"evacuate_v2_29[\u0027properties\u0027][\u0027evacuate\u0027][\u0027properties\u0027]["},{"line_number":44,"context_line":"    \u0027force\u0027] \u003d parameter_types.boolean"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"# v2.68 removes the \u0027force\u0027 parameter added in v2.29, meaning it is essentially"},{"line_number":47,"context_line":"# identical to v2.14"},{"line_number":48,"context_line":"evacuate_v2_68 \u003d copy.deepcopy(evacuate_v214)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_b3bdbb69","line":46,"range":{"start_line":46,"start_character":68,"end_line":46,"end_character":79},"updated":"2019-02-07 17:03:46.000000000","message":"x","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":43,"context_line":"evacuate_v2_29[\u0027properties\u0027][\u0027evacuate\u0027][\u0027properties\u0027]["},{"line_number":44,"context_line":"    \u0027force\u0027] \u003d parameter_types.boolean"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"# v2.68 removes the \u0027force\u0027 parameter added in v2.29, meaning it is essentially"},{"line_number":47,"context_line":"# identical to v2.14"},{"line_number":48,"context_line":"evacuate_v2_68 \u003d copy.deepcopy(evacuate_v214)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_42b58ded","line":46,"range":{"start_line":46,"start_character":68,"end_line":46,"end_character":79},"in_reply_to":"9fdfeff1_b3bdbb69","updated":"2019-02-08 11:59:03.000000000","message":"Done","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"}],"nova/api/openstack/compute/schemas/migrate_server.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7628759d26b28b0b9775dcb67cf4a2c11fc105bd","unresolved":false,"context_lines":[{"line_number":69,"context_line":"migrate_live_v2_30[\u0027properties\u0027][\u0027os-migrateLive\u0027][\u0027properties\u0027]["},{"line_number":70,"context_line":"    \u0027force\u0027] \u003d parameter_types.boolean"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"# 2.68 removes the \u0027force\u0027 parameter added in 2.30, meaning it is essentially"},{"line_number":73,"context_line":"# identical to 2.25"},{"line_number":74,"context_line":"migrate_live_v2_68 \u003d copy.deepcopy(migrate_live_v2_25)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_73b75388","line":72,"range":{"start_line":72,"start_character":66,"end_line":72,"end_character":77},"updated":"2019-02-07 17:03:46.000000000","message":"x","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":69,"context_line":"migrate_live_v2_30[\u0027properties\u0027][\u0027os-migrateLive\u0027][\u0027properties\u0027]["},{"line_number":70,"context_line":"    \u0027force\u0027] \u003d parameter_types.boolean"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"# 2.68 removes the \u0027force\u0027 parameter added in 2.30, meaning it is essentially"},{"line_number":73,"context_line":"# identical to 2.25"},{"line_number":74,"context_line":"migrate_live_v2_68 \u003d copy.deepcopy(migrate_live_v2_25)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_62b8d1e4","line":72,"range":{"start_line":72,"start_character":66,"end_line":72,"end_character":77},"in_reply_to":"9fdfeff1_73b75388","updated":"2019-02-08 11:59:03.000000000","message":"Done","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"}],"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":4660,"context_line":""},{"line_number":4661,"context_line":"        # NOTE(sbauza): Force is a boolean by the new related API version"},{"line_number":4662,"context_line":"        # TODO(stephenfin): Any reason we can\u0027t use \u0027not force\u0027 here to handle"},{"line_number":4663,"context_line":"        # the pre-v2.30 API microversion, which wouldn\u0027t set force"},{"line_number":4664,"context_line":"        if force is False and host:"},{"line_number":4665,"context_line":"            nodes \u003d objects.ComputeNodeList.get_all_by_host(context, host)"},{"line_number":4666,"context_line":"            # NOTE(sbauza): Unset the host to make sure we call the scheduler"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_7ad080ca","line":4663,"range":{"start_line":4663,"start_character":14,"end_line":4663,"end_character":23},"updated":"2019-02-07 20:53:11.000000000","message":"pre-v2.29 you mean?\n\nAs for this question, I\u0027ve wondered the same before and I think it has something to do with the wsgi controller code and how it handles passing force as None or False so just checking for Falsey could be unsafe. It\u0027s definitely weird and I\u0027d get behind cleaning it up, but separately is fine.","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":4660,"context_line":""},{"line_number":4661,"context_line":"        # NOTE(sbauza): Force is a boolean by the new related API version"},{"line_number":4662,"context_line":"        # TODO(stephenfin): Any reason we can\u0027t use \u0027not force\u0027 here to handle"},{"line_number":4663,"context_line":"        # the pre-v2.30 API microversion, which wouldn\u0027t set force"},{"line_number":4664,"context_line":"        if force is False and host:"},{"line_number":4665,"context_line":"            nodes \u003d objects.ComputeNodeList.get_all_by_host(context, host)"},{"line_number":4666,"context_line":"            # NOTE(sbauza): Unset the host to make sure we call the scheduler"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_c29dfd66","line":4663,"range":{"start_line":4663,"start_character":14,"end_line":4663,"end_character":23},"in_reply_to":"9fdfeff1_7ad080ca","updated":"2019-02-08 11:59:03.000000000","message":"\u003e pre-v2.29 you mean?\n\nYup\n\n\u003e As for this question, I\u0027ve wondered the same before and I think it has something to do with the wsgi controller code and how it handles passing force as None or False so just checking for Falsey could be unsafe. It\u0027s definitely weird and I\u0027d get behind cleaning it up, but separately is fine.\n\nYeah, I\u0027m not sure what the implications of also catching None are. I did note that when I started passing force\u003dNone in an earlier patchset, a load of tests started failing, hence why I added this comment. This could be pretty much essential now - idk. I will check it out though","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"}],"nova/tests/functional/api_sample_tests/test_evacuate.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7628759d26b28b0b9775dcb67cf4a2c11fc105bd","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def test_server_evacuate_with_force(self):"},{"line_number":211,"context_line":"        # doesn\u0027t apply to v2.68+, which removed the ability to force migrate"},{"line_number":212,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_13a60755","line":212,"updated":"2019-02-07 17:03:46.000000000","message":"is there not a way to pass the force flag and assert that the API failed json validation?","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def test_server_evacuate_with_force(self):"},{"line_number":211,"context_line":"        # doesn\u0027t apply to v2.68+, which removed the ability to force migrate"},{"line_number":212,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_1adff4d6","line":212,"in_reply_to":"9fdfeff1_13a60755","updated":"2019-02-07 20:53:11.000000000","message":"We typically don\u0027t test negative scenarios in the API sample tests - that could be done either in unit test (meh) or test_servers.py functional test. The problem with doing it here means using a sample for the request, which wouldn\u0027t have the force parameter in it, so you\u0027d essentially just have to make the request directly which isn\u0027t really how the API samples tests work, but is how the normal test_servers.py functional tests work.","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"}],"nova/tests/functional/api_sample_tests/test_migrate_server.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1234e46b7d077e7419bf4996dbd4ad85cc92e192","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        def fake_live_migrate(_self, context, instance, scheduler_hint,"},{"line_number":209,"context_line":"                              block_migration, disk_over_commit, request_spec):"},{"line_number":210,"context_line":"            self.assertEqual(self.uuid, instance[\"uuid\"])"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        self.stub_out("},{"line_number":213,"context_line":"            \u0027nova.conductor.manager.ComputeTaskManager._live_migrate\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_05190287","line":210,"range":{"start_line":210,"start_character":40,"end_line":210,"end_character":56},"updated":"2019-02-06 02:58:35.000000000","message":"instance.uuid?","commit_id":"3f0cc8c27856461eb6b4366254260033c9910875"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"880df804fd0c6c55d39e464eb5fbf3d2af492197","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        def fake_live_migrate(_self, context, instance, scheduler_hint,"},{"line_number":209,"context_line":"                              block_migration, disk_over_commit, request_spec):"},{"line_number":210,"context_line":"            self.assertEqual(self.uuid, instance[\"uuid\"])"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        self.stub_out("},{"line_number":213,"context_line":"            \u0027nova.conductor.manager.ComputeTaskManager._live_migrate\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_4dcf2c57","line":210,"range":{"start_line":210,"start_character":40,"end_line":210,"end_character":56},"in_reply_to":"9fdfeff1_05190287","updated":"2019-02-06 11:22:03.000000000","message":"Done","commit_id":"3f0cc8c27856461eb6b4366254260033c9910875"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from nova.tests.functional.api_sample_tests import test_servers"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def fake_get_compute(context, host):"},{"line_number":25,"context_line":"    service \u003d dict(host\u003dhost,"},{"line_number":26,"context_line":"                   binary\u003d\u0027nova-compute\u0027,"},{"line_number":27,"context_line":"                   topic\u003d\u0027compute\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_da972ceb","line":24,"updated":"2019-02-07 20:53:11.000000000","message":"It\u0027s gross that we even need this in a functional test where we can control the running compute services, but we could clean that up later. Maybe add a TODO?","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from nova.tests.functional.api_sample_tests import test_servers"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def fake_get_compute(context, host):"},{"line_number":25,"context_line":"    service \u003d dict(host\u003dhost,"},{"line_number":26,"context_line":"                   binary\u003d\u0027nova-compute\u0027,"},{"line_number":27,"context_line":"                   topic\u003d\u0027compute\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_229de956","line":24,"in_reply_to":"9fdfeff1_da972ceb","updated":"2019-02-08 11:59:03.000000000","message":"Done","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            \u0027nova.conductor.manager.ComputeTaskManager._live_migrate\u0027,"},{"line_number":69,"context_line":"            fake_live_migrate)"},{"line_number":70,"context_line":"        self.stub_out("},{"line_number":71,"context_line":"            \u0027nova.db.api.service_get_by_compute_host\u0027,"},{"line_number":72,"context_line":"            fake_get_compute)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        response \u003d self._do_post(\u0027servers/%s/action\u0027 % self.uuid,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_7a9e4008","line":71,"range":{"start_line":71,"start_character":18,"end_line":71,"end_character":24},"updated":"2019-02-07 20:53:11.000000000","message":"Double gross.","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            self.assertEqual(self.uuid, instance.uuid)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        self.stub_out("},{"line_number":213,"context_line":"            \u0027nova.conductor.manager.ComputeTaskManager._live_migrate\u0027,"},{"line_number":214,"context_line":"            fake_live_migrate)"},{"line_number":215,"context_line":"        self.stub_out("},{"line_number":216,"context_line":"            \u0027nova.db.api.service_get_by_compute_host\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_5a833caa","line":213,"updated":"2019-02-07 20:53:11.000000000","message":"I\u0027m not even sure why we fake these out, the fake virt driver should just noop live migration. But again, that\u0027s cleanup that can be done separately later.","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":2441,"context_line":""},{"line_number":2442,"context_line":"        self._delete_and_check_allocations(server)"},{"line_number":2443,"context_line":""},{"line_number":2444,"context_line":"    def test_evacuate_forced_host(self):"},{"line_number":2445,"context_line":"        \"\"\"Evacuating a server with a forced host bypasses the scheduler"},{"line_number":2446,"context_line":"        which means conductor has to create the allocations against the"},{"line_number":2447,"context_line":"        destination node. This test recreates the scenarios and asserts"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_babd8869","line":2444,"updated":"2019-02-07 20:53:11.000000000","message":"Around here is where I\u0027d add the negative test.","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":2441,"context_line":""},{"line_number":2442,"context_line":"        self._delete_and_check_allocations(server)"},{"line_number":2443,"context_line":""},{"line_number":2444,"context_line":"    def test_evacuate_forced_host(self):"},{"line_number":2445,"context_line":"        \"\"\"Evacuating a server with a forced host bypasses the scheduler"},{"line_number":2446,"context_line":"        which means conductor has to create the allocations against the"},{"line_number":2447,"context_line":"        destination node. This test recreates the scenarios and asserts"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_426cad07","line":2444,"in_reply_to":"9fdfeff1_babd8869","updated":"2019-02-08 11:59:03.000000000","message":"Done","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":2865,"context_line":"        source_rp_uuid \u003d self._get_provider_uuid_by_host(source_hostname)"},{"line_number":2866,"context_line":"        dest_rp_uuid \u003d self._get_provider_uuid_by_host(dest_hostname)"},{"line_number":2867,"context_line":""},{"line_number":2868,"context_line":"        # the ability to force live migrate a server is removed entirely in"},{"line_number":2869,"context_line":"        # 2.68"},{"line_number":2870,"context_line":"        self.api.microversion \u003d \u00272.67\u0027"},{"line_number":2871,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_7ab72088","line":2868,"updated":"2019-02-07 20:53:11.000000000","message":"ditto","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":2865,"context_line":"        source_rp_uuid \u003d self._get_provider_uuid_by_host(source_hostname)"},{"line_number":2866,"context_line":"        dest_rp_uuid \u003d self._get_provider_uuid_by_host(dest_hostname)"},{"line_number":2867,"context_line":""},{"line_number":2868,"context_line":"        # the ability to force live migrate a server is removed entirely in"},{"line_number":2869,"context_line":"        # 2.68"},{"line_number":2870,"context_line":"        self.api.microversion \u003d \u00272.67\u0027"},{"line_number":2871,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_626f71fc","line":2868,"in_reply_to":"9fdfeff1_7ab72088","updated":"2019-02-08 11:59:03.000000000","message":"Done","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":3045,"context_line":"            \u0027os-migrateLive\u0027: {"},{"line_number":3046,"context_line":"                \u0027host\u0027: dest_hostname,"},{"line_number":3047,"context_line":"                \u0027block_migration\u0027: True,"},{"line_number":3048,"context_line":"                \u0027force\u0027: force"},{"line_number":3049,"context_line":"            }"},{"line_number":3050,"context_line":"        }"},{"line_number":3051,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_5aac9c34","line":3048,"updated":"2019-02-07 20:53:11.000000000","message":"Does this test need to use force? It\u0027s not clear from the docstring.","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":3045,"context_line":"            \u0027os-migrateLive\u0027: {"},{"line_number":3046,"context_line":"                \u0027host\u0027: dest_hostname,"},{"line_number":3047,"context_line":"                \u0027block_migration\u0027: True,"},{"line_number":3048,"context_line":"                \u0027force\u0027: force"},{"line_number":3049,"context_line":"            }"},{"line_number":3050,"context_line":"        }"},{"line_number":3051,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_62021172","line":3048,"in_reply_to":"9fdfeff1_5aac9c34","updated":"2019-02-08 11:59:03.000000000","message":"In this case, it\u0027s done because of [1]. I thought about modifying the test to only set this field (and the API version) if force is set, but it seemed like more effort than it was worth\n\n[1] https://review.openstack.org/#/c/634600/7/nova/tests/functional/test_servers.py@3080","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":5138,"context_line":"        # Nova intentionally does not support force evacuating server"},{"line_number":5139,"context_line":"        # with nested allocations."},{"line_number":5140,"context_line":""},{"line_number":5141,"context_line":"        # the ability to force evacuate a server is removed entirely in 2.68"},{"line_number":5142,"context_line":"        self.api.microversion \u003d \u00272.67\u0027"},{"line_number":5143,"context_line":""},{"line_number":5144,"context_line":"        source_hostname \u003d self.compute1.host"},{"line_number":5145,"context_line":"        dest_hostname \u003d self.compute2.host"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_7a45e06f","line":5142,"range":{"start_line":5141,"start_character":8,"end_line":5142,"end_character":38},"updated":"2019-02-07 20:53:11.000000000","message":"nit: here and above, rather than pin this for the entire test, we could do:\n\nwith utils.temporary_mutation(self.api, microversion\u003d\u00272.67):\n    self.api.post_server_action(server[\u0027id\u0027], post)\n\nAnd that could be done in a private helper method:\n\ndef _force_evacuate(self, server_id, request_body):\n    with utils.temporary_mutation(self.api, microversion\u003d\u00272.67):\n        return self.api.post_server_action(server_id, request_body)\n\nThen we have less copy/paste, it\u0027s isolated nicely, and 2.67 is only used for those force calls.","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"db9cf56af9e949c536edcfb9d779ddc34ac01504","unresolved":false,"context_lines":[{"line_number":5138,"context_line":"        # Nova intentionally does not support force evacuating server"},{"line_number":5139,"context_line":"        # with nested allocations."},{"line_number":5140,"context_line":""},{"line_number":5141,"context_line":"        # the ability to force evacuate a server is removed entirely in 2.68"},{"line_number":5142,"context_line":"        self.api.microversion \u003d \u00272.67\u0027"},{"line_number":5143,"context_line":""},{"line_number":5144,"context_line":"        source_hostname \u003d self.compute1.host"},{"line_number":5145,"context_line":"        dest_hostname \u003d self.compute2.host"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_58d33ad6","line":5142,"range":{"start_line":5141,"start_character":8,"end_line":5142,"end_character":38},"in_reply_to":"9fdfeff1_22c6494b","updated":"2019-02-08 13:35:09.000000000","message":"It is certainly supported. One of the misconceptions of microversions is that they are for all requests which isn\u0027t true.","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":5138,"context_line":"        # Nova intentionally does not support force evacuating server"},{"line_number":5139,"context_line":"        # with nested allocations."},{"line_number":5140,"context_line":""},{"line_number":5141,"context_line":"        # the ability to force evacuate a server is removed entirely in 2.68"},{"line_number":5142,"context_line":"        self.api.microversion \u003d \u00272.67\u0027"},{"line_number":5143,"context_line":""},{"line_number":5144,"context_line":"        source_hostname \u003d self.compute1.host"},{"line_number":5145,"context_line":"        dest_hostname \u003d self.compute2.host"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_22c6494b","line":5142,"range":{"start_line":5141,"start_character":8,"end_line":5142,"end_character":38},"in_reply_to":"9fdfeff1_7a45e06f","updated":"2019-02-08 11:59:03.000000000","message":"Is that realistic though? I figured in a real-world scenario, someone would be using a given microversion consistently. Jumping between them in the same test feels wrong","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"919cc4888cb7daf1156e1e72116b8756c338f2a8","unresolved":false,"context_lines":[{"line_number":2526,"context_line":"        server \u003d self._boot_and_check_allocations("},{"line_number":2527,"context_line":"            self.flavor1, source_hostname)"},{"line_number":2528,"context_line":""},{"line_number":2529,"context_line":"        # evacuate the server and force the destination host which bypasses"},{"line_number":2530,"context_line":"        # the scheduler"},{"line_number":2531,"context_line":"        post \u003d {"},{"line_number":2532,"context_line":"            \u0027evacuate\u0027: {"},{"line_number":2533,"context_line":"                \u0027host\u0027: dest_hostname,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_4cd5b742","line":2530,"range":{"start_line":2529,"start_character":8,"end_line":2530,"end_character":23},"updated":"2019-02-08 21:59:58.000000000","message":"nit: this is copy/paste but doesn\u0027t make sense here since it\u0027s going to trigger the failure","commit_id":"6cd52cfe9e2abe16a2a2a75659a031e07ad345e0"}],"nova/tests/unit/api/openstack/compute/test_evacuate.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7628759d26b28b0b9775dcb67cf4a2c11fc105bd","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def test_forced_evacuate_with_no_host_provided(self):"},{"line_number":506,"context_line":"        # not applicable for v2.68, which removed the \u0027force\u0027 parameter"},{"line_number":507,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_b3305b09","line":507,"updated":"2019-02-07 17:03:46.000000000","message":"likewise","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def test_forced_evacuate_with_no_host_provided(self):"},{"line_number":506,"context_line":"        # not applicable for v2.68, which removed the \u0027force\u0027 parameter"},{"line_number":507,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_c27f3da9","line":507,"in_reply_to":"9fdfeff1_5a5a5c50","updated":"2019-02-08 11:59:03.000000000","message":"I\u0027m already checking the schema validation in the above test though. I didn\u0027t think it was worth doing it twice, given that I can\u0027t test the thing we were testing in the v2.29 version of this test.","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def test_forced_evacuate_with_no_host_provided(self):"},{"line_number":506,"context_line":"        # not applicable for v2.68, which removed the \u0027force\u0027 parameter"},{"line_number":507,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_5a5a5c50","line":507,"in_reply_to":"9fdfeff1_b3305b09","updated":"2019-02-07 20:53:11.000000000","message":"Yeah this is a good place to verify our schema validation (but the functional test would do that as well if you add it there).","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"}],"nova/tests/unit/api/openstack/compute/test_migrate_server.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7628759d26b28b0b9775dcb67cf4a2c11fc105bd","unresolved":false,"context_lines":[{"line_number":621,"context_line":"                           args_map\u003dargs_map)"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"    def test_live_migrate_with_forced_host(self):"},{"line_number":624,"context_line":"        # not applicable for v2.68, which removed the \u0027force\u0027 parameter"},{"line_number":625,"context_line":"        body \u003d {\u0027_migrate_live\u0027: {\u0027os-migrateLive\u0027: {\u0027host\u0027: \u0027hostname\u0027,"},{"line_number":626,"context_line":"                                  \u0027block_migration\u0027: \u0027auto\u0027,"},{"line_number":627,"context_line":"                                  \u0027force\u0027: \u0027true\u0027}}}"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_d3339f12","line":624,"range":{"start_line":624,"start_character":8,"end_line":624,"end_character":71},"updated":"2019-02-07 17:03:46.000000000","message":"this comment seems wrong","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":621,"context_line":"                           args_map\u003dargs_map)"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"    def test_live_migrate_with_forced_host(self):"},{"line_number":624,"context_line":"        # not applicable for v2.68, which removed the \u0027force\u0027 parameter"},{"line_number":625,"context_line":"        body \u003d {\u0027_migrate_live\u0027: {\u0027os-migrateLive\u0027: {\u0027host\u0027: \u0027hostname\u0027,"},{"line_number":626,"context_line":"                                  \u0027block_migration\u0027: \u0027auto\u0027,"},{"line_number":627,"context_line":"                                  \u0027force\u0027: \u0027true\u0027}}}"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_022465c5","line":624,"range":{"start_line":624,"start_character":8,"end_line":624,"end_character":71},"in_reply_to":"9fdfeff1_d3339f12","updated":"2019-02-08 11:59:03.000000000","message":"Done","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        body \u003d {\u0027_migrate_live\u0027: {\u0027os-migrateLive\u0027: {\u0027host\u0027: \u0027hostname\u0027,"},{"line_number":626,"context_line":"                                  \u0027block_migration\u0027: \u0027auto\u0027,"},{"line_number":627,"context_line":"                                  \u0027force\u0027: \u0027true\u0027}}}"},{"line_number":628,"context_line":"        self.assertRaises(self.validation_error,"},{"line_number":629,"context_line":"                          self.controller._migrate_live,"},{"line_number":630,"context_line":"                          self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":631,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_7a3ac0e7","line":628,"range":{"start_line":628,"start_character":8,"end_line":628,"end_character":48},"updated":"2019-02-07 20:53:11.000000000","message":"Assert the validation error is for what we expect, e.g.:\n\nex \u003d self.assertRaises(self.validation_error, ...)\nself.assertIn(\u0027force\u0027, six.text_type(ex))","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        body \u003d {\u0027_migrate_live\u0027: {\u0027os-migrateLive\u0027: {\u0027host\u0027: \u0027hostname\u0027,"},{"line_number":626,"context_line":"                                  \u0027block_migration\u0027: \u0027auto\u0027,"},{"line_number":627,"context_line":"                                  \u0027force\u0027: \u0027true\u0027}}}"},{"line_number":628,"context_line":"        self.assertRaises(self.validation_error,"},{"line_number":629,"context_line":"                          self.controller._migrate_live,"},{"line_number":630,"context_line":"                          self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":631,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_623d31dc","line":628,"range":{"start_line":628,"start_character":8,"end_line":628,"end_character":48},"in_reply_to":"9fdfeff1_7a3ac0e7","updated":"2019-02-08 11:59:03.000000000","message":"Done","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7628759d26b28b0b9775dcb67cf4a2c11fc105bd","unresolved":false,"context_lines":[{"line_number":627,"context_line":"                                  \u0027force\u0027: \u0027true\u0027}}}"},{"line_number":628,"context_line":"        self.assertRaises(self.validation_error,"},{"line_number":629,"context_line":"                          self.controller._migrate_live,"},{"line_number":630,"context_line":"                          self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"class MigrateServerPolicyEnforcementV21(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_531faf6f","line":630,"updated":"2019-02-07 17:03:46.000000000","message":"yeah, like this","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"}],"releasenotes/notes/remove-live-migrate-evacuate-force-flag-cb50608d5930585c.yaml":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1234e46b7d077e7419bf4996dbd4ad85cc92e192","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``force`` flag is now ignored for the live-migrate and evacuate server"},{"line_number":5,"context_line":"    actions. This is because it is not possible to support this request for"},{"line_number":6,"context_line":"    servers with complex resource allocations."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fdfeff1_a5091632","line":4,"range":{"start_line":4,"start_character":26,"end_line":4,"end_character":37},"updated":"2019-02-06 02:58:35.000000000","message":"400 error is returned because of schema check for JSON request body.","commit_id":"3f0cc8c27856461eb6b4366254260033c9910875"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"880df804fd0c6c55d39e464eb5fbf3d2af492197","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``force`` flag is now ignored for the live-migrate and evacuate server"},{"line_number":5,"context_line":"    actions. This is because it is not possible to support this request for"},{"line_number":6,"context_line":"    servers with complex resource allocations."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9fdfeff1_2dd668f3","line":4,"range":{"start_line":4,"start_character":26,"end_line":4,"end_character":37},"in_reply_to":"9fdfeff1_a5091632","updated":"2019-02-06 11:22:03.000000000","message":"Done","commit_id":"3f0cc8c27856461eb6b4366254260033c9910875"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34f3a482e1cb0596f5e70fd660b48e3507a99981","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    It is no longer possible to force server live migrations or evacuations"},{"line_number":5,"context_line":"    starting with API microversion 2.68. This is because it is not possible to"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9fdfeff1_1a29349a","line":2,"updated":"2019-02-07 20:53:11.000000000","message":"Heh, doesn\u0027t really seem like a feature, but I\u0027m not sure what else we should call this.","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1197721485b28847f8fcba22b84a6173c2dcedfd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    It is no longer possible to force server live migrations or evacuations"},{"line_number":5,"context_line":"    starting with API microversion 2.68. This is because it is not possible to"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9fdfeff1_6580db47","line":2,"in_reply_to":"9fdfeff1_1a29349a","updated":"2019-02-08 11:59:03.000000000","message":"Let\u0027s try \u0027upgrade\u0027?","commit_id":"678bccc2f69e8e8972c933e4ddf566fcb28385c3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b20f3a173edc7d6f69ea050a577cace6f7bd4a0f","unresolved":false,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    It is no longer possible to force server live migrations or evacuations"},{"line_number":5,"context_line":"    starting with API microversion 2.68. This is because it is not possible to"},{"line_number":6,"context_line":"    support these requests for servers with complex resource allocations."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fdfeff1_2c2e3343","line":5,"updated":"2019-02-08 22:03:17.000000000","message":"\"to a specific destination host starting with API ...\"","commit_id":"6cd52cfe9e2abe16a2a2a75659a031e07ad345e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac520fdc3d8abb08588b67fcea19bfd05d93885f","unresolved":false,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    It is no longer possible to force server live migrations or evacuations"},{"line_number":5,"context_line":"    starting with API microversion 2.68. This is because it is not possible to"},{"line_number":6,"context_line":"    support these requests for servers with complex resource allocations."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fdfeff1_2ca153aa","line":5,"in_reply_to":"9fdfeff1_2c2e3343","updated":"2019-02-08 22:07:12.000000000","message":"Done","commit_id":"6cd52cfe9e2abe16a2a2a75659a031e07ad345e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b20f3a173edc7d6f69ea050a577cace6f7bd4a0f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9fdfeff1_ac21c34f","line":7,"updated":"2019-02-08 22:03:17.000000000","message":"\"It is still possible to request a destination host but it will be validated by the scheduler.\"","commit_id":"6cd52cfe9e2abe16a2a2a75659a031e07ad345e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac520fdc3d8abb08588b67fcea19bfd05d93885f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9fdfeff1_8cc4ff60","line":7,"in_reply_to":"9fdfeff1_ac21c34f","updated":"2019-02-08 22:07:12.000000000","message":"Done","commit_id":"6cd52cfe9e2abe16a2a2a75659a031e07ad345e0"}]}
