)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Note that evacuate does not have reschedule loop so we don\u0027t need any"},{"line_number":22,"context_line":"extra logic for that."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Also no RPC or service version change was needed so no upgrade related"},{"line_number":25,"context_line":"checks were introduced."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: Id9ed7a82d42be8ffe760f03e6610b9e6f5a4287b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3fa7e38b_8ba14398","line":24,"updated":"2019-10-24 20:32:39.000000000","message":"I guess because rebuild_instance has taken a requestspec parameter for several releases now (and is required so no issue with CONF.upgrade_levels.compute pinning to Stein or Train or something).","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Note that evacuate does not have reschedule loop so we don\u0027t need any"},{"line_number":22,"context_line":"extra logic for that."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Also no RPC or service version change was needed so no upgrade related"},{"line_number":25,"context_line":"checks were introduced."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: Id9ed7a82d42be8ffe760f03e6610b9e6f5a4287b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3fa7e38b_54dc3c73","line":24,"in_reply_to":"3fa7e38b_8ba14398","updated":"2019-10-25 15:24:31.000000000","message":"Yepp, since queens https://review.opendev.org/#/c/525242/","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":3366,"context_line":"                          instance\u003dinstance)"},{"line_number":3367,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":3368,"context_line":"                self._notify_instance_rebuild_error(context, instance, e, bdms)"},{"line_number":3369,"context_line":"            except Exception as e:"},{"line_number":3370,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":3371,"context_line":"                if evacuate or scheduled_node is not None:"},{"line_number":3372,"context_line":"                    self.rt.delete_allocation_for_evacuated_instance("}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_8bcaa34c","line":3369,"updated":"2019-10-24 20:32:39.000000000","message":"OK so if the new stuff in _do_rebuild_instance_with_claim fails before the claim we\u0027ll get here and remove allocations created by the scheduler.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"77ed643309728e910829cc40a211dd6126754fde","unresolved":false,"context_lines":[{"line_number":3401,"context_line":"                self._get_request_group_mapping(request_spec)"},{"line_number":3402,"context_line":""},{"line_number":3403,"context_line":"            if request_group_resource_providers_mapping:"},{"line_number":3404,"context_line":"                self._update_pci_request_spec_with_allocated_interface_name("},{"line_number":3405,"context_line":"                    context, instance,"},{"line_number":3406,"context_line":"                    request_group_resource_providers_mapping)"},{"line_number":3407,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_5e258e09","line":3404,"range":{"start_line":3404,"start_character":21,"end_line":3404,"end_character":75},"updated":"2019-10-21 16:02:57.000000000","message":"This occurs to me a bit late since we\u0027re doing this before a resize_claim for resize and cold migrate, but if this modifies the instance.pci_requests and the claim below fails, the instance.pci_requests are not rolled back and would be wrong, correct? What would break after that if the user tries to recover the instance by doing something like hard-rebooting it?","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ffc91095b0005d24b47c8afbecf2a55add46c0e1","unresolved":false,"context_lines":[{"line_number":3401,"context_line":"                self._get_request_group_mapping(request_spec)"},{"line_number":3402,"context_line":""},{"line_number":3403,"context_line":"            if request_group_resource_providers_mapping:"},{"line_number":3404,"context_line":"                self._update_pci_request_spec_with_allocated_interface_name("},{"line_number":3405,"context_line":"                    context, instance,"},{"line_number":3406,"context_line":"                    request_group_resource_providers_mapping)"},{"line_number":3407,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_a4aca9ee","line":3404,"range":{"start_line":3404,"start_character":21,"end_line":3404,"end_character":75},"in_reply_to":"3fa7e38b_5e258e09","updated":"2019-10-22 08:27:04.000000000","message":"Good point. The InstancePciRequest is updated here but that update is not reverted if the operation is rolled back. \n\nThe parent_ifname piece of information in the pci request is like trait, it only driver the selection of the proper VF pools during the pci_claim. It does not cause the consumption of the PF. The VF consumption done by the pci_claim is rolled back when the move_claim is aborted.\n\nAfter the rollback the wrong information is still persisted in the InstancePciRequest (it still uses the parent_ifname for the failed dest host). It is ugly but I think it does not cause any failure later on. Every new move operation updates (will update as soon as it support move with qos ports) the InstancePciRequest according to the destination host before calling move_claim. So when the new pci_claim is triggered the valid parent_ifname will be present in the pci request. \n\nI checked the callers of pci_claim to see if other lifecycle operations use calls that:\n* rt.instance_claim is called from build_and_run_instance and unshelve. The build does not apply here as this instance already built. The unshelve will be handled when I add support for qos ports in unshelve.\n\n* rt._move_claim is called from live_migration_claim, rebuild_claim, resize_claim. The resize_claim is already handled in Train, except for cross cell resize. I need to handle that in Ussuri. The live_migration will be handled in Ussuri. The rebuild_claim is used only during evacuate which is handled in this patch.\n\nI will check how hard it is to roll back the InstancePciRequest change but I think it would need either a way to store the original parent_ifname somewhere to re-query it from placement.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2721dde1d7c11ca7ace8d7daeaef3da4acb90d28","unresolved":false,"context_lines":[{"line_number":3401,"context_line":"                self._get_request_group_mapping(request_spec)"},{"line_number":3402,"context_line":""},{"line_number":3403,"context_line":"            if request_group_resource_providers_mapping:"},{"line_number":3404,"context_line":"                self._update_pci_request_spec_with_allocated_interface_name("},{"line_number":3405,"context_line":"                    context, instance,"},{"line_number":3406,"context_line":"                    request_group_resource_providers_mapping)"},{"line_number":3407,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_be6b3483","line":3404,"range":{"start_line":3404,"start_character":21,"end_line":3404,"end_character":75},"in_reply_to":"3fa7e38b_a4aca9ee","updated":"2019-10-23 20:02:12.000000000","message":"\u003e I will check how hard it is to roll back the InstancePciRequest\n \u003e change but I think it would need either a way to store the original\n \u003e parent_ifname somewhere to re-query it from placement.\n\nSounds like maybe something we could stash in the instance migration_context if we get past the claim (which creates the migration_context) and use that later to rollback if needed.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":3401,"context_line":"                self._get_request_group_mapping(request_spec)"},{"line_number":3402,"context_line":""},{"line_number":3403,"context_line":"            if request_group_resource_providers_mapping:"},{"line_number":3404,"context_line":"                self._update_pci_request_spec_with_allocated_interface_name("},{"line_number":3405,"context_line":"                    context, instance,"},{"line_number":3406,"context_line":"                    request_group_resource_providers_mapping)"},{"line_number":3407,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_34df4067","line":3404,"range":{"start_line":3404,"start_character":21,"end_line":3404,"end_character":75},"in_reply_to":"3fa7e38b_be6b3483","updated":"2019-10-25 15:24:31.000000000","message":"Let\u0027s do it separately from this patch.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":3507,"context_line":""},{"line_number":3508,"context_line":"        if evacuate:"},{"line_number":3509,"context_line":"            request_group_resource_providers_mapping \u003d \\"},{"line_number":3510,"context_line":"                self._get_request_group_mapping(request_spec)"},{"line_number":3511,"context_line":""},{"line_number":3512,"context_line":"            self.network_api.setup_networks_on_host("},{"line_number":3513,"context_line":"                    context, instance, self.host)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_eb8477d5","line":3510,"updated":"2019-10-24 20:32:39.000000000","message":"I guess this method isn\u0027t too expensive, it\u0027s just building a dict to return, but this is the second time this is called since _do_rebuild_instance_with_claim calls it as well and we could just pass those results down here, but it\u0027s a nit.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":3507,"context_line":""},{"line_number":3508,"context_line":"        if evacuate:"},{"line_number":3509,"context_line":"            request_group_resource_providers_mapping \u003d \\"},{"line_number":3510,"context_line":"                self._get_request_group_mapping(request_spec)"},{"line_number":3511,"context_line":""},{"line_number":3512,"context_line":"            self.network_api.setup_networks_on_host("},{"line_number":3513,"context_line":"                    context, instance, self.host)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b4cc90bb","line":3510,"in_reply_to":"3fa7e38b_eb8477d5","updated":"2019-10-25 15:24:31.000000000","message":"Good point. Done.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":3517,"context_line":"            # are so similar, we should really try to unify them."},{"line_number":3518,"context_line":"            self.network_api.setup_instance_network_on_host("},{"line_number":3519,"context_line":"                    context, instance, self.host, migration,"},{"line_number":3520,"context_line":"                request_group_resource_providers_mapping)"},{"line_number":3521,"context_line":"            # TODO(mriedem): Consider decorating setup_instance_network_on_host"},{"line_number":3522,"context_line":"            # with @base_api.refresh_cache and then we wouldn\u0027t need this"},{"line_number":3523,"context_line":"            # explicit call to get_instance_nw_info."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_6b708709","line":3520,"updated":"2019-10-24 20:32:39.000000000","message":"nit: align this with the params above and use named kwargs, so provider_mappings\u003drequest_group_resource_providers_mapping\n\n--\n\nAlso, we\u0027re passing the port mappings through to setup_instance_network_on_host just like the resize flows do with migrate_instance_finish (same dest host) which is just a wrapper over _update_port_binding_for_instance like setup_instance_network_on_host, which is why I was trying to do something like this:\n\nhttps://review.opendev.org/#/c/635343/\n\nCoincidentally I recently abandoned that because migrate_instance_finish had changed to pass through provider mappings but setup_instance_network_on_host had not, until now. :) Anyway, there is still an opportunity to clean some of this redundancy up after nova-network is dropped since we have 2 methods in the network API doing the same thing.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":3517,"context_line":"            # are so similar, we should really try to unify them."},{"line_number":3518,"context_line":"            self.network_api.setup_instance_network_on_host("},{"line_number":3519,"context_line":"                    context, instance, self.host, migration,"},{"line_number":3520,"context_line":"                request_group_resource_providers_mapping)"},{"line_number":3521,"context_line":"            # TODO(mriedem): Consider decorating setup_instance_network_on_host"},{"line_number":3522,"context_line":"            # with @base_api.refresh_cache and then we wouldn\u0027t need this"},{"line_number":3523,"context_line":"            # explicit call to get_instance_nw_info."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_f409a8dc","line":3520,"in_reply_to":"3fa7e38b_6b708709","updated":"2019-10-25 15:24:31.000000000","message":"Aligned and kwarged. I agree with the goal of https://review.opendev.org/#/c/635343/","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"}],"nova/conductor/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":1028,"context_line":"            # 1. rebuild - the instance.host is passed to rebuild on the"},{"line_number":1029,"context_line":"            #       same host and bypass the scheduler *unless* a new image"},{"line_number":1030,"context_line":"            #       was specified"},{"line_number":1031,"context_line":"            # 2. evacuate with specified host and force\u003dTrue - the specified"},{"line_number":1032,"context_line":"            #       host is passed and is meant to bypass the scheduler."},{"line_number":1033,"context_line":"            # NOTE(mriedem): This could be a lot more straight-forward if we"},{"line_number":1034,"context_line":"            # had separate methods for rebuild and evacuate..."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_1678168d","line":1031,"updated":"2019-10-24 20:32:39.000000000","message":"Isn\u0027t it possible to create a server using microversion 2.72 with ports with resource requests and then forcefully evacuate them to a host using microversion 2.29 so we\u0027d get here and drop the nested allocations for the port resource request? Though with your forethought on I7cbd5d9fb875ebf72995362e0b6693492ce32051 we\u0027ll fail in that case, so we\u0027re good here.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":1028,"context_line":"            # 1. rebuild - the instance.host is passed to rebuild on the"},{"line_number":1029,"context_line":"            #       same host and bypass the scheduler *unless* a new image"},{"line_number":1030,"context_line":"            #       was specified"},{"line_number":1031,"context_line":"            # 2. evacuate with specified host and force\u003dTrue - the specified"},{"line_number":1032,"context_line":"            #       host is passed and is meant to bypass the scheduler."},{"line_number":1033,"context_line":"            # NOTE(mriedem): This could be a lot more straight-forward if we"},{"line_number":1034,"context_line":"            # had separate methods for rebuild and evacuate..."}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_14fec4ae","line":1031,"in_reply_to":"3fa7e38b_1678168d","updated":"2019-10-25 15:24:31.000000000","message":"Your observation is correct. Force evacuation can be called with 2.29 but it will be rejected due to the nested allocation. This is covered with functional test in https://github.com/openstack/nova/blob/0238cf431b021c8aa779848bb771222d7d8539cf/nova/tests/functional/test_servers.py#L5284","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":1092,"context_line":"                    compute_utils.heal_reqspec_is_bfv("},{"line_number":1093,"context_line":"                        context, request_spec, instance)"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"                    port_res_req \u003d ("},{"line_number":1096,"context_line":"                        self.network_api.get_requested_resource_for_instance("},{"line_number":1097,"context_line":"                            context, instance.uuid))"},{"line_number":1098,"context_line":"                    # NOTE(gibi): When cyborg or other module wants to handle"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_36be72ff","line":1095,"updated":"2019-10-24 20:32:39.000000000","message":"Does this only apply to an evacuate (recreate\u003dTrue) scenario and not need to be done for rebuild to the same host but where the image doesn\u0027t change? In other words, can\u0027t we save ourselves the trouble of doing this for rebuild and move this into the \u0027if recreate\u0027 condition above?","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":1092,"context_line":"                    compute_utils.heal_reqspec_is_bfv("},{"line_number":1093,"context_line":"                        context, request_spec, instance)"},{"line_number":1094,"context_line":""},{"line_number":1095,"context_line":"                    port_res_req \u003d ("},{"line_number":1096,"context_line":"                        self.network_api.get_requested_resource_for_instance("},{"line_number":1097,"context_line":"                            context, instance.uuid))"},{"line_number":1098,"context_line":"                    # NOTE(gibi): When cyborg or other module wants to handle"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_74913852","line":1095,"in_reply_to":"3fa7e38b_36be72ff","updated":"2019-10-25 15:24:31.000000000","message":"You are right. I even have a TODO in the recreate case that can be removed now. Done.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"                    host, node, limits \u003d (selection.service_host,"},{"line_number":1110,"context_line":"                            selection.nodename, selection.limits)"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"                    scheduler_utils.fill_provider_mapping("},{"line_number":1113,"context_line":"                        context, self.report_client, request_spec,"},{"line_number":1114,"context_line":"                        selection)"},{"line_number":1115,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_56b9ae12","line":1112,"updated":"2019-10-24 20:32:39.000000000","message":"same - can\u0027t we put this in an \u0027if recreate\u0027 conditional?\n\n--\n\nAlso, unrelated to this change, and this is a latent problem that reminds me of the build_instances method in here - but if anything raises an unhandled exception we leave the instance stuck in some limbo state where we haven\u0027t set the status to ERROR and task_state to None. Granted an admin can reset the state in the API and it\u0027s latent, just something I was thinking of.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"                    host, node, limits \u003d (selection.service_host,"},{"line_number":1110,"context_line":"                            selection.nodename, selection.limits)"},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"                    scheduler_utils.fill_provider_mapping("},{"line_number":1113,"context_line":"                        context, self.report_client, request_spec,"},{"line_number":1114,"context_line":"                        selection)"},{"line_number":1115,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_34f6605f","line":1112,"in_reply_to":"3fa7e38b_56b9ae12","updated":"2019-10-25 15:24:31.000000000","message":"conditioned.\n\n--\n\nYeah the newly introduced calls could raise ValueError and NotImplementedError. I can add those exceptions to the except: below to at least not make the problem worst.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"13c63ff0faaa4411f9e523b5e3794fb2127c5edd","unresolved":false,"context_lines":[{"line_number":1098,"context_line":"                    request_spec.ensure_network_metadata(instance)"},{"line_number":1099,"context_line":"                    compute_utils.heal_reqspec_is_bfv("},{"line_number":1100,"context_line":"                        context, request_spec, instance)"},{"line_number":1101,"context_line":""},{"line_number":1102,"context_line":"                    host_lists \u003d self._schedule_instances(context,"},{"line_number":1103,"context_line":"                            request_spec, [instance.uuid],"},{"line_number":1104,"context_line":"                            return_alternates\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_fd7d0be7","line":1101,"updated":"2019-10-25 16:08:51.000000000","message":"unrelated","commit_id":"c91ed98b4155234ada34c7007c54d6109d5c6def"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b947bd4c21d667f7113aa472968bf25bcbde18e7","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"                            selection.nodename, selection.limits)"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"                    if recreate:"},{"line_number":1111,"context_line":"                        scheduler_utils.fill_provider_mapping("},{"line_number":1112,"context_line":"                            context, self.report_client, request_spec,"},{"line_number":1113,"context_line":"                            selection)"},{"line_number":1114,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_e150962e","line":1111,"range":{"start_line":1111,"start_character":40,"end_line":1111,"end_character":61},"updated":"2019-11-04 20:52:11.000000000","message":"ugh, each call to this gets us further in the hole, we really need to pull in the provider mappings from the alloc requests...","commit_id":"ab509a004333abc912653f55e525d0e7775bd696"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"275fcef4be840331c2115d8519babb1007f3709a","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"                            selection.nodename, selection.limits)"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"                    if recreate:"},{"line_number":1111,"context_line":"                        scheduler_utils.fill_provider_mapping("},{"line_number":1112,"context_line":"                            context, self.report_client, request_spec,"},{"line_number":1113,"context_line":"                            selection)"},{"line_number":1114,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_7f08fd7e","line":1111,"range":{"start_line":1111,"start_character":40,"end_line":1111,"end_character":61},"in_reply_to":"3fa7e38b_e150962e","updated":"2019-11-20 16:14:26.000000000","message":"I have a prio list for Ussuri. Finish the qos work first, then refactor nova to use the mapping from placement.","commit_id":"ab509a004333abc912653f55e525d0e7775bd696"}],"nova/network/base_api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        :param host: The host which network should be setup for instance."},{"line_number":366,"context_line":"        :param migration: The migration object if the instance is being"},{"line_number":367,"context_line":"                          tracked with a migration."},{"line_number":368,"context_line":"        :param provider_mappings: a dict of list of resource provider uuids"},{"line_number":369,"context_line":"            keyed by port uuid"},{"line_number":370,"context_line":"        \"\"\""},{"line_number":371,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b63fc285","line":368,"range":{"start_line":368,"start_character":44,"end_line":368,"end_character":48},"updated":"2019-10-24 20:32:39.000000000","message":"lists?","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        :param host: The host which network should be setup for instance."},{"line_number":366,"context_line":"        :param migration: The migration object if the instance is being"},{"line_number":367,"context_line":"                          tracked with a migration."},{"line_number":368,"context_line":"        :param provider_mappings: a dict of list of resource provider uuids"},{"line_number":369,"context_line":"            keyed by port uuid"},{"line_number":370,"context_line":"        \"\"\""},{"line_number":371,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_94415466","line":368,"range":{"start_line":368,"start_character":44,"end_line":368,"end_character":48},"in_reply_to":"3fa7e38b_b63fc285","updated":"2019-10-25 15:24:31.000000000","message":"Done","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b947bd4c21d667f7113aa472968bf25bcbde18e7","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        :param migration: The migration object if the instance is being"},{"line_number":367,"context_line":"                          tracked with a migration."},{"line_number":368,"context_line":"        :param provider_mappings: a dict of lists of resource provider uuids"},{"line_number":369,"context_line":"            keyed by port uuid"},{"line_number":370,"context_line":"        \"\"\""},{"line_number":371,"context_line":"        raise NotImplementedError()"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_4c0be1d3","line":369,"range":{"start_line":369,"start_character":21,"end_line":369,"end_character":25},"updated":"2019-11-04 20:52:11.000000000","message":"more future-safe to call this \"request group name\"?","commit_id":"ab509a004333abc912653f55e525d0e7775bd696"}],"nova/network/neutronv2/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":2825,"context_line":"    def migrate_instance_finish("},{"line_number":2826,"context_line":"            self, context, instance, migration, provider_mappings):"},{"line_number":2827,"context_line":"        \"\"\"Finish migrating the network of an instance.\"\"\""},{"line_number":2828,"context_line":"        self._update_port_binding_for_instance("},{"line_number":2829,"context_line":"            context, instance, migration[\u0027dest_compute\u0027], migration\u003dmigration,"},{"line_number":2830,"context_line":"            provider_mappings\u003dprovider_mappings)"},{"line_number":2831,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_564e8e38","line":2828,"updated":"2019-10-24 20:32:39.000000000","message":"oh hi!","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":7025,"context_line":"        # and one set for the dest compute. Each set we expect 3 allocations"},{"line_number":7026,"context_line":"        # one for the compute RP according to the flavor, one for the ovs port"},{"line_number":7027,"context_line":"        # and one for the SRIOV port."},{"line_number":7028,"context_line":"        self.assertEqual(6, len(allocations))"},{"line_number":7029,"context_line":""},{"line_number":7030,"context_line":"        # 1. source compute allocation"},{"line_number":7031,"context_line":"        compute_allocations \u003d allocations[source_compute_rp_uuid][\u0027resources\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_16d5761b","line":7028,"updated":"2019-10-24 20:32:39.000000000","message":"nit: for assertions on list length I find it useful to include the list item in the 3rd param to the method so if it fails the assertion the actual list shows up in the MismatchError output which has been really helpful for debugging things like mismatching notification length tests in the gate.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":7025,"context_line":"        # and one set for the dest compute. Each set we expect 3 allocations"},{"line_number":7026,"context_line":"        # one for the compute RP according to the flavor, one for the ovs port"},{"line_number":7027,"context_line":"        # and one for the SRIOV port."},{"line_number":7028,"context_line":"        self.assertEqual(6, len(allocations))"},{"line_number":7029,"context_line":""},{"line_number":7030,"context_line":"        # 1. source compute allocation"},{"line_number":7031,"context_line":"        compute_allocations \u003d allocations[source_compute_rp_uuid][\u0027resources\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_97a636c0","line":7028,"in_reply_to":"3fa7e38b_16d5761b","updated":"2019-10-25 15:24:31.000000000","message":"Done","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":7092,"context_line":"        allocations \u003d self.placement_api.get("},{"line_number":7093,"context_line":"            \u0027/allocations/%s\u0027 % server[\u0027id\u0027]).body[\u0027allocations\u0027]"},{"line_number":7094,"context_line":""},{"line_number":7095,"context_line":"        self.assertEqual(3, len(allocations))"},{"line_number":7096,"context_line":""},{"line_number":7097,"context_line":"        # 1. dest compute allocation"},{"line_number":7098,"context_line":"        compute_allocations \u003d allocations[dest_compute_rp_uuid][\u0027resources\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_d6defe3c","line":7095,"updated":"2019-10-24 20:32:39.000000000","message":"same","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":7092,"context_line":"        allocations \u003d self.placement_api.get("},{"line_number":7093,"context_line":"            \u0027/allocations/%s\u0027 % server[\u0027id\u0027]).body[\u0027allocations\u0027]"},{"line_number":7094,"context_line":""},{"line_number":7095,"context_line":"        self.assertEqual(3, len(allocations))"},{"line_number":7096,"context_line":""},{"line_number":7097,"context_line":"        # 1. dest compute allocation"},{"line_number":7098,"context_line":"        compute_allocations \u003d allocations[dest_compute_rp_uuid][\u0027resources\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b7ab3286","line":7095,"in_reply_to":"3fa7e38b_d6defe3c","updated":"2019-10-25 15:24:31.000000000","message":"Done","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":7219,"context_line":"        self._wait_for_migration_status(server, [\u0027failed\u0027])"},{"line_number":7220,"context_line":""},{"line_number":7221,"context_line":"        # As evacuation failed the resource allocation should be untouched"},{"line_number":7222,"context_line":"        self._check_allocation("},{"line_number":7223,"context_line":"            server, self.compute1_rp_uuid, non_qos_normal_port,"},{"line_number":7224,"context_line":"            qos_normal_port, qos_sriov_port, self.flavor_with_group_policy)"},{"line_number":7225,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b6b022df","line":7222,"updated":"2019-10-24 20:32:39.000000000","message":"We should be OK here (no race) because while the migration status is changed before we cleanup allocations, the instance status isn\u0027t set to error until after the allocations are cleaned up and we\u0027re waiting for the error status above first.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":7219,"context_line":"        self._wait_for_migration_status(server, [\u0027failed\u0027])"},{"line_number":7220,"context_line":""},{"line_number":7221,"context_line":"        # As evacuation failed the resource allocation should be untouched"},{"line_number":7222,"context_line":"        self._check_allocation("},{"line_number":7223,"context_line":"            server, self.compute1_rp_uuid, non_qos_normal_port,"},{"line_number":7224,"context_line":"            qos_normal_port, qos_sriov_port, self.flavor_with_group_policy)"},{"line_number":7225,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_7794da8b","line":7222,"in_reply_to":"3fa7e38b_b6b022df","updated":"2019-10-25 15:24:31.000000000","message":"Thanks for double checking it.","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b947bd4c21d667f7113aa472968bf25bcbde18e7","unresolved":false,"context_lines":[{"line_number":7077,"context_line":"        # the port that doesn\u0027t have resource request"},{"line_number":7078,"context_line":"        self.assertNotIn(\u0027binding:profile\u0027, updated_non_qos_port)"},{"line_number":7079,"context_line":""},{"line_number":7080,"context_line":"    def _check_allocation_after_evacuation_source_recovered("},{"line_number":7081,"context_line":"            self, server, flavor, dest_compute_rp_uuid, non_qos_port,"},{"line_number":7082,"context_line":"            qos_port, qos_sriov_port):"},{"line_number":7083,"context_line":"        # check that source allocation is cleaned up and the dest allocation"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_0cb2c994","line":7080,"range":{"start_line":7080,"start_character":8,"end_line":7080,"end_character":59},"updated":"2019-11-04 20:52:11.000000000","message":"seems like a lot of this method could be DRYed with the previous.","commit_id":"ab509a004333abc912653f55e525d0e7775bd696"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b6f7c811333a870e15f6757ebe71fb523ea6ca31","unresolved":false,"context_lines":[{"line_number":5221,"context_line":"            mock_setup.assert_called_once_with(self.context, instance,"},{"line_number":5222,"context_line":"                                               mock.ANY)"},{"line_number":5223,"context_line":"            mock_setup_inst.assert_called_once_with("},{"line_number":5224,"context_line":"                self.context, instance, mock.ANY, mock.ANY, mock.ANY)"},{"line_number":5225,"context_line":"            mock_get_nw_info.assert_called_once_with(self.context, instance)"},{"line_number":5226,"context_line":""},{"line_number":5227,"context_line":"    def test_rebuild_default_impl(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_56d44ee9","line":5224,"range":{"start_line":5224,"start_character":60,"end_line":5224,"end_character":68},"updated":"2019-10-24 20:32:39.000000000","message":"nit: could at least do: test.MatchType(dict)","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0676bf7446b51c352d6d156cf00c7ec2d171ad44","unresolved":false,"context_lines":[{"line_number":5221,"context_line":"            mock_setup.assert_called_once_with(self.context, instance,"},{"line_number":5222,"context_line":"                                               mock.ANY)"},{"line_number":5223,"context_line":"            mock_setup_inst.assert_called_once_with("},{"line_number":5224,"context_line":"                self.context, instance, mock.ANY, mock.ANY, mock.ANY)"},{"line_number":5225,"context_line":"            mock_get_nw_info.assert_called_once_with(self.context, instance)"},{"line_number":5226,"context_line":""},{"line_number":5227,"context_line":"    def test_rebuild_default_impl(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_f77a0a86","line":5224,"range":{"start_line":5224,"start_character":60,"end_line":5224,"end_character":68},"in_reply_to":"3fa7e38b_56d44ee9","updated":"2019-10-25 15:24:31.000000000","message":"Done","commit_id":"d2a1518b49eac4bfcb57c6e9eced7e968c4b4608"}],"nova/tests/unit/conductor/test_conductor.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d21e226467b3cf8fb41d69eafc3c1c63b5f79e31","unresolved":false,"context_lines":[{"line_number":1503,"context_line":"            mock.patch.object(self.conductor_manager.query_client,"},{"line_number":1504,"context_line":"                              \u0027select_destinations\u0027),"},{"line_number":1505,"context_line":"            mock.patch(\u0027nova.scheduler.utils.fill_provider_mapping\u0027,"},{"line_number":1506,"context_line":"                       new\u003dmock.NonCallableMock),"},{"line_number":1507,"context_line":"            mock.patch(\u0027nova.network.neutronv2.api.API.\u0027"},{"line_number":1508,"context_line":"                       \u0027get_requested_resource_for_instance\u0027,"},{"line_number":1509,"context_line":"                       new\u003dmock.NonCallableMock)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_7df6fb91","line":1506,"range":{"start_line":1506,"start_character":23,"end_line":1506,"end_character":26},"updated":"2019-10-25 16:06:24.000000000","message":"This should be new_callable if you\u0027re using NonCallableMock.","commit_id":"c91ed98b4155234ada34c7007c54d6109d5c6def"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d21e226467b3cf8fb41d69eafc3c1c63b5f79e31","unresolved":false,"context_lines":[{"line_number":1506,"context_line":"                       new\u003dmock.NonCallableMock),"},{"line_number":1507,"context_line":"            mock.patch(\u0027nova.network.neutronv2.api.API.\u0027"},{"line_number":1508,"context_line":"                       \u0027get_requested_resource_for_instance\u0027,"},{"line_number":1509,"context_line":"                       new\u003dmock.NonCallableMock)"},{"line_number":1510,"context_line":"        ) as (rebuild_mock, select_dest_mock, fill_provider_mock,"},{"line_number":1511,"context_line":"              get_resources_mock):"},{"line_number":1512,"context_line":"            self.conductor_manager.rebuild_instance(context\u003dself.context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_1defc7b1","line":1509,"range":{"start_line":1509,"start_character":23,"end_line":1509,"end_character":26},"updated":"2019-10-25 16:06:24.000000000","message":"same","commit_id":"c91ed98b4155234ada34c7007c54d6109d5c6def"}]}
