)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8eca5d95cf99096d4ae195bdcb87dfe784e248a","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-09-11 10:42:40 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support migrating SRIOV port with bandwidth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"blueprint: support-move-ops-with-qos-ports"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I2f3434f06489d8b6cb80933bcb1ea1e841049ba5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"5faad753_eea56a05","line":8,"updated":"2019-09-11 15:31:59.000000000","message":"A bit light on the details of this change huh.","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eec437e9c10d3b94687d8602cc79225893389f8c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-09-11 10:42:40 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support migrating SRIOV port with bandwidth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"blueprint: support-move-ops-with-qos-ports"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I2f3434f06489d8b6cb80933bcb1ea1e841049ba5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"5faad753_c2ab9e86","line":8,"in_reply_to":"5faad753_eea56a05","updated":"2019-09-11 18:21:31.000000000","message":"Added a bit of details.","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8b41215139bc314563de62b6854b99345f64847e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support migrating SRIOV port with bandwidth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For normal ports with resource request it is enough to recalculate the"},{"line_number":10,"context_line":"provider mapping during cold migrations. But for ports with PCI request"},{"line_number":11,"context_line":"(direct, macvtap) the PCI request also needs to be updated to point to"},{"line_number":12,"context_line":"the PF that provides the bandwidth on the destiantion host. So that the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"5faad753_85ccd06a","line":9,"updated":"2019-09-11 19:22:35.000000000","message":"From a continuous deployment perspective we should have done this before bumping the compute RPC API version and added the min version checks in conductor, but I doubt anyone CDing nova is using this feature yet.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1ffd8391b97b7237e6443650b0521ce39478dd06","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support migrating SRIOV port with bandwidth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For normal ports with resource request it is enough to recalculate the"},{"line_number":10,"context_line":"provider mapping during cold migrations. But for ports with PCI request"},{"line_number":11,"context_line":"(direct, macvtap) the PCI request also needs to be updated to point to"},{"line_number":12,"context_line":"the PF that provides the bandwidth on the destiantion host. So that the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"5faad753_24462cc2","line":9,"in_reply_to":"5faad753_3703c911","updated":"2019-09-12 13:31:57.000000000","message":"Yeah true.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support migrating SRIOV port with bandwidth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For normal ports with resource request it is enough to recalculate the"},{"line_number":10,"context_line":"provider mapping during cold migrations. But for ports with PCI request"},{"line_number":11,"context_line":"(direct, macvtap) the PCI request also needs to be updated to point to"},{"line_number":12,"context_line":"the PF that provides the bandwidth on the destiantion host. So that the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"5faad753_3703c911","line":9,"in_reply_to":"5faad753_85ccd06a","updated":"2019-09-12 10:57:36.000000000","message":"I don\u0027t get it. Migration is still rejected from the API until https://review.opendev.org/#/c/671497/27","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5c6d1a4eae562330822fbfc9d04bf74e32a00b5f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Matt Riedemann \u003cmriedem.os@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-09-12 10:17:48 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support migrating SRIOV port with bandwidth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For normal ports with resource request it is enough to recalculate the"},{"line_number":10,"context_line":"provider mapping during cold migrations. But for ports with PCI request"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"5faad753_c1a2a5fc","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":17},"updated":"2019-09-12 15:19:55.000000000","message":"nit: cold-migrating/resize (people could think about live-mig)","commit_id":"d7d51e1064ed345d1dd479cfc489f84b75adda28"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a304929fee59887237b2bb7b8fc0c8ac351acbd","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Matt Riedemann \u003cmriedem.os@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-09-12 10:17:48 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support migrating SRIOV port with bandwidth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For normal ports with resource request it is enough to recalculate the"},{"line_number":10,"context_line":"provider mapping during cold migrations. But for ports with PCI request"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"5faad753_e11001ab","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":17},"in_reply_to":"5faad753_c1a2a5fc","updated":"2019-09-12 15:33:18.000000000","message":"Yeah, my bad. Fortunately the commit message below states cold migration.","commit_id":"d7d51e1064ed345d1dd479cfc489f84b75adda28"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8eca5d95cf99096d4ae195bdcb87dfe784e248a","unresolved":false,"context_lines":[{"line_number":2130,"context_line":"        else:"},{"line_number":2131,"context_line":"            return None"},{"line_number":2132,"context_line":""},{"line_number":2133,"context_line":"    def _update_pci_request_spec_with_allocated_interface_name("},{"line_number":2134,"context_line":"            self, context, instance, request_group_resource_providers_mapping,"},{"line_number":2135,"context_line":"            save_instance\u003dTrue):"},{"line_number":2136,"context_line":"        if not instance.pci_requests:"}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_0ea9e6dd","line":2133,"updated":"2019-09-11 15:31:59.000000000","message":"A docstring for this would be nice since the save_instance parameter is a bit weird.","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eec437e9c10d3b94687d8602cc79225893389f8c","unresolved":false,"context_lines":[{"line_number":2130,"context_line":"        else:"},{"line_number":2131,"context_line":"            return None"},{"line_number":2132,"context_line":""},{"line_number":2133,"context_line":"    def _update_pci_request_spec_with_allocated_interface_name("},{"line_number":2134,"context_line":"            self, context, instance, request_group_resource_providers_mapping,"},{"line_number":2135,"context_line":"            save_instance\u003dTrue):"},{"line_number":2136,"context_line":"        if not instance.pci_requests:"}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_69e73442","line":2133,"in_reply_to":"5faad753_0ea9e6dd","updated":"2019-09-11 18:21:31.000000000","message":"removed the param.","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8eca5d95cf99096d4ae195bdcb87dfe784e248a","unresolved":false,"context_lines":[{"line_number":2155,"context_line":"                        \u0027%(requester)s is not supported.\u0027 %"},{"line_number":2156,"context_line":"                        {\u0027providers\u0027: provider_uuids,"},{"line_number":2157,"context_line":"                         \u0027requester\u0027: pci_request.requester_id})"},{"line_number":2158,"context_line":"                    raise exception.BuildAbortException("},{"line_number":2159,"context_line":"                        instance_uuid\u003dinstance.uuid,"},{"line_number":2160,"context_line":"                        reason\u003dreason)"},{"line_number":2161,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_2ede2211","line":2158,"range":{"start_line":2158,"start_character":36,"end_line":2158,"end_character":55},"updated":"2019-09-11 15:31:59.000000000","message":"This is a bit weird if it raises from _prep_resize but I\u0027m not sure that it matters. We might trigger a reschedule that will just continue to fail though.","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eec437e9c10d3b94687d8602cc79225893389f8c","unresolved":false,"context_lines":[{"line_number":2155,"context_line":"                        \u0027%(requester)s is not supported.\u0027 %"},{"line_number":2156,"context_line":"                        {\u0027providers\u0027: provider_uuids,"},{"line_number":2157,"context_line":"                         \u0027requester\u0027: pci_request.requester_id})"},{"line_number":2158,"context_line":"                    raise exception.BuildAbortException("},{"line_number":2159,"context_line":"                        instance_uuid\u003dinstance.uuid,"},{"line_number":2160,"context_line":"                        reason\u003dreason)"},{"line_number":2161,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_dfae1997","line":2158,"range":{"start_line":2158,"start_character":36,"end_line":2158,"end_character":55},"in_reply_to":"5faad753_2ede2211","updated":"2019-09-11 18:21:31.000000000","message":"Done","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8eca5d95cf99096d4ae195bdcb87dfe784e248a","unresolved":false,"context_lines":[{"line_number":2176,"context_line":"                        {\u0027provider\u0027: provider_uuids[0],"},{"line_number":2177,"context_line":"                         \u0027requester\u0027: pci_request.requester_id,"},{"line_number":2178,"context_line":"                         \u0027provider_name\u0027: dev_rp_name})"},{"line_number":2179,"context_line":"                    raise exception.BuildAbortException("},{"line_number":2180,"context_line":"                        instance_uuid\u003dinstance.uuid,"},{"line_number":2181,"context_line":"                        reason\u003dreason)"},{"line_number":2182,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_aed1b2fd","line":2179,"range":{"start_line":2179,"start_character":36,"end_line":2179,"end_character":55},"updated":"2019-09-11 15:31:59.000000000","message":"same - do we want to handle these in prep_resize and not attempt a reschedule?","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eec437e9c10d3b94687d8602cc79225893389f8c","unresolved":false,"context_lines":[{"line_number":2176,"context_line":"                        {\u0027provider\u0027: provider_uuids[0],"},{"line_number":2177,"context_line":"                         \u0027requester\u0027: pci_request.requester_id,"},{"line_number":2178,"context_line":"                         \u0027provider_name\u0027: dev_rp_name})"},{"line_number":2179,"context_line":"                    raise exception.BuildAbortException("},{"line_number":2180,"context_line":"                        instance_uuid\u003dinstance.uuid,"},{"line_number":2181,"context_line":"                        reason\u003dreason)"},{"line_number":2182,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_9f90a150","line":2179,"range":{"start_line":2179,"start_character":36,"end_line":2179,"end_character":55},"in_reply_to":"5faad753_aed1b2fd","updated":"2019-09-11 18:21:31.000000000","message":"Done","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8eca5d95cf99096d4ae195bdcb87dfe784e248a","unresolved":false,"context_lines":[{"line_number":4429,"context_line":"        instance.system_metadata[\u0027old_vm_state\u0027] \u003d vm_state"},{"line_number":4430,"context_line":""},{"line_number":4431,"context_line":"        request_group_resource_providers_mapping \u003d \\"},{"line_number":4432,"context_line":"            self._get_request_group_mapping(request_spec)"},{"line_number":4433,"context_line":""},{"line_number":4434,"context_line":"        if request_group_resource_providers_mapping:"},{"line_number":4435,"context_line":"            self._update_pci_request_spec_with_allocated_interface_name("}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_4e183ed2","line":4432,"range":{"start_line":4432,"start_character":44,"end_line":4432,"end_character":56},"updated":"2019-09-11 15:31:59.000000000","message":"Hmm, technically if compute RPC API is pinned to less than 5.1 for whatever reason this would be a legacy dict, see:\n\nhttps://review.opendev.org/#/c/680762/\n\nWhich will blow up in _get_request_group_mapping since it\u0027s doing request_spec.requested_resources. So we likely need to do a type check and if it\u0027s not an object we need to convert it to an object like this:\n\nhttps://review.opendev.org/#/c/680762/1/nova/conductor/manager.py@322\n\nAnd leave a TODO that we can drop that compat when we move to compute RPC API 6.0.","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eec437e9c10d3b94687d8602cc79225893389f8c","unresolved":false,"context_lines":[{"line_number":4429,"context_line":"        instance.system_metadata[\u0027old_vm_state\u0027] \u003d vm_state"},{"line_number":4430,"context_line":""},{"line_number":4431,"context_line":"        request_group_resource_providers_mapping \u003d \\"},{"line_number":4432,"context_line":"            self._get_request_group_mapping(request_spec)"},{"line_number":4433,"context_line":""},{"line_number":4434,"context_line":"        if request_group_resource_providers_mapping:"},{"line_number":4435,"context_line":"            self._update_pci_request_spec_with_allocated_interface_name("}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_bf355d48","line":4432,"range":{"start_line":4432,"start_character":44,"end_line":4432,"end_character":56},"in_reply_to":"5faad753_4e183ed2","updated":"2019-09-11 18:21:31.000000000","message":"Thanks. I would have never noticed this. I copied your compat code here.\n\n//later\n\nThe funny thing is that _get_request_group_mapping is so defensive that it does not fail on the legacy dict. Sure it does not work properly so I have to fix, but it is funny. (or it is too late for me today and everything seem funny)","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8eca5d95cf99096d4ae195bdcb87dfe784e248a","unresolved":false,"context_lines":[{"line_number":4438,"context_line":""},{"line_number":4439,"context_line":"        # NOTE(gibi): instance save is under the pci request update as that"},{"line_number":4440,"context_line":"        # call might also modify the instance.pci_requests.requests and we"},{"line_number":4441,"context_line":"        # want to avoid two separate saves"},{"line_number":4442,"context_line":"        instance.save()"},{"line_number":4443,"context_line":""},{"line_number":4444,"context_line":"        limits \u003d filter_properties.get(\u0027limits\u0027, {})"}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_6e773a04","line":4441,"range":{"start_line":4441,"start_character":10,"end_line":4441,"end_character":42},"updated":"2019-09-11 15:31:59.000000000","message":"Why? The save() method won\u0027t do anything if no fields changed:\n\nhttps://github.com/openstack/nova/blob/0575eabffb0f574942f8695bccc9dc48ad122d49/nova/objects/instance.py#L780","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5c6d1a4eae562330822fbfc9d04bf74e32a00b5f","unresolved":false,"context_lines":[{"line_number":4438,"context_line":""},{"line_number":4439,"context_line":"        # NOTE(gibi): instance save is under the pci request update as that"},{"line_number":4440,"context_line":"        # call might also modify the instance.pci_requests.requests and we"},{"line_number":4441,"context_line":"        # want to avoid two separate saves"},{"line_number":4442,"context_line":"        instance.save()"},{"line_number":4443,"context_line":""},{"line_number":4444,"context_line":"        limits \u003d filter_properties.get(\u0027limits\u0027, {})"}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_33bc4fba","line":4441,"updated":"2019-09-12 15:19:55.000000000","message":"this looks reasonable even if I have adding some parameter like this.","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eec437e9c10d3b94687d8602cc79225893389f8c","unresolved":false,"context_lines":[{"line_number":4438,"context_line":""},{"line_number":4439,"context_line":"        # NOTE(gibi): instance save is under the pci request update as that"},{"line_number":4440,"context_line":"        # call might also modify the instance.pci_requests.requests and we"},{"line_number":4441,"context_line":"        # want to avoid two separate saves"},{"line_number":4442,"context_line":"        instance.save()"},{"line_number":4443,"context_line":""},{"line_number":4444,"context_line":"        limits \u003d filter_properties.get(\u0027limits\u0027, {})"}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_69b9742c","line":4441,"range":{"start_line":4441,"start_character":10,"end_line":4441,"end_character":42},"in_reply_to":"5faad753_6e773a04","updated":"2019-09-11 18:21:31.000000000","message":"I guess I overthought the whole save thing. Backing away...","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8eca5d95cf99096d4ae195bdcb87dfe784e248a","unresolved":false,"context_lines":[{"line_number":4525,"context_line":"                self._revert_allocation(context, instance, migration)"},{"line_number":4526,"context_line":"                # try to re-schedule the resize elsewhere:"},{"line_number":4527,"context_line":"                exc_info \u003d sys.exc_info()"},{"line_number":4528,"context_line":"                self._reschedule_resize_or_reraise(context, instance,"},{"line_number":4529,"context_line":"                        exc_info, instance_type, request_spec,"},{"line_number":4530,"context_line":"                        filter_properties, host_list)"},{"line_number":4531,"context_line":"            finally:"}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_4e66fe53","line":4528,"updated":"2019-09-11 15:31:59.000000000","message":"If we got a BuildAbortException we likely shouldn\u0027t even try to reschedule, right?","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eec437e9c10d3b94687d8602cc79225893389f8c","unresolved":false,"context_lines":[{"line_number":4525,"context_line":"                self._revert_allocation(context, instance, migration)"},{"line_number":4526,"context_line":"                # try to re-schedule the resize elsewhere:"},{"line_number":4527,"context_line":"                exc_info \u003d sys.exc_info()"},{"line_number":4528,"context_line":"                self._reschedule_resize_or_reraise(context, instance,"},{"line_number":4529,"context_line":"                        exc_info, instance_type, request_spec,"},{"line_number":4530,"context_line":"                        filter_properties, host_list)"},{"line_number":4531,"context_line":"            finally:"}],"source_content_type":"text/x-python","patch_set":19,"id":"5faad753_3fcacd6c","line":4528,"in_reply_to":"5faad753_4e66fe53","updated":"2019-09-11 18:21:31.000000000","message":"Yeah, both exception reason suggest that something is worng with the deployment. Done","commit_id":"ad572df5221fa3c749bec7ed3e70c951cd281a26"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1ad9e2d14441130d37e12bd897851888dee39eb2","unresolved":false,"context_lines":[{"line_number":4447,"context_line":""},{"line_number":4448,"context_line":"        if request_group_resource_providers_mapping:"},{"line_number":4449,"context_line":"            self._update_pci_request_spec_with_allocated_interface_name("},{"line_number":4450,"context_line":"                context, instance, request_group_resource_providers_mapping)"},{"line_number":4451,"context_line":""},{"line_number":4452,"context_line":"        limits \u003d filter_properties.get(\u0027limits\u0027, {})"},{"line_number":4453,"context_line":"        with self.rt.resize_claim(context, instance, instance_type, node,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_88f945c9","line":4450,"updated":"2019-09-11 19:48:07.000000000","message":"I commented out all of this new block of code in here and ran the ServerMoveWithPortResourceRequestTest tests and nothing failed. How can we assert from the functional test that what we\u0027re doing here is actually used?","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":4447,"context_line":""},{"line_number":4448,"context_line":"        if request_group_resource_providers_mapping:"},{"line_number":4449,"context_line":"            self._update_pci_request_spec_with_allocated_interface_name("},{"line_number":4450,"context_line":"                context, instance, request_group_resource_providers_mapping)"},{"line_number":4451,"context_line":""},{"line_number":4452,"context_line":"        limits \u003d filter_properties.get(\u0027limits\u0027, {})"},{"line_number":4453,"context_line":"        with self.rt.resize_claim(context, instance, instance_type, node,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_3218b773","line":4450,"in_reply_to":"5faad753_88f945c9","updated":"2019-09-12 10:57:36.000000000","message":"It is actually a test setup problem. The hosts are symmetric and therefore even if we are not updating the pf dev name in the PCI request we still have the good name there form the source host. I added a patch before this to break the naming symmetry. Now the test run fails at the pci claim if this is commented out.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dea2e9ed79aee0a968e9f2301c8e5cdf2c960ff0","unresolved":false,"context_lines":[{"line_number":4526,"context_line":"                                  instance_type, filter_properties,"},{"line_number":4527,"context_line":"                                  node, migration, request_spec,"},{"line_number":4528,"context_line":"                                  clean_shutdown)"},{"line_number":4529,"context_line":"            except exception.BuildAbortException:"},{"line_number":4530,"context_line":"                # NOTE(gibi): We failed"},{"line_number":4531,"context_line":"                # _update_pci_request_spec_with_allocated_interface_name there"},{"line_number":4532,"context_line":"                # is no reason to re-scedule. Just revert the allocation and"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_48926da0","line":4529,"updated":"2019-09-11 19:39:16.000000000","message":"While thinking about how to handle this like _reschedule_resize_or_reraise where we don\u0027t reschedule, I\u0027m thinking it would be good to have a functional test that asserts the behavior we expect, which is that the allocations are reverted and whatever other error handling happens normally - like recording a fault and sending a notification. That\u0027s easier tested \"externally\" from a functional test and then the runtime code can be tweaked however we want, e.g. test-driven development.\n\nI have a couple of ideas for alternative ideas to still call _reschedule_resize_or_reraise for the BuildAbortException case but they are kind of icky.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":4526,"context_line":"                                  instance_type, filter_properties,"},{"line_number":4527,"context_line":"                                  node, migration, request_spec,"},{"line_number":4528,"context_line":"                                  clean_shutdown)"},{"line_number":4529,"context_line":"            except exception.BuildAbortException:"},{"line_number":4530,"context_line":"                # NOTE(gibi): We failed"},{"line_number":4531,"context_line":"                # _update_pci_request_spec_with_allocated_interface_name there"},{"line_number":4532,"context_line":"                # is no reason to re-scedule. Just revert the allocation and"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_52745368","line":4529,"in_reply_to":"5faad753_48926da0","updated":"2019-09-12 10:57:36.000000000","message":"When rescheduled \u003d\u003d False in _reschedule_resize_or_reraise we don\u0027t send notifications or record fault directly. That call will log \u0027Retry info not present,...\u0027 and then re-raise the exception. So whatever error handling happens for an existing non-reschedule case, will happen for the new BuildAbortException case as well.\n\nI created a functional test that injects the BuildAbortException and asserted that:\n\n* instance is in ERROR, having allocation from the source host.\n* migration allocation is deleted\n* instance action event is recorded with an Error status.\n* notifications are sent","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1ffd8391b97b7237e6443650b0521ce39478dd06","unresolved":false,"context_lines":[{"line_number":4526,"context_line":"                                  instance_type, filter_properties,"},{"line_number":4527,"context_line":"                                  node, migration, request_spec,"},{"line_number":4528,"context_line":"                                  clean_shutdown)"},{"line_number":4529,"context_line":"            except exception.BuildAbortException:"},{"line_number":4530,"context_line":"                # NOTE(gibi): We failed"},{"line_number":4531,"context_line":"                # _update_pci_request_spec_with_allocated_interface_name there"},{"line_number":4532,"context_line":"                # is no reason to re-scedule. Just revert the allocation and"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_2474ecfd","line":4529,"in_reply_to":"5faad753_52745368","updated":"2019-09-12 13:31:57.000000000","message":"\u003e When rescheduled \u003d\u003d False ... we don\u0027t send\n\nGuh, you\u0027re right, my eyes must have been broken yesterday since I totally lost that logic.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8b41215139bc314563de62b6854b99345f64847e","unresolved":false,"context_lines":[{"line_number":4528,"context_line":"                                  clean_shutdown)"},{"line_number":4529,"context_line":"            except exception.BuildAbortException:"},{"line_number":4530,"context_line":"                # NOTE(gibi): We failed"},{"line_number":4531,"context_line":"                # _update_pci_request_spec_with_allocated_interface_name there"},{"line_number":4532,"context_line":"                # is no reason to re-scedule. Just revert the allocation and"},{"line_number":4533,"context_line":"                # fail the migration."},{"line_number":4534,"context_line":"                self._revert_allocation(context, instance, migration)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_a5cc6c61","line":4531,"range":{"start_line":4531,"start_character":73,"end_line":4531,"end_character":78},"updated":"2019-09-11 19:22:35.000000000","message":"so there","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":4528,"context_line":"                                  clean_shutdown)"},{"line_number":4529,"context_line":"            except exception.BuildAbortException:"},{"line_number":4530,"context_line":"                # NOTE(gibi): We failed"},{"line_number":4531,"context_line":"                # _update_pci_request_spec_with_allocated_interface_name there"},{"line_number":4532,"context_line":"                # is no reason to re-scedule. Just revert the allocation and"},{"line_number":4533,"context_line":"                # fail the migration."},{"line_number":4534,"context_line":"                self._revert_allocation(context, instance, migration)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_92abab87","line":4531,"range":{"start_line":4531,"start_character":73,"end_line":4531,"end_character":78},"in_reply_to":"5faad753_a5cc6c61","updated":"2019-09-12 10:57:36.000000000","message":"Done","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8b41215139bc314563de62b6854b99345f64847e","unresolved":false,"context_lines":[{"line_number":4529,"context_line":"            except exception.BuildAbortException:"},{"line_number":4530,"context_line":"                # NOTE(gibi): We failed"},{"line_number":4531,"context_line":"                # _update_pci_request_spec_with_allocated_interface_name there"},{"line_number":4532,"context_line":"                # is no reason to re-scedule. Just revert the allocation and"},{"line_number":4533,"context_line":"                # fail the migration."},{"line_number":4534,"context_line":"                self._revert_allocation(context, instance, migration)"},{"line_number":4535,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_e5ea64aa","line":4532,"range":{"start_line":4532,"start_character":37,"end_line":4532,"end_character":44},"updated":"2019-09-11 19:22:35.000000000","message":"schedule","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":4529,"context_line":"            except exception.BuildAbortException:"},{"line_number":4530,"context_line":"                # NOTE(gibi): We failed"},{"line_number":4531,"context_line":"                # _update_pci_request_spec_with_allocated_interface_name there"},{"line_number":4532,"context_line":"                # is no reason to re-scedule. Just revert the allocation and"},{"line_number":4533,"context_line":"                # fail the migration."},{"line_number":4534,"context_line":"                self._revert_allocation(context, instance, migration)"},{"line_number":4535,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_b2aee795","line":4532,"range":{"start_line":4532,"start_character":37,"end_line":4532,"end_character":44},"in_reply_to":"5faad753_e5ea64aa","updated":"2019-09-12 10:57:36.000000000","message":"Done","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8b41215139bc314563de62b6854b99345f64847e","unresolved":false,"context_lines":[{"line_number":4531,"context_line":"                # _update_pci_request_spec_with_allocated_interface_name there"},{"line_number":4532,"context_line":"                # is no reason to re-scedule. Just revert the allocation and"},{"line_number":4533,"context_line":"                # fail the migration."},{"line_number":4534,"context_line":"                self._revert_allocation(context, instance, migration)"},{"line_number":4535,"context_line":"                raise"},{"line_number":4536,"context_line":"            except Exception:"},{"line_number":4537,"context_line":"                # Since we hit a failure, we\u0027re either rescheduling or dead"},{"line_number":4538,"context_line":"                # and either way we need to cleanup any allocations created"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_05dea010","line":4535,"range":{"start_line":4534,"start_character":16,"end_line":4535,"end_character":21},"updated":"2019-09-11 19:22:35.000000000","message":"Normally we would do this using excutils:\n\nwith excutils.save_and_reraise_exception():\n    self._revert_allocation(context, instance, migration)","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":4531,"context_line":"                # _update_pci_request_spec_with_allocated_interface_name there"},{"line_number":4532,"context_line":"                # is no reason to re-scedule. Just revert the allocation and"},{"line_number":4533,"context_line":"                # fail the migration."},{"line_number":4534,"context_line":"                self._revert_allocation(context, instance, migration)"},{"line_number":4535,"context_line":"                raise"},{"line_number":4536,"context_line":"            except Exception:"},{"line_number":4537,"context_line":"                # Since we hit a failure, we\u0027re either rescheduling or dead"},{"line_number":4538,"context_line":"                # and either way we need to cleanup any allocations created"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_72e2af03","line":4535,"range":{"start_line":4534,"start_character":16,"end_line":4535,"end_character":21},"in_reply_to":"5faad753_05dea010","updated":"2019-09-12 10:57:36.000000000","message":"Yeah, except in the \u0027except Exception:\u0027 branch below. Anyhow added it now.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8b41215139bc314563de62b6854b99345f64847e","unresolved":false,"context_lines":[{"line_number":4544,"context_line":"                        exc_info, instance_type, request_spec,"},{"line_number":4545,"context_line":"                        filter_properties, host_list)"},{"line_number":4546,"context_line":"            finally:"},{"line_number":4547,"context_line":"                self._send_prep_resize_notifications("},{"line_number":4548,"context_line":"                    context, instance, fields.NotificationPhase.END,"},{"line_number":4549,"context_line":"                    instance_type)"},{"line_number":4550,"context_line":""},{"line_number":4551,"context_line":"    def _reschedule_resize_or_reraise(self, context, instance, exc_info,"},{"line_number":4552,"context_line":"            instance_type, request_spec, filter_properties, host_list):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_250abc89","line":4549,"range":{"start_line":4547,"start_character":16,"end_line":4549,"end_character":34},"updated":"2019-09-11 19:22:35.000000000","message":"Will we still hit this if hit BuildAbortException and re-raise? Though if _reschedule_resize_or_reraise re-raises it would be in the same boat.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":4544,"context_line":"                        exc_info, instance_type, request_spec,"},{"line_number":4545,"context_line":"                        filter_properties, host_list)"},{"line_number":4546,"context_line":"            finally:"},{"line_number":4547,"context_line":"                self._send_prep_resize_notifications("},{"line_number":4548,"context_line":"                    context, instance, fields.NotificationPhase.END,"},{"line_number":4549,"context_line":"                    instance_type)"},{"line_number":4550,"context_line":""},{"line_number":4551,"context_line":"    def _reschedule_resize_or_reraise(self, context, instance, exc_info,"},{"line_number":4552,"context_line":"            instance_type, request_spec, filter_properties, host_list):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_d28a8319","line":4549,"range":{"start_line":4547,"start_character":16,"end_line":4549,"end_character":34},"in_reply_to":"5faad753_08d4751f","updated":"2019-09-12 10:57:36.000000000","message":"Yep, here we send the notifications regardless of error.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"408fd9c6671da4a2e5ceb0457dd48819bbbe8206","unresolved":false,"context_lines":[{"line_number":4544,"context_line":"                        exc_info, instance_type, request_spec,"},{"line_number":4545,"context_line":"                        filter_properties, host_list)"},{"line_number":4546,"context_line":"            finally:"},{"line_number":4547,"context_line":"                self._send_prep_resize_notifications("},{"line_number":4548,"context_line":"                    context, instance, fields.NotificationPhase.END,"},{"line_number":4549,"context_line":"                    instance_type)"},{"line_number":4550,"context_line":""},{"line_number":4551,"context_line":"    def _reschedule_resize_or_reraise(self, context, instance, exc_info,"},{"line_number":4552,"context_line":"            instance_type, request_spec, filter_properties, host_list):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_e8b9d9e8","line":4549,"range":{"start_line":4547,"start_character":16,"end_line":4549,"end_character":34},"in_reply_to":"5faad753_250abc89","updated":"2019-09-11 19:52:40.000000000","message":"Yeah I guess so:\n\n\u003e\u003e\u003e try:\n...     raise TypeError()\n... except TypeError:\n...     raise ValueError()\n... finally:\n...     import sys\n...     print(sys.exc_info)\n... \n\u003cbuilt-in function exc_info\u003e\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 4, in \u003cmodule\u003e\nValueError\n\u003e\u003e\u003e","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"924427203747c99fbf245013516832bd1af33725","unresolved":false,"context_lines":[{"line_number":4544,"context_line":"                        exc_info, instance_type, request_spec,"},{"line_number":4545,"context_line":"                        filter_properties, host_list)"},{"line_number":4546,"context_line":"            finally:"},{"line_number":4547,"context_line":"                self._send_prep_resize_notifications("},{"line_number":4548,"context_line":"                    context, instance, fields.NotificationPhase.END,"},{"line_number":4549,"context_line":"                    instance_type)"},{"line_number":4550,"context_line":""},{"line_number":4551,"context_line":"    def _reschedule_resize_or_reraise(self, context, instance, exc_info,"},{"line_number":4552,"context_line":"            instance_type, request_spec, filter_properties, host_list):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_08d4751f","line":4549,"range":{"start_line":4547,"start_character":16,"end_line":4549,"end_character":34},"in_reply_to":"5faad753_250abc89","updated":"2019-09-11 20:00:54.000000000","message":"the finally block will always execute if the corresponding try block started.\nso this should run if we get a BuildAbortException.\n\nit will run after the except block even if you had a return in the except block this would run after the return before the function returned to is caller.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dea2e9ed79aee0a968e9f2301c8e5cdf2c960ff0","unresolved":false,"context_lines":[{"line_number":4560,"context_line":"        instance_uuid \u003d instance.uuid"},{"line_number":4561,"context_line":""},{"line_number":4562,"context_line":"        try:"},{"line_number":4563,"context_line":"            retry \u003d filter_properties.get(\u0027retry\u0027)"},{"line_number":4564,"context_line":"            if retry:"},{"line_number":4565,"context_line":"                LOG.debug(\u0027Rescheduling, attempt %d\u0027, retry[\u0027num_attempts\u0027],"},{"line_number":4566,"context_line":"                          instance_uuid\u003dinstance_uuid)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_c87e5d6a","line":4563,"updated":"2019-09-11 19:39:16.000000000","message":"An alternative is the code calling _reschedule_resize_or_reraise could hack filter_properties to remove \u0027retry\u0027 if we got a BuildAbortException and then we won\u0027t reschedule, but that\u0027s tightly coupling how we know the internals of this method works, which is kind of gross.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":4560,"context_line":"        instance_uuid \u003d instance.uuid"},{"line_number":4561,"context_line":""},{"line_number":4562,"context_line":"        try:"},{"line_number":4563,"context_line":"            retry \u003d filter_properties.get(\u0027retry\u0027)"},{"line_number":4564,"context_line":"            if retry:"},{"line_number":4565,"context_line":"                LOG.debug(\u0027Rescheduling, attempt %d\u0027, retry[\u0027num_attempts\u0027],"},{"line_number":4566,"context_line":"                          instance_uuid\u003dinstance_uuid)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_3273d74f","line":4563,"in_reply_to":"5faad753_6873a94e","updated":"2019-09-12 10:57:36.000000000","message":"I think we don\u0027t need to call _reschedule_resize_or_reraise if we don\u0027t want to reschedule as this function does almost nothing for that case. see also my comment at L4529","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"924427203747c99fbf245013516832bd1af33725","unresolved":false,"context_lines":[{"line_number":4560,"context_line":"        instance_uuid \u003d instance.uuid"},{"line_number":4561,"context_line":""},{"line_number":4562,"context_line":"        try:"},{"line_number":4563,"context_line":"            retry \u003d filter_properties.get(\u0027retry\u0027)"},{"line_number":4564,"context_line":"            if retry:"},{"line_number":4565,"context_line":"                LOG.debug(\u0027Rescheduling, attempt %d\u0027, retry[\u0027num_attempts\u0027],"},{"line_number":4566,"context_line":"                          instance_uuid\u003dinstance_uuid)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_6873a94e","line":4563,"in_reply_to":"5faad753_c87e5d6a","updated":"2019-09-11 20:00:54.000000000","message":"so this would just be calling \n_reschedule_resize_or_reraise on line 4534 but setting retry to false first.\n\nwhich would skip to lin 4606 effectivly.\nthat is not terrible. and would avoid pulling line 4607-4620 out into its own function.\n\nit creates some stong coupling but its not too excessive IMO","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dea2e9ed79aee0a968e9f2301c8e5cdf2c960ff0","unresolved":false,"context_lines":[{"line_number":4559,"context_line":"        rescheduled \u003d False"},{"line_number":4560,"context_line":"        instance_uuid \u003d instance.uuid"},{"line_number":4561,"context_line":""},{"line_number":4562,"context_line":"        try:"},{"line_number":4563,"context_line":"            retry \u003d filter_properties.get(\u0027retry\u0027)"},{"line_number":4564,"context_line":"            if retry:"},{"line_number":4565,"context_line":"                LOG.debug(\u0027Rescheduling, attempt %d\u0027, retry[\u0027num_attempts\u0027],"},{"line_number":4566,"context_line":"                          instance_uuid\u003dinstance_uuid)"},{"line_number":4567,"context_line":""},{"line_number":4568,"context_line":"                # reset the task state"},{"line_number":4569,"context_line":"                task_state \u003d task_states.RESIZE_PREP"},{"line_number":4570,"context_line":"                self._instance_update(context, instance, task_state\u003dtask_state)"},{"line_number":4571,"context_line":""},{"line_number":4572,"context_line":"                if exc_info:"},{"line_number":4573,"context_line":"                    # stringify to avoid circular ref problem in json"},{"line_number":4574,"context_line":"                    # serialization"},{"line_number":4575,"context_line":"                    retry[\u0027exc\u0027] \u003d traceback.format_exception_only("},{"line_number":4576,"context_line":"                        exc_info[0], exc_info[1])"},{"line_number":4577,"context_line":""},{"line_number":4578,"context_line":"                scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":4579,"context_line":""},{"line_number":4580,"context_line":"                self.compute_task_api.resize_instance("},{"line_number":4581,"context_line":"                    context, instance, scheduler_hint, instance_type,"},{"line_number":4582,"context_line":"                    request_spec\u003drequest_spec, host_list\u003dhost_list)"},{"line_number":4583,"context_line":""},{"line_number":4584,"context_line":"                rescheduled \u003d True"},{"line_number":4585,"context_line":"            else:"},{"line_number":4586,"context_line":"                # no retry information, do not reschedule."},{"line_number":4587,"context_line":"                LOG.debug(\u0027Retry info not present, will not reschedule\u0027,"},{"line_number":4588,"context_line":"                          instance_uuid\u003dinstance_uuid)"},{"line_number":4589,"context_line":"                rescheduled \u003d False"},{"line_number":4590,"context_line":"        except Exception as error:"},{"line_number":4591,"context_line":"            rescheduled \u003d False"},{"line_number":4592,"context_line":"            LOG.exception(\"Error trying to reschedule\","},{"line_number":4593,"context_line":"                          instance_uuid\u003dinstance_uuid)"},{"line_number":4594,"context_line":"            compute_utils.add_instance_fault_from_exc(context,"},{"line_number":4595,"context_line":"                    instance, error,"},{"line_number":4596,"context_line":"                    exc_info\u003dsys.exc_info())"},{"line_number":4597,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":4598,"context_line":"                    \u0027resize.error\u0027, fault\u003derror)"},{"line_number":4599,"context_line":"            compute_utils.notify_about_instance_action("},{"line_number":4600,"context_line":"                context, instance, self.host,"},{"line_number":4601,"context_line":"                action\u003dfields.NotificationAction.RESIZE,"},{"line_number":4602,"context_line":"                phase\u003dfields.NotificationPhase.ERROR,"},{"line_number":4603,"context_line":"                exception\u003derror,"},{"line_number":4604,"context_line":"                tb\u003d\u0027,\u0027.join(traceback.format_exception(*exc_info)))"},{"line_number":4605,"context_line":""},{"line_number":4606,"context_line":"        if rescheduled:"},{"line_number":4607,"context_line":"            self._log_original_error(exc_info, instance_uuid)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_0885555a","line":4604,"range":{"start_line":4562,"start_character":8,"end_line":4604,"end_character":67},"updated":"2019-09-11 19:39:16.000000000","message":"What if we just skipped all of this if the exception is a BuildAbortException? That\u0027s a bit gross though.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8b41215139bc314563de62b6854b99345f64847e","unresolved":false,"context_lines":[{"line_number":4604,"context_line":"                tb\u003d\u0027,\u0027.join(traceback.format_exception(*exc_info)))"},{"line_number":4605,"context_line":""},{"line_number":4606,"context_line":"        if rescheduled:"},{"line_number":4607,"context_line":"            self._log_original_error(exc_info, instance_uuid)"},{"line_number":4608,"context_line":"            compute_utils.add_instance_fault_from_exc(context,"},{"line_number":4609,"context_line":"                    instance, exc_info[1], exc_info\u003dexc_info)"},{"line_number":4610,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":4611,"context_line":"                    \u0027resize.error\u0027, fault\u003dexc_info[1])"},{"line_number":4612,"context_line":"            compute_utils.notify_about_instance_action("},{"line_number":4613,"context_line":"                context, instance, self.host,"},{"line_number":4614,"context_line":"                action\u003dfields.NotificationAction.RESIZE,"},{"line_number":4615,"context_line":"                phase\u003dfields.NotificationPhase.ERROR,"},{"line_number":4616,"context_line":"                exception\u003dexc_info[1],"},{"line_number":4617,"context_line":"                tb\u003d\u0027,\u0027.join(traceback.format_exception(*exc_info)))"},{"line_number":4618,"context_line":"        else:"},{"line_number":4619,"context_line":"            # not re-scheduling"},{"line_number":4620,"context_line":"            six.reraise(*exc_info)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_052c6000","line":4617,"range":{"start_line":4607,"start_character":12,"end_line":4617,"end_character":67},"updated":"2019-09-11 19:22:35.000000000","message":"Hmm, do we need to pull this into a common function and re-use it from where you\u0027re handling BuildAbortException?","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dea2e9ed79aee0a968e9f2301c8e5cdf2c960ff0","unresolved":false,"context_lines":[{"line_number":4604,"context_line":"                tb\u003d\u0027,\u0027.join(traceback.format_exception(*exc_info)))"},{"line_number":4605,"context_line":""},{"line_number":4606,"context_line":"        if rescheduled:"},{"line_number":4607,"context_line":"            self._log_original_error(exc_info, instance_uuid)"},{"line_number":4608,"context_line":"            compute_utils.add_instance_fault_from_exc(context,"},{"line_number":4609,"context_line":"                    instance, exc_info[1], exc_info\u003dexc_info)"},{"line_number":4610,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":4611,"context_line":"                    \u0027resize.error\u0027, fault\u003dexc_info[1])"},{"line_number":4612,"context_line":"            compute_utils.notify_about_instance_action("},{"line_number":4613,"context_line":"                context, instance, self.host,"},{"line_number":4614,"context_line":"                action\u003dfields.NotificationAction.RESIZE,"},{"line_number":4615,"context_line":"                phase\u003dfields.NotificationPhase.ERROR,"},{"line_number":4616,"context_line":"                exception\u003dexc_info[1],"},{"line_number":4617,"context_line":"                tb\u003d\u0027,\u0027.join(traceback.format_exception(*exc_info)))"},{"line_number":4618,"context_line":"        else:"},{"line_number":4619,"context_line":"            # not re-scheduling"},{"line_number":4620,"context_line":"            six.reraise(*exc_info)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_e881d94b","line":4617,"range":{"start_line":4607,"start_character":12,"end_line":4617,"end_character":67},"in_reply_to":"5faad753_052c6000","updated":"2019-09-11 19:39:16.000000000","message":"I don\u0027t particularly care for making this a common method and making sure we handle it in more than one place either though.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1ffd8391b97b7237e6443650b0521ce39478dd06","unresolved":false,"context_lines":[{"line_number":4604,"context_line":"                tb\u003d\u0027,\u0027.join(traceback.format_exception(*exc_info)))"},{"line_number":4605,"context_line":""},{"line_number":4606,"context_line":"        if rescheduled:"},{"line_number":4607,"context_line":"            self._log_original_error(exc_info, instance_uuid)"},{"line_number":4608,"context_line":"            compute_utils.add_instance_fault_from_exc(context,"},{"line_number":4609,"context_line":"                    instance, exc_info[1], exc_info\u003dexc_info)"},{"line_number":4610,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":4611,"context_line":"                    \u0027resize.error\u0027, fault\u003dexc_info[1])"},{"line_number":4612,"context_line":"            compute_utils.notify_about_instance_action("},{"line_number":4613,"context_line":"                context, instance, self.host,"},{"line_number":4614,"context_line":"                action\u003dfields.NotificationAction.RESIZE,"},{"line_number":4615,"context_line":"                phase\u003dfields.NotificationPhase.ERROR,"},{"line_number":4616,"context_line":"                exception\u003dexc_info[1],"},{"line_number":4617,"context_line":"                tb\u003d\u0027,\u0027.join(traceback.format_exception(*exc_info)))"},{"line_number":4618,"context_line":"        else:"},{"line_number":4619,"context_line":"            # not re-scheduling"},{"line_number":4620,"context_line":"            six.reraise(*exc_info)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_6457445a","line":4617,"range":{"start_line":4607,"start_character":12,"end_line":4617,"end_character":67},"in_reply_to":"5faad753_32c1972f","updated":"2019-09-12 13:31:57.000000000","message":"Yup, I\u0027m dumb.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":4604,"context_line":"                tb\u003d\u0027,\u0027.join(traceback.format_exception(*exc_info)))"},{"line_number":4605,"context_line":""},{"line_number":4606,"context_line":"        if rescheduled:"},{"line_number":4607,"context_line":"            self._log_original_error(exc_info, instance_uuid)"},{"line_number":4608,"context_line":"            compute_utils.add_instance_fault_from_exc(context,"},{"line_number":4609,"context_line":"                    instance, exc_info[1], exc_info\u003dexc_info)"},{"line_number":4610,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":4611,"context_line":"                    \u0027resize.error\u0027, fault\u003dexc_info[1])"},{"line_number":4612,"context_line":"            compute_utils.notify_about_instance_action("},{"line_number":4613,"context_line":"                context, instance, self.host,"},{"line_number":4614,"context_line":"                action\u003dfields.NotificationAction.RESIZE,"},{"line_number":4615,"context_line":"                phase\u003dfields.NotificationPhase.ERROR,"},{"line_number":4616,"context_line":"                exception\u003dexc_info[1],"},{"line_number":4617,"context_line":"                tb\u003d\u0027,\u0027.join(traceback.format_exception(*exc_info)))"},{"line_number":4618,"context_line":"        else:"},{"line_number":4619,"context_line":"            # not re-scheduling"},{"line_number":4620,"context_line":"            six.reraise(*exc_info)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_32c1972f","line":4617,"range":{"start_line":4607,"start_character":12,"end_line":4617,"end_character":67},"in_reply_to":"5faad753_e881d94b","updated":"2019-09-12 10:57:36.000000000","message":"This is not called for a non re-schedule case today.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5c6d1a4eae562330822fbfc9d04bf74e32a00b5f","unresolved":false,"context_lines":[{"line_number":4430,"context_line":""},{"line_number":4431,"context_line":"        if not isinstance(request_spec, objects.RequestSpec):"},{"line_number":4432,"context_line":"            # Prior to compute RPC API 5.1 conductor would pass a legacy dict"},{"line_number":4433,"context_line":"            # version of the request spec to compute and since Stein compute"},{"line_number":4434,"context_line":"            # could be sending that back to conductor on reschedule, so if we"},{"line_number":4435,"context_line":"            # got a dict convert it to an object."},{"line_number":4436,"context_line":"            # TODO(mriedem): We can drop this compat code when we only support"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_5e02140d","line":4433,"range":{"start_line":4433,"start_character":69,"end_line":4433,"end_character":76},"updated":"2019-09-12 15:19:55.000000000","message":"nit: computes","commit_id":"d7d51e1064ed345d1dd479cfc489f84b75adda28"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5c6d1a4eae562330822fbfc9d04bf74e32a00b5f","unresolved":false,"context_lines":[{"line_number":4436,"context_line":"            # TODO(mriedem): We can drop this compat code when we only support"},{"line_number":4437,"context_line":"            # compute RPC API \u003e\u003d6.0."},{"line_number":4438,"context_line":"            request_spec \u003d objects.RequestSpec.from_primitives("},{"line_number":4439,"context_line":"                context, request_spec, filter_properties)"},{"line_number":4440,"context_line":"            # We don\u0027t have to set the new flavor on the request spec because"},{"line_number":4441,"context_line":"            # if we got here it was due to a reschedule from the compute and"},{"line_number":4442,"context_line":"            # the request spec would already have the new flavor in it from the"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_c154e500","line":4439,"updated":"2019-09-12 15:19:55.000000000","message":"well, you use a deprecated method. See https://github.com/openstack/nova/blob/3c8af00/nova/objects/request_spec.py#L282-L293\n\nI\u0027m cool with using it now given I don\u0027t want to hold the full series so close to FF, but we are creating some tech debt that would be only fixed after we raise the RPC API version. So honestly, I think we need to bump the version very soon or use another method instead of this legacy one.","commit_id":"d7d51e1064ed345d1dd479cfc489f84b75adda28"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a304929fee59887237b2bb7b8fc0c8ac351acbd","unresolved":false,"context_lines":[{"line_number":4436,"context_line":"            # TODO(mriedem): We can drop this compat code when we only support"},{"line_number":4437,"context_line":"            # compute RPC API \u003e\u003d6.0."},{"line_number":4438,"context_line":"            request_spec \u003d objects.RequestSpec.from_primitives("},{"line_number":4439,"context_line":"                context, request_spec, filter_properties)"},{"line_number":4440,"context_line":"            # We don\u0027t have to set the new flavor on the request spec because"},{"line_number":4441,"context_line":"            # if we got here it was due to a reschedule from the compute and"},{"line_number":4442,"context_line":"            # the request spec would already have the new flavor in it from the"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_c18065c2","line":4439,"in_reply_to":"5faad753_c154e500","updated":"2019-09-12 15:33:18.000000000","message":"Let\u0027s bump RPC to 6.0 in Ussuri!","commit_id":"d7d51e1064ed345d1dd479cfc489f84b75adda28"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5c6d1a4eae562330822fbfc9d04bf74e32a00b5f","unresolved":false,"context_lines":[{"line_number":4446,"context_line":"            self._get_request_group_mapping(request_spec)"},{"line_number":4447,"context_line":""},{"line_number":4448,"context_line":"        if request_group_resource_providers_mapping:"},{"line_number":4449,"context_line":"            self._update_pci_request_spec_with_allocated_interface_name("},{"line_number":4450,"context_line":"                context, instance, request_group_resource_providers_mapping)"},{"line_number":4451,"context_line":""},{"line_number":4452,"context_line":"        limits \u003d filter_properties.get(\u0027limits\u0027, {})"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_0162fdae","line":4449,"range":{"start_line":4449,"start_character":17,"end_line":4449,"end_character":41},"updated":"2019-09-12 15:19:55.000000000","message":"gosh, I so hate having yet another specification just for PCI devices...","commit_id":"d7d51e1064ed345d1dd479cfc489f84b75adda28"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a304929fee59887237b2bb7b8fc0c8ac351acbd","unresolved":false,"context_lines":[{"line_number":4446,"context_line":"            self._get_request_group_mapping(request_spec)"},{"line_number":4447,"context_line":""},{"line_number":4448,"context_line":"        if request_group_resource_providers_mapping:"},{"line_number":4449,"context_line":"            self._update_pci_request_spec_with_allocated_interface_name("},{"line_number":4450,"context_line":"                context, instance, request_group_resource_providers_mapping)"},{"line_number":4451,"context_line":""},{"line_number":4452,"context_line":"        limits \u003d filter_properties.get(\u0027limits\u0027, {})"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_a1544954","line":4449,"range":{"start_line":4449,"start_character":17,"end_line":4449,"end_character":41},"in_reply_to":"5faad753_0162fdae","updated":"2019-09-12 15:33:18.000000000","message":"Yeah, I feel your pain.","commit_id":"d7d51e1064ed345d1dd479cfc489f84b75adda28"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8c008a2d659e7bb8d637df1d2307119da30c2f0","unresolved":false,"context_lines":[{"line_number":6779,"context_line":"            server, self.compute1_rp_uuid, non_qos_port, qos_port,"},{"line_number":6780,"context_line":"            qos_sriov_port)"},{"line_number":6781,"context_line":""},{"line_number":6782,"context_line":"        # The patched compute manager on host2 will raise from"},{"line_number":6783,"context_line":"        # _update_pci_request_spec_with_allocated_interface_name which will"},{"line_number":6784,"context_line":"        # intentionally not trigger a re-schedule even if there is host3 as an"},{"line_number":6785,"context_line":"        # alternate."},{"line_number":6786,"context_line":"        with mock.patch.object("},{"line_number":6787,"context_line":"                self.computes[\u0027host2\u0027].manager,"},{"line_number":6788,"context_line":"                \u0027_update_pci_request_spec_with_allocated_interface_name\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"5faad753_24906ced","line":6785,"range":{"start_line":6782,"start_character":8,"end_line":6785,"end_character":20},"updated":"2019-09-12 13:43:02.000000000","message":"Good comment.","commit_id":"5b22fbc31c359786d7db6f96c3159b69e673d7ae"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8c008a2d659e7bb8d637df1d2307119da30c2f0","unresolved":false,"context_lines":[{"line_number":6785,"context_line":"        # alternate."},{"line_number":6786,"context_line":"        with mock.patch.object("},{"line_number":6787,"context_line":"                self.computes[\u0027host2\u0027].manager,"},{"line_number":6788,"context_line":"                \u0027_update_pci_request_spec_with_allocated_interface_name\u0027,"},{"line_number":6789,"context_line":"                side_effect\u003dexception.BuildAbortException("},{"line_number":6790,"context_line":"                    instance_uuid\u003dserver[\u0027id\u0027], reason\u003d\u0027Testing\u0027)):"},{"line_number":6791,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], {\u0027migrate\u0027: None})"}],"source_content_type":"text/x-python","patch_set":21,"id":"5faad753_24fb8c47","line":6788,"updated":"2019-09-12 13:43:02.000000000","message":"It would be nice if we could avoid mocking this and actually trigger a real BuildAbortException due to one of the two conditions in there like if there is not exactly one provider or the device RP name is not what we\u0027d expect. I\u0027m not sure how easy it is to do that with the setup in these tests though so it\u0027s fine for a follow up if you can make that happen.","commit_id":"5b22fbc31c359786d7db6f96c3159b69e673d7ae"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a304929fee59887237b2bb7b8fc0c8ac351acbd","unresolved":false,"context_lines":[{"line_number":6785,"context_line":"        # alternate."},{"line_number":6786,"context_line":"        with mock.patch.object("},{"line_number":6787,"context_line":"                self.computes[\u0027host2\u0027].manager,"},{"line_number":6788,"context_line":"                \u0027_update_pci_request_spec_with_allocated_interface_name\u0027,"},{"line_number":6789,"context_line":"                side_effect\u003dexception.BuildAbortException("},{"line_number":6790,"context_line":"                    instance_uuid\u003dserver[\u0027id\u0027], reason\u003d\u0027Testing\u0027)):"},{"line_number":6791,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], {\u0027migrate\u0027: None})"}],"source_content_type":"text/x-python","patch_set":21,"id":"5faad753_21c3795f","line":6788,"in_reply_to":"5faad753_24fb8c47","updated":"2019-09-12 15:33:18.000000000","message":"More than one providers for a group would be a software error in the group mapping algo in nova today. The wrongly named RP in placement would be a neutron software error. As the second is something we simulate in the these tests I think I can make it happen.","commit_id":"5b22fbc31c359786d7db6f96c3159b69e673d7ae"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8c008a2d659e7bb8d637df1d2307119da30c2f0","unresolved":false,"context_lines":[{"line_number":6795,"context_line":"                 \u0027status\u0027: \u0027ERROR\u0027})"},{"line_number":6796,"context_line":"            self._wait_for_migration_status(server, [\u0027error\u0027])"},{"line_number":6797,"context_line":""},{"line_number":6798,"context_line":"        self.assertIn("},{"line_number":6799,"context_line":"            \u0027Build of instance %s aborted\u0027 % server[\u0027id\u0027],"},{"line_number":6800,"context_line":"            server[\u0027fault\u0027][\u0027message\u0027])"},{"line_number":6801,"context_line":""},{"line_number":6802,"context_line":"        self._wait_for_action_fail_completion("},{"line_number":6803,"context_line":"            server, instance_actions.MIGRATE, \u0027compute_prep_resize\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"5faad753_6478a4c3","line":6800,"range":{"start_line":6798,"start_character":8,"end_line":6800,"end_character":39},"updated":"2019-09-12 13:43:02.000000000","message":"This is racy I think. We\u0027re waiting for the server status to go to ERROR which happens here:\n\nhttps://github.com/openstack/nova/blob/7a18209a81539217a95ab7daad6bc67002768950/nova/compute/manager.py#L4476\n\nAnd we\u0027re waiting for the migration status to go to error which happens here:\n\nhttps://github.com/openstack/nova/blob/7a18209a81539217a95ab7daad6bc67002768950/nova/compute/manager.py#L4478\n\nBut you\u0027re expecting the fault to be set which happens later here:\n\nhttps://github.com/openstack/nova/blob/7a18209a81539217a95ab7daad6bc67002768950/nova/compute/manager.py#L4454\n\nSo what you should probably do is also wait for the task_state to be None above since that happens after the fault is recorded:\n\nhttps://github.com/openstack/nova/blob/7a18209a81539217a95ab7daad6bc67002768950/nova/compute/manager.py#L4452\n\nKnow how I know about this kind of race? Because I\u0027ve hit the same thing before in functional tests I\u0027ve written for this same kind of resize code. :)\n\n-1 for this.","commit_id":"5b22fbc31c359786d7db6f96c3159b69e673d7ae"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3da1d39bc1dce576cda2b6a7e593f25e5c74ba9e","unresolved":false,"context_lines":[{"line_number":6795,"context_line":"                 \u0027status\u0027: \u0027ERROR\u0027})"},{"line_number":6796,"context_line":"            self._wait_for_migration_status(server, [\u0027error\u0027])"},{"line_number":6797,"context_line":""},{"line_number":6798,"context_line":"        self.assertIn("},{"line_number":6799,"context_line":"            \u0027Build of instance %s aborted\u0027 % server[\u0027id\u0027],"},{"line_number":6800,"context_line":"            server[\u0027fault\u0027][\u0027message\u0027])"},{"line_number":6801,"context_line":""},{"line_number":6802,"context_line":"        self._wait_for_action_fail_completion("},{"line_number":6803,"context_line":"            server, instance_actions.MIGRATE, \u0027compute_prep_resize\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"5faad753_aaa2e3fa","line":6800,"range":{"start_line":6798,"start_character":8,"end_line":6800,"end_character":39},"in_reply_to":"5faad753_6478a4c3","updated":"2019-09-12 14:38:20.000000000","message":"Done","commit_id":"5b22fbc31c359786d7db6f96c3159b69e673d7ae"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a304929fee59887237b2bb7b8fc0c8ac351acbd","unresolved":false,"context_lines":[{"line_number":6795,"context_line":"                 \u0027status\u0027: \u0027ERROR\u0027})"},{"line_number":6796,"context_line":"            self._wait_for_migration_status(server, [\u0027error\u0027])"},{"line_number":6797,"context_line":""},{"line_number":6798,"context_line":"        self.assertIn("},{"line_number":6799,"context_line":"            \u0027Build of instance %s aborted\u0027 % server[\u0027id\u0027],"},{"line_number":6800,"context_line":"            server[\u0027fault\u0027][\u0027message\u0027])"},{"line_number":6801,"context_line":""},{"line_number":6802,"context_line":"        self._wait_for_action_fail_completion("},{"line_number":6803,"context_line":"            server, instance_actions.MIGRATE, \u0027compute_prep_resize\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"5faad753_61ee51b5","line":6800,"range":{"start_line":6798,"start_character":8,"end_line":6800,"end_character":39},"in_reply_to":"5faad753_aaa2e3fa","updated":"2019-09-12 15:33:18.000000000","message":"Nice catch! Thanks for fixing it up","commit_id":"5b22fbc31c359786d7db6f96c3159b69e673d7ae"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8c008a2d659e7bb8d637df1d2307119da30c2f0","unresolved":false,"context_lines":[{"line_number":6803,"context_line":"            server, instance_actions.MIGRATE, \u0027compute_prep_resize\u0027,"},{"line_number":6804,"context_line":"            self.admin_api)"},{"line_number":6805,"context_line":""},{"line_number":6806,"context_line":"        fake_notifier.wait_for_versioned_notifications("},{"line_number":6807,"context_line":"            \u0027instance.resize_prep.end\u0027)"},{"line_number":6808,"context_line":"        fake_notifier.wait_for_versioned_notifications("},{"line_number":6809,"context_line":"            \u0027compute.exception\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5faad753_0421b0b0","line":6806,"updated":"2019-09-12 13:43:02.000000000","message":"OK and this is https://github.com/openstack/nova/blob/7a18209a81539217a95ab7daad6bc67002768950/nova/compute/manager.py#L4498","commit_id":"5b22fbc31c359786d7db6f96c3159b69e673d7ae"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8c008a2d659e7bb8d637df1d2307119da30c2f0","unresolved":false,"context_lines":[{"line_number":6805,"context_line":""},{"line_number":6806,"context_line":"        fake_notifier.wait_for_versioned_notifications("},{"line_number":6807,"context_line":"            \u0027instance.resize_prep.end\u0027)"},{"line_number":6808,"context_line":"        fake_notifier.wait_for_versioned_notifications("},{"line_number":6809,"context_line":"            \u0027compute.exception\u0027)"},{"line_number":6810,"context_line":""},{"line_number":6811,"context_line":"        migration_uuid \u003d self.get_migration_uuid_for_instance(server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":21,"id":"5faad753_640f4437","line":6808,"updated":"2019-09-12 13:43:02.000000000","message":"And this is https://github.com/openstack/nova/blob/7a18209a81539217a95ab7daad6bc67002768950/nova/compute/manager.py#L4451","commit_id":"5b22fbc31c359786d7db6f96c3159b69e673d7ae"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5c6d1a4eae562330822fbfc9d04bf74e32a00b5f","unresolved":false,"context_lines":[{"line_number":6787,"context_line":"                self.computes[\u0027host2\u0027].manager,"},{"line_number":6788,"context_line":"                \u0027_update_pci_request_spec_with_allocated_interface_name\u0027,"},{"line_number":6789,"context_line":"                side_effect\u003dexception.BuildAbortException("},{"line_number":6790,"context_line":"                    instance_uuid\u003dserver[\u0027id\u0027], reason\u003d\u0027Testing\u0027)):"},{"line_number":6791,"context_line":"            self.api.post_server_action(server[\u0027id\u0027], {\u0027migrate\u0027: None})"},{"line_number":6792,"context_line":"            server \u003d self._wait_for_server_parameter("},{"line_number":6793,"context_line":"                self.api, server,"}],"source_content_type":"text/x-python","patch_set":22,"id":"5faad753_c1daa549","line":6790,"updated":"2019-09-12 15:19:55.000000000","message":"*nods*","commit_id":"d7d51e1064ed345d1dd479cfc489f84b75adda28"}],"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":"8b41215139bc314563de62b6854b99345f64847e","unresolved":false,"context_lines":[{"line_number":9230,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":9231,"context_line":"            self.context, host\u003dself.compute.host,"},{"line_number":9232,"context_line":"            expected_attrs\u003d[\u0027system_metadata\u0027, \u0027flavor\u0027])"},{"line_number":9233,"context_line":"        migration \u003d mock.MagicMock(spec\u003d\u0027nova.objects.Migration\u0027)"},{"line_number":9234,"context_line":"        legacy_request_spec \u003d objects.RequestSpec().obj_to_primitive()"},{"line_number":9235,"context_line":"        mock_get_mapping.return_value \u003d {}"},{"line_number":9236,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_a5ff8c32","line":9233,"updated":"2019-09-11 19:22:35.000000000","message":"Here and below - why not use a real Migration object?","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":9230,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":9231,"context_line":"            self.context, host\u003dself.compute.host,"},{"line_number":9232,"context_line":"            expected_attrs\u003d[\u0027system_metadata\u0027, \u0027flavor\u0027])"},{"line_number":9233,"context_line":"        migration \u003d mock.MagicMock(spec\u003d\u0027nova.objects.Migration\u0027)"},{"line_number":9234,"context_line":"        legacy_request_spec \u003d objects.RequestSpec().obj_to_primitive()"},{"line_number":9235,"context_line":"        mock_get_mapping.return_value \u003d {}"},{"line_number":9236,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_95e4f4e1","line":9233,"in_reply_to":"5faad753_a5ff8c32","updated":"2019-09-12 10:57:36.000000000","message":"Done","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8b41215139bc314563de62b6854b99345f64847e","unresolved":false,"context_lines":[{"line_number":9231,"context_line":"            self.context, host\u003dself.compute.host,"},{"line_number":9232,"context_line":"            expected_attrs\u003d[\u0027system_metadata\u0027, \u0027flavor\u0027])"},{"line_number":9233,"context_line":"        migration \u003d mock.MagicMock(spec\u003d\u0027nova.objects.Migration\u0027)"},{"line_number":9234,"context_line":"        legacy_request_spec \u003d objects.RequestSpec().obj_to_primitive()"},{"line_number":9235,"context_line":"        mock_get_mapping.return_value \u003d {}"},{"line_number":9236,"context_line":""},{"line_number":9237,"context_line":"        self.compute._prep_resize("}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_c583a8cb","line":9234,"range":{"start_line":9234,"start_character":52,"end_line":9234,"end_character":68},"updated":"2019-09-11 19:22:35.000000000","message":"Normally we\u0027d use to_legacy_request_spec_dict - that\u0027s what the compute RPC API is doing. It looks like you get lucky though because from_primitives and the request spec itself are very forgiving about unset fields and allowing None.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":9231,"context_line":"            self.context, host\u003dself.compute.host,"},{"line_number":9232,"context_line":"            expected_attrs\u003d[\u0027system_metadata\u0027, \u0027flavor\u0027])"},{"line_number":9233,"context_line":"        migration \u003d mock.MagicMock(spec\u003d\u0027nova.objects.Migration\u0027)"},{"line_number":9234,"context_line":"        legacy_request_spec \u003d objects.RequestSpec().obj_to_primitive()"},{"line_number":9235,"context_line":"        mock_get_mapping.return_value \u003d {}"},{"line_number":9236,"context_line":""},{"line_number":9237,"context_line":"        self.compute._prep_resize("}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_b5e9f0b7","line":9234,"range":{"start_line":9234,"start_character":52,"end_line":9234,"end_character":68},"in_reply_to":"5faad753_c583a8cb","updated":"2019-09-12 10:57:36.000000000","message":"Done","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8b41215139bc314563de62b6854b99345f64847e","unresolved":false,"context_lines":[{"line_number":9332,"context_line":"                \u0027_notify_about_instance_usage\u0027)"},{"line_number":9333,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_resize_prep_instance\u0027)"},{"line_number":9334,"context_line":"    def test_prep_resize_update_pci_request_fails("},{"line_number":9335,"context_line":"            self, mock_notify, mock_notify_usage, mock_notify_exists,"},{"line_number":9336,"context_line":"            mock_update_pci, mock_save, mock_claim, mock_resize, mock_fault,"},{"line_number":9337,"context_line":"            mock_revert):"},{"line_number":9338,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_c5eac873","line":9335,"range":{"start_line":9335,"start_character":18,"end_line":9335,"end_character":68},"updated":"2019-09-11 19:22:35.000000000","message":"Hmm, you don\u0027t assert that these are called and I\u0027m not sure we hit all of them for the end/error case.","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d8883d99ec76faa41cd03393a9e584d950ba8da3","unresolved":false,"context_lines":[{"line_number":9332,"context_line":"                \u0027_notify_about_instance_usage\u0027)"},{"line_number":9333,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_resize_prep_instance\u0027)"},{"line_number":9334,"context_line":"    def test_prep_resize_update_pci_request_fails("},{"line_number":9335,"context_line":"            self, mock_notify, mock_notify_usage, mock_notify_exists,"},{"line_number":9336,"context_line":"            mock_update_pci, mock_save, mock_claim, mock_resize, mock_fault,"},{"line_number":9337,"context_line":"            mock_revert):"},{"line_number":9338,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5faad753_f853dd15","line":9335,"range":{"start_line":9335,"start_character":18,"end_line":9335,"end_character":68},"in_reply_to":"5faad753_c5eac873","updated":"2019-09-12 10:57:36.000000000","message":"Done","commit_id":"bb8dc698f168f04b773618c5a66ad52976cafed0"}]}
