)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":true,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"  This has the side effect of making the fix work only for instances"},{"line_number":17,"context_line":"  created *after* this patch has been applied. It\u0027s not ideal, but"},{"line_number":18,"context_line":"  there does not appear to be a better way."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"* Call setup_networks_on_host() within the instance_claim context."},{"line_number":21,"context_line":"  This means the instance\u0027s pci_devices are updated when we call it,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"d981c64a_619ccabd","line":18,"updated":"2021-04-15 11:11:46.000000000","message":"Online migration to populate the field? More on this in the release note.","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":true,"context_lines":[{"line_number":21,"context_line":"  This means the instance\u0027s pci_devices are updated when we call it,"},{"line_number":22,"context_line":"  allowing us to get the pci_slot information from them."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"* With the two previous changes in place, we can figure out the port\u0027s"},{"line_number":25,"context_line":"  new pci_slot in _update_port_binding_for_instance()."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Closes: bug 1851545"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9b996b2f_65416297","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":2},"updated":"2021-04-15 11:11:46.000000000","message":"Drop?","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0befefe8b74387084bd761dfa06cc5360af9c3e1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"  This means the instance\u0027s pci_devices are updated when we call it,"},{"line_number":22,"context_line":"  allowing us to get the pci_slot information from them."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"* With the two previous changes in place, we can figure out the port\u0027s"},{"line_number":25,"context_line":"  new pci_slot in _update_port_binding_for_instance()."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Closes: bug 1851545"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bf46ad7f_53ec6c90","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":2},"in_reply_to":"9b996b2f_65416297","updated":"2021-04-23 14:07:19.000000000","message":"Done","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"}],"nova/compute/manager.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":false,"context_lines":[{"line_number":6565,"context_line":"                    LOG.exception(\u0027Failure getting accelerator requests \u0027"},{"line_number":6566,"context_line":"                                  \u0027with the exception: %s\u0027, exc,"},{"line_number":6567,"context_line":"                                  instance\u003dinstance)"},{"line_number":6568,"context_line":"                    self._build_resources_cleanup(instance, None)"},{"line_number":6569,"context_line":"                    raise"},{"line_number":6570,"context_line":""},{"line_number":6571,"context_line":"            with self.rt.instance_claim(context, instance, node, allocations,"}],"source_content_type":"text/x-python","patch_set":3,"id":"c7f8de71_9f74d5f1","line":6568,"range":{"start_line":6568,"start_character":60,"end_line":6568,"end_character":64},"updated":"2021-04-15 11:11:46.000000000","message":"note to self: plenty of remaining examples of us calling this method with this argument !\u003d None, so no need to change that","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":false,"context_lines":[{"line_number":6574,"context_line":"                    context, instance, self.host,"},{"line_number":6575,"context_line":"                    provider_mappings\u003dprovider_mappings)"},{"line_number":6576,"context_line":"                network_info \u003d self.network_api.get_instance_nw_info("},{"line_number":6577,"context_line":"                    context, instance)"},{"line_number":6578,"context_line":""},{"line_number":6579,"context_line":"                self.driver.spawn(context, instance, image_meta,"},{"line_number":6580,"context_line":"                                  injected_files\u003d[],"}],"source_content_type":"text/x-python","patch_set":3,"id":"67872650_d546ebe4","line":6577,"updated":"2021-04-15 11:11:46.000000000","message":"note to self: \u0027_get_bound_arq_resources\u0027 doesn\u0027t appear to depend on the instance having its network configured, so no issues changing the ordering of this","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"}],"nova/network/neutron.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":false,"context_lines":[{"line_number":2102,"context_line":"            if request_net.port_id:"},{"line_number":2103,"context_line":"                # InstancePCIRequest.requester_id is semantically linked"},{"line_number":2104,"context_line":"                # to a port with a resource_request."},{"line_number":2105,"context_line":"                requester_id \u003d request_net.port_id"},{"line_number":2106,"context_line":"                (vnic_type, trusted, network_id, resource_request,"},{"line_number":2107,"context_line":"                 port_numa_policy) \u003d self._get_port_vnic_info("},{"line_number":2108,"context_line":"                     context, neutron, request_net.port_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f410356_2cf6c6b5","line":2105,"updated":"2021-04-15 11:11:46.000000000","message":"I was going to ask what happens if you only request a network, but you\u0027re not able to do that for SR-IOV devices. You must create the port.","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":false,"context_lines":[{"line_number":3357,"context_line":"                  migration.get(\u0027status\u0027) \u003d\u003d \u0027reverted\u0027)"},{"line_number":3358,"context_line":"        return instance.migration_context.get_pci_mapping_for_migration(revert)"},{"line_number":3359,"context_line":""},{"line_number":3360,"context_line":"    def _get_port_pci_slot(self, context, instance, port):"},{"line_number":3361,"context_line":"        \"\"\"Find the PCI address of the device corresponding to the port."},{"line_number":3362,"context_line":"        Assumes the port is an SRIOV one."},{"line_number":3363,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"eec49808_383fbcb0","line":3360,"range":{"start_line":3360,"start_character":32,"end_line":3360,"end_character":56},"updated":"2021-04-15 11:11:46.000000000","message":"Was going to ask for type hints, but we don\u0027t have anything in this file yet so nvm","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":true,"context_lines":[{"line_number":3364,"context_line":"        :param context: The request context."},{"line_number":3365,"context_line":"        :param instance: The instance to which the port is attached."},{"line_number":3366,"context_line":"        :param port: The Neutron port, as obtained from the Neutron API in"},{"line_number":3367,"context_line":"                     JSON form."},{"line_number":3368,"context_line":"        \"\"\""},{"line_number":3369,"context_line":"        # Find the port\u0027s PCIRequest, or return None"},{"line_number":3370,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7398f190_606b66c7","line":3367,"range":{"start_line":3367,"start_character":12,"end_line":3367,"end_character":21},"updated":"2021-04-15 11:11:46.000000000","message":"nit","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0befefe8b74387084bd761dfa06cc5360af9c3e1","unresolved":false,"context_lines":[{"line_number":3364,"context_line":"        :param context: The request context."},{"line_number":3365,"context_line":"        :param instance: The instance to which the port is attached."},{"line_number":3366,"context_line":"        :param port: The Neutron port, as obtained from the Neutron API in"},{"line_number":3367,"context_line":"                     JSON form."},{"line_number":3368,"context_line":"        \"\"\""},{"line_number":3369,"context_line":"        # Find the port\u0027s PCIRequest, or return None"},{"line_number":3370,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"29b25562_3510bf7a","line":3367,"range":{"start_line":3367,"start_character":12,"end_line":3367,"end_character":21},"in_reply_to":"7398f190_606b66c7","updated":"2021-04-23 14:07:19.000000000","message":"Done","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":true,"context_lines":[{"line_number":3365,"context_line":"        :param instance: The instance to which the port is attached."},{"line_number":3366,"context_line":"        :param port: The Neutron port, as obtained from the Neutron API in"},{"line_number":3367,"context_line":"                     JSON form."},{"line_number":3368,"context_line":"        \"\"\""},{"line_number":3369,"context_line":"        # Find the port\u0027s PCIRequest, or return None"},{"line_number":3370,"context_line":"        try:"},{"line_number":3371,"context_line":"            request \u003d next(r for r in instance.pci_requests.requests"}],"source_content_type":"text/x-python","patch_set":3,"id":"f7db2c60_1112b8d6","line":3368,"updated":"2021-04-15 11:11:46.000000000","message":":returns: ...","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0befefe8b74387084bd761dfa06cc5360af9c3e1","unresolved":false,"context_lines":[{"line_number":3365,"context_line":"        :param instance: The instance to which the port is attached."},{"line_number":3366,"context_line":"        :param port: The Neutron port, as obtained from the Neutron API in"},{"line_number":3367,"context_line":"                     JSON form."},{"line_number":3368,"context_line":"        \"\"\""},{"line_number":3369,"context_line":"        # Find the port\u0027s PCIRequest, or return None"},{"line_number":3370,"context_line":"        try:"},{"line_number":3371,"context_line":"            request \u003d next(r for r in instance.pci_requests.requests"}],"source_content_type":"text/x-python","patch_set":3,"id":"423e3489_4d3d4805","line":3368,"in_reply_to":"f7db2c60_1112b8d6","updated":"2021-04-23 14:07:19.000000000","message":"Done","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":true,"context_lines":[{"line_number":3373,"context_line":"        except StopIteration:"},{"line_number":3374,"context_line":"            LOG.debug(\u0027No PCI request found for port %s\u0027, port[\u0027id\u0027],"},{"line_number":3375,"context_line":"                      instance\u003dinstance)"},{"line_number":3376,"context_line":"            return None"},{"line_number":3377,"context_line":"        # Find the request\u0027s device, or return None"},{"line_number":3378,"context_line":"        try:"},{"line_number":3379,"context_line":"            device \u003d next(d for d in instance.pci_devices"}],"source_content_type":"text/x-python","patch_set":3,"id":"541606be_a1bb8070","line":3376,"updated":"2021-04-15 11:11:46.000000000","message":"This reads like sean-k-mooney code 😄 \n\n  for request in instance.pci_requests.requests:\n      if request.requester_id \u003d\u003d port[\u0027id\u0027]:\n          break\n  else:\n      LOG.debug(\n          \u0027No PCI request found for port %s\u0027, port[\u0027id\u0027],\n          instance\u003dinstance)\n      return None\n\nWould do the same thing and would be more Pythonic/typical of nova, IMO. Ditto below. Not quite as short though","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0befefe8b74387084bd761dfa06cc5360af9c3e1","unresolved":false,"context_lines":[{"line_number":3373,"context_line":"        except StopIteration:"},{"line_number":3374,"context_line":"            LOG.debug(\u0027No PCI request found for port %s\u0027, port[\u0027id\u0027],"},{"line_number":3375,"context_line":"                      instance\u003dinstance)"},{"line_number":3376,"context_line":"            return None"},{"line_number":3377,"context_line":"        # Find the request\u0027s device, or return None"},{"line_number":3378,"context_line":"        try:"},{"line_number":3379,"context_line":"            device \u003d next(d for d in instance.pci_devices"}],"source_content_type":"text/x-python","patch_set":3,"id":"6fa6d51c_b54ba76c","line":3376,"in_reply_to":"541606be_a1bb8070","updated":"2021-04-23 14:07:19.000000000","message":"Done","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":true,"context_lines":[{"line_number":3426,"context_line":"            # as in an unshelve operation."},{"line_number":3427,"context_line":"            vnic_type \u003d p.get(\u0027binding:vnic_type\u0027)"},{"line_number":3428,"context_line":"            if vnic_type in network_model.VNIC_TYPES_SRIOV:"},{"line_number":3429,"context_line":"                if migration is not None:"},{"line_number":3430,"context_line":"                    if not migration.is_live_migration:"},{"line_number":3431,"context_line":"                        # Note(adrianc): for live migration binding profile was"},{"line_number":3432,"context_line":"                        # already updated in conductor when calling"}],"source_content_type":"text/x-python","patch_set":3,"id":"14ade940_61fa79cb","line":3429,"updated":"2021-04-15 11:11:46.000000000","message":"This is only for...live migrations?\n\n  if migration is not None:  # live migration case","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0befefe8b74387084bd761dfa06cc5360af9c3e1","unresolved":false,"context_lines":[{"line_number":3426,"context_line":"            # as in an unshelve operation."},{"line_number":3427,"context_line":"            vnic_type \u003d p.get(\u0027binding:vnic_type\u0027)"},{"line_number":3428,"context_line":"            if vnic_type in network_model.VNIC_TYPES_SRIOV:"},{"line_number":3429,"context_line":"                if migration is not None:"},{"line_number":3430,"context_line":"                    if not migration.is_live_migration:"},{"line_number":3431,"context_line":"                        # Note(adrianc): for live migration binding profile was"},{"line_number":3432,"context_line":"                        # already updated in conductor when calling"}],"source_content_type":"text/x-python","patch_set":3,"id":"950cb5ef_c8301b27","line":3429,"in_reply_to":"14ade940_61fa79cb","updated":"2021-04-23 14:07:19.000000000","message":"Done","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":true,"context_lines":[{"line_number":3445,"context_line":"                            raise exception.PortUpdateFailed(port_id\u003dp[\u0027id\u0027],"},{"line_number":3446,"context_line":"                                reason\u003d_(\"Unable to correlate PCI slot %s\") %"},{"line_number":3447,"context_line":"                                         pci_slot)"},{"line_number":3448,"context_line":"                else:"},{"line_number":3449,"context_line":"                    pci_slot \u003d self._get_port_pci_slot(context, instance, p)"},{"line_number":3450,"context_line":"                    if pci_slot:"},{"line_number":3451,"context_line":"                        binding_profile.update({\u0027pci_slot\u0027: pci_slot})"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ff25cc0_8e4c8451","line":3448,"updated":"2021-04-15 11:11:46.000000000","message":"and this is for everything else?\n\n  else:  # everything else","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0befefe8b74387084bd761dfa06cc5360af9c3e1","unresolved":false,"context_lines":[{"line_number":3445,"context_line":"                            raise exception.PortUpdateFailed(port_id\u003dp[\u0027id\u0027],"},{"line_number":3446,"context_line":"                                reason\u003d_(\"Unable to correlate PCI slot %s\") %"},{"line_number":3447,"context_line":"                                         pci_slot)"},{"line_number":3448,"context_line":"                else:"},{"line_number":3449,"context_line":"                    pci_slot \u003d self._get_port_pci_slot(context, instance, p)"},{"line_number":3450,"context_line":"                    if pci_slot:"},{"line_number":3451,"context_line":"                        binding_profile.update({\u0027pci_slot\u0027: pci_slot})"}],"source_content_type":"text/x-python","patch_set":3,"id":"d5318d2c_4ba03268","line":3448,"in_reply_to":"7ff25cc0_8e4c8451","updated":"2021-04-23 14:07:19.000000000","message":"Done","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6bbc1f261850e1402cc161d3767bedeb8a9560f","unresolved":true,"context_lines":[{"line_number":2102,"context_line":"            if request_net.port_id:"},{"line_number":2103,"context_line":"                # InstancePCIRequest.requester_id is semantically linked"},{"line_number":2104,"context_line":"                # to a port with a resource_request."},{"line_number":2105,"context_line":"                requester_id \u003d request_net.port_id"},{"line_number":2106,"context_line":"                (vnic_type, trusted, network_id, resource_request,"},{"line_number":2107,"context_line":"                 port_numa_policy) \u003d self._get_port_vnic_info("},{"line_number":2108,"context_line":"                     context, neutron, request_net.port_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5e5d0891_033860ff","line":2105,"updated":"2021-04-30 15:26:31.000000000","message":"hm, I had to do the same in this WIP patch too https://review.opendev.org/c/openstack/nova/+/787208/1/nova/network/neutron.py#2144 :)","commit_id":"00f1d4757e503bb9807d7a8d7035c061a97db983"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"71c9fa3d601b01acad9487f70e19f2991b5d9593","unresolved":true,"context_lines":[{"line_number":3370,"context_line":"        # Find the port\u0027s PCIRequest, or return None"},{"line_number":3371,"context_line":"        for r in instance.pci_requests.requests:"},{"line_number":3372,"context_line":"            if r.requester_id \u003d\u003d port[\u0027id\u0027]:"},{"line_number":3373,"context_line":"                request \u003d r"},{"line_number":3374,"context_line":"                break"},{"line_number":3375,"context_line":"        else:"},{"line_number":3376,"context_line":"            LOG.debug(\u0027No PCI request found for port %s\u0027, port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"121a0af6_b2c94476","line":3373,"updated":"2021-04-27 17:00:18.000000000","message":"nit: You don\u0027t need to do this if you rename the loop variable to \u0027request\u0027. loop variables exist outside of the scope of the loop in Python. It is weird though, I\u0027ll admit.","commit_id":"00f1d4757e503bb9807d7a8d7035c061a97db983"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c7f09f0d0f7936666a09385c0a5805f6e8f19f5e","unresolved":true,"context_lines":[{"line_number":3370,"context_line":"        # Find the port\u0027s PCIRequest, or return None"},{"line_number":3371,"context_line":"        for r in instance.pci_requests.requests:"},{"line_number":3372,"context_line":"            if r.requester_id \u003d\u003d port[\u0027id\u0027]:"},{"line_number":3373,"context_line":"                request \u003d r"},{"line_number":3374,"context_line":"                break"},{"line_number":3375,"context_line":"        else:"},{"line_number":3376,"context_line":"            LOG.debug(\u0027No PCI request found for port %s\u0027, port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff98b506_58526a0c","line":3373,"in_reply_to":"121a0af6_b2c94476","updated":"2021-04-28 13:48:45.000000000","message":"that is becasue loops, ifs and and with statement do not create create vairable scopes.\n\nso yes you can but its not something many people are aware of and it can leed to wrong behavior if the loop never iterates and you assume the variable is set\nlater.\n\nif  instance.pci_requests.requests was empty r/request would never be defined.\n\ngranted that would cause use to take the else branch of the for loop in this case but without adding that explcitly its ver easy to intoduce a bug so i dont relly like using\nloop variable outside the loop in general unless you are very carful.","commit_id":"00f1d4757e503bb9807d7a8d7035c061a97db983"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"71c9fa3d601b01acad9487f70e19f2991b5d9593","unresolved":true,"context_lines":[{"line_number":3450,"context_line":"                            raise exception.PortUpdateFailed(port_id\u003dp[\u0027id\u0027],"},{"line_number":3451,"context_line":"                                reason\u003d_(\"Unable to correlate PCI slot %s\") %"},{"line_number":3452,"context_line":"                                         pci_slot)"},{"line_number":3453,"context_line":"                # NOTE(artom) If migration is None, this is an unshevle, and we"},{"line_number":3454,"context_line":"                # need to figure out the pci_slot from the InstancePCIRequest"},{"line_number":3455,"context_line":"                # and PciDevice objects."},{"line_number":3456,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"66a8d486_81e24795","line":3453,"range":{"start_line":3453,"start_character":63,"end_line":3453,"end_character":71},"updated":"2021-04-27 17:00:18.000000000","message":"unshelve","commit_id":"00f1d4757e503bb9807d7a8d7035c061a97db983"}],"nova/tests/functional/libvirt/test_pci_sriov_servers.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c6bbc1f261850e1402cc161d3767bedeb8a9560f","unresolved":true,"context_lines":[{"line_number":359,"context_line":"        self.assertIn(\u0027NoValidHost\u0027, str(ex))"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _test_move_operation_with_neutron(self, move_operation,"},{"line_number":362,"context_line":"                                          expect_fail\u003dFalse):"},{"line_number":363,"context_line":"        # The purpose here is to force an observable PCI slot update when"},{"line_number":364,"context_line":"        # moving from source to dest. This is accomplished by having a single"},{"line_number":365,"context_line":"        # PCI device on the source, 2 PCI devices on the test, and relying on"}],"source_content_type":"text/x-python","patch_set":4,"id":"b279c28e_c2415887","line":362,"range":{"start_line":362,"start_character":42,"end_line":362,"end_character":59},"updated":"2021-04-30 15:26:31.000000000","message":"this is unused now.","commit_id":"00f1d4757e503bb9807d7a8d7035c061a97db983"}],"releasenotes/notes/bug-1851545-781c358939d96cea.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"77da8b50f46b78633e42d46833fe4a693d1682dc","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    .. important:: Constraints in the fix\u0027s implementation mean that it only"},{"line_number":10,"context_line":"      applies to instances booted **after** it has been applied. Existing"},{"line_number":11,"context_line":"      instances will still experience bug 1851545 after being shelved and"},{"line_number":12,"context_line":"      unshelved, even with the fix applied."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3bce856a_40902a34","line":12,"updated":"2021-04-15 11:11:46.000000000","message":"Per commit message, could we add an online migration to populate this? I guess we need some way to map the InstancePCIRequest object to the neutron port associated with it. This is easy for instances with a single SR-IOV port, which I suspect will be a lot of them. For instances with multiple SR-IOV ports, I think we could look at the PCI device information in the port binding, find the matching host \u0027PciDevice\u0027 object for the port binding, and then find the matching \u0027InstancePCIRequest\u0027 object based on the \u0027PciDevice.request_id\u0027 field. If we cache the port binding information from neutron anywhere, it might even be possible do this entirely offline?","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0befefe8b74387084bd761dfa06cc5360af9c3e1","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    .. important:: Constraints in the fix\u0027s implementation mean that it only"},{"line_number":10,"context_line":"      applies to instances booted **after** it has been applied. Existing"},{"line_number":11,"context_line":"      instances will still experience bug 1851545 after being shelved and"},{"line_number":12,"context_line":"      unshelved, even with the fix applied."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"8c6d24a6_c8e4195e","line":12,"in_reply_to":"3bce856a_40902a34","updated":"2021-04-23 14:07:19.000000000","message":"So I\u0027ve been thinking about this.\n\nFirst, let\u0027s say right off the bat that an online data migration makes backporting this impossible.\n\nSecond, the data migration would have to find all ACTIVE instances with SRIOV ports, and update the InstancePCIRequest.requester_id to the port UUID. Even for instances with multiple ports, we can probably correlate by pci_slot or something, so that\u0027s doable. But there\u0027s an open question for instances that are not ACTIVE. For instance, SHELVED(_OFFLOADED) instances cannot be data-migrated in such a fashion. Or for instances in MIGRATING, we might run into race conditions depending on whether we run the migration before or after we\u0027ve updated the port bindings.\n\nSo since there are open questions about the data migration, I\u0027d like to propose that we keep this fix patch separate (and backportable!), and hash out the data migration in a separate patch on top.","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"71c9fa3d601b01acad9487f70e19f2991b5d9593","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    .. important:: Constraints in the fix\u0027s implementation mean that it only"},{"line_number":10,"context_line":"      applies to instances booted **after** it has been applied. Existing"},{"line_number":11,"context_line":"      instances will still experience bug 1851545 after being shelved and"},{"line_number":12,"context_line":"      unshelved, even with the fix applied."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"6a43faab_f84d95e2","line":12,"in_reply_to":"8c6d24a6_c8e4195e","updated":"2021-04-27 17:00:18.000000000","message":"This depends on how we do the online migration. We could do it by way of the \"on load\" pattern, like we do when populating the uuid field of PciDevice (via the \u0027_from_db_object\u0027 classmethod).\n\nAgree that we can do this afterwards. I would like to see a WIP patch sitting on top before we send this through and forget about it though. I\u0027ll see if I can draft something tomorrow, seeing as you\u0027re off this week.","commit_id":"e503c780a62d8534e718d9287765bc370e38c7ac"}]}
