)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5962df281acd41f8583ceedab6fc1f89a80ddfc4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"44b5a8e3_40fc91dd","updated":"2022-08-19 10:28:28.000000000","message":"one minor issue inline\ncan you also add a very short fixes release note\n\notherwise im pretty happy with this.","commit_id":"446b6beda204261cb042e573dda7d335103b202e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9c8909c665194386f06eb57cf264b76f9c9bbe66","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"10bc45ab_cc8058c7","updated":"2022-10-19 09:37:25.000000000","message":"im happy with this overall can you adress that last few failing tests and respin","commit_id":"fc603f8613f9b1f7011a3cbd09f5f7f20ca76599"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8277cc50076d26a7412451d60a5b8779d62869fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"2c042228_01fb0c47","updated":"2022-11-29 16:26:20.000000000","message":"+1 pending ci result but you have adress my last comment and the pep8 hacking check to assuming this is clean im happy with this i think\n\nill try an review again tomrrow","commit_id":"4eef0fe6354304b4639a3b635e4955457188e4ce"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"a61098e1b0bb1b2ad6c5efaa1a5bc7caaedee6a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b9e3aeba_21600435","updated":"2023-03-10 15:32:57.000000000","message":"Hello team, is there anything missing here?","commit_id":"4eef0fe6354304b4639a3b635e4955457188e4ce"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"fa0e129d8267b82782f12072132434c3fc3ec787","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"12a1ee03_a497fc80","updated":"2023-03-03 19:55:57.000000000","message":"Thank you @sean for your review. Maybe someone else can also review and we move this forward?\nThanks!","commit_id":"4eef0fe6354304b4639a3b635e4955457188e4ce"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"8d8ea6513fb003091fc81497b9952ad4c36a9045","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b18ae71e_99e11dfc","updated":"2023-01-03 10:41:56.000000000","message":"ping","commit_id":"4eef0fe6354304b4639a3b635e4955457188e4ce"}],"nova/network/neutron.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5962df281acd41f8583ceedab6fc1f89a80ddfc4","unresolved":true,"context_lines":[{"line_number":651,"context_line":""},{"line_number":652,"context_line":"            port_req_body: ty.Dict[str, ty.Any] \u003d {"},{"line_number":653,"context_line":"                \u0027port\u0027: {"},{"line_number":654,"context_line":"                    \u0027device_owner\u0027: \u0027\u0027,"},{"line_number":655,"context_line":"                    constants.BINDING_HOST_ID: None,"},{"line_number":656,"context_line":"                }"},{"line_number":657,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":2,"id":"0dd0a139_cee5838a","line":654,"range":{"start_line":654,"start_character":19,"end_line":654,"end_character":39},"updated":"2022-08-19 10:28:28.000000000","message":"this should be under the detach if as well\n\nunbind shoudl just null out binding_host_id\n\nbut it should not touch device_owner or device_id unless we are doing a detach","commit_id":"446b6beda204261cb042e573dda7d335103b202e"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b127ce145bd3bb67b20cd87e29f32947c42801f7","unresolved":false,"context_lines":[{"line_number":651,"context_line":""},{"line_number":652,"context_line":"            port_req_body: ty.Dict[str, ty.Any] \u003d {"},{"line_number":653,"context_line":"                \u0027port\u0027: {"},{"line_number":654,"context_line":"                    \u0027device_owner\u0027: \u0027\u0027,"},{"line_number":655,"context_line":"                    constants.BINDING_HOST_ID: None,"},{"line_number":656,"context_line":"                }"},{"line_number":657,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":2,"id":"74c90eec_49c69779","line":654,"range":{"start_line":654,"start_character":19,"end_line":654,"end_character":39},"in_reply_to":"0dd0a139_cee5838a","updated":"2022-08-19 12:16:22.000000000","message":"Done","commit_id":"446b6beda204261cb042e573dda7d335103b202e"}],"nova/tests/functional/libvirt/test_pci_sriov_servers.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9c8909c665194386f06eb57cf264b76f9c9bbe66","unresolved":true,"context_lines":[{"line_number":1468,"context_line":"        self.assertEqual(\u0027\u0027, port[\u0027device_id\u0027])"},{"line_number":1469,"context_line":"        self.assertEqual({}, port[\u0027binding:profile\u0027])"},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"    def test_shelve_offload(self):"},{"line_number":1472,"context_line":"        hostname \u003d self.start_vdpa_compute()"},{"line_number":1473,"context_line":"        vdpa_port, server \u003d self._create_port_and_server()"},{"line_number":1474,"context_line":"        # assert the port is bound to the vm and the compute host"},{"line_number":1475,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1476,"context_line":"        self.assertEqual(server[\u0027id\u0027], port[\u0027device_id\u0027])"},{"line_number":1477,"context_line":"        self.assertEqual(hostname, port[\u0027binding:host_id\u0027])"},{"line_number":1478,"context_line":"        num_pci \u003d self.NUM_PFS + self.NUM_VFS"},{"line_number":1479,"context_line":"        # -2 we claim the vdpa device which make the parent PF unavailable"},{"line_number":1480,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci - 2)"},{"line_number":1481,"context_line":"        server \u003d self._shelve_server(server)"},{"line_number":1482,"context_line":"        # now that the vm is shelve offloaded it should not be bound"},{"line_number":1483,"context_line":"        # to any host but should still be owned by the vm"},{"line_number":1484,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1485,"context_line":"        self.assertEqual(server[\u0027id\u0027], port[\u0027device_id\u0027])"},{"line_number":1486,"context_line":"        # FIXME(sean-k-mooney): we should be unbinding the port from"},{"line_number":1487,"context_line":"        # the host when we shelve offload but we don\u0027t today."},{"line_number":1488,"context_line":"        # This is unrelated to vdpa port and is a general issue."},{"line_number":1489,"context_line":"        self.assertEqual(hostname, port[\u0027binding:host_id\u0027])"},{"line_number":1490,"context_line":"        self.assertIn(\u0027binding:profile\u0027, port)"},{"line_number":1491,"context_line":"        self.assertIsNone(server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1492,"context_line":"        self.assertIsNone(server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":1493,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1494,"context_line":""},{"line_number":1495,"context_line":"    def test_unshelve_to_same_host(self):"},{"line_number":1496,"context_line":"        hostname \u003d self.start_vdpa_compute()"},{"line_number":1497,"context_line":"        num_pci \u003d self.NUM_PFS + self.NUM_VFS"},{"line_number":1498,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1499,"context_line":""},{"line_number":1500,"context_line":"        vdpa_port, server \u003d self._create_port_and_server()"},{"line_number":1501,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci - 2)"},{"line_number":1502,"context_line":"        self.assertEqual("},{"line_number":1503,"context_line":"            hostname, server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1504,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1505,"context_line":"        self.assertEqual(hostname, port[\u0027binding:host_id\u0027])"},{"line_number":1506,"context_line":""},{"line_number":1507,"context_line":"        server \u003d self._shelve_server(server)"},{"line_number":1508,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1509,"context_line":"        self.assertIsNone(server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1510,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1511,"context_line":"        # FIXME(sean-k-mooney): shelve  offload should unbind the port"},{"line_number":1512,"context_line":"        # self.assertEqual(\u0027\u0027, port[\u0027binding:host_id\u0027])"},{"line_number":1513,"context_line":"        self.assertEqual(hostname, port[\u0027binding:host_id\u0027])"},{"line_number":1514,"context_line":""},{"line_number":1515,"context_line":"        server \u003d self._unshelve_server(server)"},{"line_number":1516,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci - 2)"},{"line_number":1517,"context_line":"        self.assertEqual("},{"line_number":1518,"context_line":"            hostname, server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1519,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1520,"context_line":"        self.assertEqual(hostname, port[\u0027binding:host_id\u0027])"},{"line_number":1521,"context_line":""},{"line_number":1522,"context_line":"    def test_unshelve_to_different_host(self):"},{"line_number":1523,"context_line":"        source \u003d self.start_vdpa_compute(hostname\u003d\u0027source\u0027)"},{"line_number":1524,"context_line":"        dest \u003d self.start_vdpa_compute(hostname\u003d\u0027dest\u0027)"},{"line_number":1525,"context_line":""},{"line_number":1526,"context_line":"        num_pci \u003d self.NUM_PFS + self.NUM_VFS"},{"line_number":1527,"context_line":"        self.assertPCIDeviceCounts(source, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1528,"context_line":"        self.assertPCIDeviceCounts(dest, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1529,"context_line":""},{"line_number":1530,"context_line":"        # ensure we boot the vm on the \"source\" compute"},{"line_number":1531,"context_line":"        self.api.put_service("},{"line_number":1532,"context_line":"            self.computes[\u0027dest\u0027].service_ref.uuid, {\u0027status\u0027: \u0027disabled\u0027})"},{"line_number":1533,"context_line":"        vdpa_port, server \u003d self._create_port_and_server()"},{"line_number":1534,"context_line":"        self.assertPCIDeviceCounts(source, total\u003dnum_pci, free\u003dnum_pci - 2)"},{"line_number":1535,"context_line":"        self.assertEqual("},{"line_number":1536,"context_line":"            source, server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1537,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1538,"context_line":"        self.assertEqual(source, port[\u0027binding:host_id\u0027])"},{"line_number":1539,"context_line":""},{"line_number":1540,"context_line":"        server \u003d self._shelve_server(server)"},{"line_number":1541,"context_line":"        self.assertPCIDeviceCounts(source, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1542,"context_line":"        self.assertIsNone(server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1543,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1544,"context_line":"        # FIXME(sean-k-mooney): shelve should unbind the port"},{"line_number":1545,"context_line":"        # self.assertEqual(\u0027\u0027, port[\u0027binding:host_id\u0027])"},{"line_number":1546,"context_line":"        self.assertEqual(source, port[\u0027binding:host_id\u0027])"},{"line_number":1547,"context_line":""},{"line_number":1548,"context_line":"        # force the unshelve to the other host"},{"line_number":1549,"context_line":"        self.api.put_service("},{"line_number":1550,"context_line":"            self.computes[\u0027source\u0027].service_ref.uuid, {\u0027status\u0027: \u0027disabled\u0027})"},{"line_number":1551,"context_line":"        self.api.put_service("},{"line_number":1552,"context_line":"            self.computes[\u0027dest\u0027].service_ref.uuid, {\u0027status\u0027: \u0027enabled\u0027})"},{"line_number":1553,"context_line":"        self.assertPCIDeviceCounts(dest, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1554,"context_line":"        server \u003d self._unshelve_server(server)"},{"line_number":1555,"context_line":"        # the dest devices should be claimed"},{"line_number":1556,"context_line":"        self.assertPCIDeviceCounts(dest, total\u003dnum_pci, free\u003dnum_pci - 2)"},{"line_number":1557,"context_line":"        # and the source host devices should still be free"},{"line_number":1558,"context_line":"        self.assertPCIDeviceCounts(source, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1559,"context_line":"        self.assertEqual("},{"line_number":1560,"context_line":"            dest, server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1561,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1562,"context_line":"        self.assertEqual(dest, port[\u0027binding:host_id\u0027])"},{"line_number":1563,"context_line":""},{"line_number":1564,"context_line":"    def test_evacute(self):"},{"line_number":1565,"context_line":"        source \u003d self.start_vdpa_compute(hostname\u003d\u0027source\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1425fbb8_921afc0a","line":1562,"range":{"start_line":1471,"start_character":0,"end_line":1562,"end_character":55},"updated":"2022-10-19 09:37:25.000000000","message":"you also need to update these.\nthat is why the functional tests are failing.\n\nspecifically the fixme comments","commit_id":"fc603f8613f9b1f7011a3cbd09f5f7f20ca76599"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"9885e2b9d70e5efc4f55e680793ef804c75751bd","unresolved":false,"context_lines":[{"line_number":1468,"context_line":"        self.assertEqual(\u0027\u0027, port[\u0027device_id\u0027])"},{"line_number":1469,"context_line":"        self.assertEqual({}, port[\u0027binding:profile\u0027])"},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"    def test_shelve_offload(self):"},{"line_number":1472,"context_line":"        hostname \u003d self.start_vdpa_compute()"},{"line_number":1473,"context_line":"        vdpa_port, server \u003d self._create_port_and_server()"},{"line_number":1474,"context_line":"        # assert the port is bound to the vm and the compute host"},{"line_number":1475,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1476,"context_line":"        self.assertEqual(server[\u0027id\u0027], port[\u0027device_id\u0027])"},{"line_number":1477,"context_line":"        self.assertEqual(hostname, port[\u0027binding:host_id\u0027])"},{"line_number":1478,"context_line":"        num_pci \u003d self.NUM_PFS + self.NUM_VFS"},{"line_number":1479,"context_line":"        # -2 we claim the vdpa device which make the parent PF unavailable"},{"line_number":1480,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci - 2)"},{"line_number":1481,"context_line":"        server \u003d self._shelve_server(server)"},{"line_number":1482,"context_line":"        # now that the vm is shelve offloaded it should not be bound"},{"line_number":1483,"context_line":"        # to any host but should still be owned by the vm"},{"line_number":1484,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1485,"context_line":"        self.assertEqual(server[\u0027id\u0027], port[\u0027device_id\u0027])"},{"line_number":1486,"context_line":"        # FIXME(sean-k-mooney): we should be unbinding the port from"},{"line_number":1487,"context_line":"        # the host when we shelve offload but we don\u0027t today."},{"line_number":1488,"context_line":"        # This is unrelated to vdpa port and is a general issue."},{"line_number":1489,"context_line":"        self.assertEqual(hostname, port[\u0027binding:host_id\u0027])"},{"line_number":1490,"context_line":"        self.assertIn(\u0027binding:profile\u0027, port)"},{"line_number":1491,"context_line":"        self.assertIsNone(server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1492,"context_line":"        self.assertIsNone(server[\u0027OS-EXT-SRV-ATTR:host\u0027])"},{"line_number":1493,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1494,"context_line":""},{"line_number":1495,"context_line":"    def test_unshelve_to_same_host(self):"},{"line_number":1496,"context_line":"        hostname \u003d self.start_vdpa_compute()"},{"line_number":1497,"context_line":"        num_pci \u003d self.NUM_PFS + self.NUM_VFS"},{"line_number":1498,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1499,"context_line":""},{"line_number":1500,"context_line":"        vdpa_port, server \u003d self._create_port_and_server()"},{"line_number":1501,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci - 2)"},{"line_number":1502,"context_line":"        self.assertEqual("},{"line_number":1503,"context_line":"            hostname, server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1504,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1505,"context_line":"        self.assertEqual(hostname, port[\u0027binding:host_id\u0027])"},{"line_number":1506,"context_line":""},{"line_number":1507,"context_line":"        server \u003d self._shelve_server(server)"},{"line_number":1508,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1509,"context_line":"        self.assertIsNone(server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1510,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1511,"context_line":"        # FIXME(sean-k-mooney): shelve  offload should unbind the port"},{"line_number":1512,"context_line":"        # self.assertEqual(\u0027\u0027, port[\u0027binding:host_id\u0027])"},{"line_number":1513,"context_line":"        self.assertEqual(hostname, port[\u0027binding:host_id\u0027])"},{"line_number":1514,"context_line":""},{"line_number":1515,"context_line":"        server \u003d self._unshelve_server(server)"},{"line_number":1516,"context_line":"        self.assertPCIDeviceCounts(hostname, total\u003dnum_pci, free\u003dnum_pci - 2)"},{"line_number":1517,"context_line":"        self.assertEqual("},{"line_number":1518,"context_line":"            hostname, server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1519,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1520,"context_line":"        self.assertEqual(hostname, port[\u0027binding:host_id\u0027])"},{"line_number":1521,"context_line":""},{"line_number":1522,"context_line":"    def test_unshelve_to_different_host(self):"},{"line_number":1523,"context_line":"        source \u003d self.start_vdpa_compute(hostname\u003d\u0027source\u0027)"},{"line_number":1524,"context_line":"        dest \u003d self.start_vdpa_compute(hostname\u003d\u0027dest\u0027)"},{"line_number":1525,"context_line":""},{"line_number":1526,"context_line":"        num_pci \u003d self.NUM_PFS + self.NUM_VFS"},{"line_number":1527,"context_line":"        self.assertPCIDeviceCounts(source, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1528,"context_line":"        self.assertPCIDeviceCounts(dest, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1529,"context_line":""},{"line_number":1530,"context_line":"        # ensure we boot the vm on the \"source\" compute"},{"line_number":1531,"context_line":"        self.api.put_service("},{"line_number":1532,"context_line":"            self.computes[\u0027dest\u0027].service_ref.uuid, {\u0027status\u0027: \u0027disabled\u0027})"},{"line_number":1533,"context_line":"        vdpa_port, server \u003d self._create_port_and_server()"},{"line_number":1534,"context_line":"        self.assertPCIDeviceCounts(source, total\u003dnum_pci, free\u003dnum_pci - 2)"},{"line_number":1535,"context_line":"        self.assertEqual("},{"line_number":1536,"context_line":"            source, server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1537,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1538,"context_line":"        self.assertEqual(source, port[\u0027binding:host_id\u0027])"},{"line_number":1539,"context_line":""},{"line_number":1540,"context_line":"        server \u003d self._shelve_server(server)"},{"line_number":1541,"context_line":"        self.assertPCIDeviceCounts(source, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1542,"context_line":"        self.assertIsNone(server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1543,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1544,"context_line":"        # FIXME(sean-k-mooney): shelve should unbind the port"},{"line_number":1545,"context_line":"        # self.assertEqual(\u0027\u0027, port[\u0027binding:host_id\u0027])"},{"line_number":1546,"context_line":"        self.assertEqual(source, port[\u0027binding:host_id\u0027])"},{"line_number":1547,"context_line":""},{"line_number":1548,"context_line":"        # force the unshelve to the other host"},{"line_number":1549,"context_line":"        self.api.put_service("},{"line_number":1550,"context_line":"            self.computes[\u0027source\u0027].service_ref.uuid, {\u0027status\u0027: \u0027disabled\u0027})"},{"line_number":1551,"context_line":"        self.api.put_service("},{"line_number":1552,"context_line":"            self.computes[\u0027dest\u0027].service_ref.uuid, {\u0027status\u0027: \u0027enabled\u0027})"},{"line_number":1553,"context_line":"        self.assertPCIDeviceCounts(dest, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1554,"context_line":"        server \u003d self._unshelve_server(server)"},{"line_number":1555,"context_line":"        # the dest devices should be claimed"},{"line_number":1556,"context_line":"        self.assertPCIDeviceCounts(dest, total\u003dnum_pci, free\u003dnum_pci - 2)"},{"line_number":1557,"context_line":"        # and the source host devices should still be free"},{"line_number":1558,"context_line":"        self.assertPCIDeviceCounts(source, total\u003dnum_pci, free\u003dnum_pci)"},{"line_number":1559,"context_line":"        self.assertEqual("},{"line_number":1560,"context_line":"            dest, server[\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027])"},{"line_number":1561,"context_line":"        port \u003d self.neutron.show_port(vdpa_port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":1562,"context_line":"        self.assertEqual(dest, port[\u0027binding:host_id\u0027])"},{"line_number":1563,"context_line":""},{"line_number":1564,"context_line":"    def test_evacute(self):"},{"line_number":1565,"context_line":"        source \u003d self.start_vdpa_compute(hostname\u003d\u0027source\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1949c004_7b7c621b","line":1562,"range":{"start_line":1471,"start_character":0,"end_line":1562,"end_character":55},"in_reply_to":"1425fbb8_921afc0a","updated":"2022-11-29 16:07:39.000000000","message":"Done","commit_id":"fc603f8613f9b1f7011a3cbd09f5f7f20ca76599"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5962df281acd41f8583ceedab6fc1f89a80ddfc4","unresolved":true,"context_lines":[{"line_number":6465,"context_line":"        self.assertEqual(port[\u0027binding:status\u0027], \u0027ACTIVE\u0027)"},{"line_number":6466,"context_line":""},{"line_number":6467,"context_line":"        # Do shelve"},{"line_number":6468,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027shelve\u0027: {}})"},{"line_number":6469,"context_line":"        server \u003d self._wait_for_state_change(server, \u0027SHELVED_OFFLOADED\u0027)"},{"line_number":6470,"context_line":""},{"line_number":6471,"context_line":"        port \u003d self.neutron.show_port(self.neutron.port_1[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":6472,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ef825232_74e2c29a","line":6469,"range":{"start_line":6468,"start_character":6,"end_line":6469,"end_character":73},"updated":"2022-08-19 10:28:28.000000000","message":"this can  just be \nserver \u003d self.shelve_server(server)\nwe have helpers for this","commit_id":"446b6beda204261cb042e573dda7d335103b202e"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b127ce145bd3bb67b20cd87e29f32947c42801f7","unresolved":false,"context_lines":[{"line_number":6465,"context_line":"        self.assertEqual(port[\u0027binding:status\u0027], \u0027ACTIVE\u0027)"},{"line_number":6466,"context_line":""},{"line_number":6467,"context_line":"        # Do shelve"},{"line_number":6468,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027shelve\u0027: {}})"},{"line_number":6469,"context_line":"        server \u003d self._wait_for_state_change(server, \u0027SHELVED_OFFLOADED\u0027)"},{"line_number":6470,"context_line":""},{"line_number":6471,"context_line":"        port \u003d self.neutron.show_port(self.neutron.port_1[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":6472,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dfc52f9a_0c807fb3","line":6469,"range":{"start_line":6468,"start_character":6,"end_line":6469,"end_character":73},"in_reply_to":"ef825232_74e2c29a","updated":"2022-08-19 12:16:22.000000000","message":"Done","commit_id":"446b6beda204261cb042e573dda7d335103b202e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5962df281acd41f8583ceedab6fc1f89a80ddfc4","unresolved":true,"context_lines":[{"line_number":6475,"context_line":"        self.assertEqual(port[\u0027device_id\u0027], server[\u0027id\u0027])"},{"line_number":6476,"context_line":"        self.assertIsNone(port[\u0027binding:host_id\u0027])"},{"line_number":6477,"context_line":"        self.assertNotIn(\u0027binding:status\u0027, port)"},{"line_number":6478,"context_line":""},{"line_number":6479,"context_line":"        self._delete_server(server)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a5689f9_a468d21c","line":6478,"updated":"2022-08-19 10:28:28.000000000","message":"this is the default i belive but it does not hurt to set it explcitly either.","commit_id":"446b6beda204261cb042e573dda7d335103b202e"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b127ce145bd3bb67b20cd87e29f32947c42801f7","unresolved":false,"context_lines":[{"line_number":6475,"context_line":"        self.assertEqual(port[\u0027device_id\u0027], server[\u0027id\u0027])"},{"line_number":6476,"context_line":"        self.assertIsNone(port[\u0027binding:host_id\u0027])"},{"line_number":6477,"context_line":"        self.assertNotIn(\u0027binding:status\u0027, port)"},{"line_number":6478,"context_line":""},{"line_number":6479,"context_line":"        self._delete_server(server)"}],"source_content_type":"text/x-python","patch_set":2,"id":"e15d31c5_34bcdde1","line":6478,"in_reply_to":"9a5689f9_a468d21c","updated":"2022-08-19 12:16:22.000000000","message":"Done","commit_id":"446b6beda204261cb042e573dda7d335103b202e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5962df281acd41f8583ceedab6fc1f89a80ddfc4","unresolved":true,"context_lines":[{"line_number":6476,"context_line":"        self.assertIsNone(port[\u0027binding:host_id\u0027])"},{"line_number":6477,"context_line":"        self.assertNotIn(\u0027binding:status\u0027, port)"},{"line_number":6478,"context_line":""},{"line_number":6479,"context_line":"        self._delete_server(server)"}],"source_content_type":"text/x-python","patch_set":2,"id":"155b7863_f745a8ef","line":6479,"range":{"start_line":6479,"start_character":5,"end_line":6479,"end_character":35},"updated":"2022-08-19 10:28:28.000000000","message":"i think this is normally done automaticaly in _create_server via a test cleanup.\nstep","commit_id":"446b6beda204261cb042e573dda7d335103b202e"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b127ce145bd3bb67b20cd87e29f32947c42801f7","unresolved":false,"context_lines":[{"line_number":6476,"context_line":"        self.assertIsNone(port[\u0027binding:host_id\u0027])"},{"line_number":6477,"context_line":"        self.assertNotIn(\u0027binding:status\u0027, port)"},{"line_number":6478,"context_line":""},{"line_number":6479,"context_line":"        self._delete_server(server)"}],"source_content_type":"text/x-python","patch_set":2,"id":"4d519f91_eeef811d","line":6479,"range":{"start_line":6479,"start_character":5,"end_line":6479,"end_character":35},"in_reply_to":"155b7863_f745a8ef","updated":"2022-08-19 12:16:22.000000000","message":"Done","commit_id":"446b6beda204261cb042e573dda7d335103b202e"}]}
