)]}'
{"nova/accelerator/cyborg.py":[{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"119319da2ccd718b017a0a2b40f0b4e0bf2d676e","unresolved":true,"context_lines":[{"line_number":232,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":233,"context_line":"        requester_id \u003d ("},{"line_number":234,"context_line":"            get_device_profile_group_requester_id(dp_group_id, owner))"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        # ARQ and rp is 1:1 mapping"},{"line_number":237,"context_line":"        # One arq always associated with one placement request group and"},{"line_number":238,"context_line":"        # in placement one prefixed request group is always mapped to one RP."}],"source_content_type":"text/x-python","patch_set":27,"id":"50287034_3a63e224","side":"PARENT","line":235,"updated":"2021-07-16 07:06:21.000000000","message":"irrelevant change","commit_id":"13475cee30bbb9c9f0dbf0b77541b3cea6f7ac4e"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"363639600d59ec9ac446c75676b4f78f417112f6","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        dp_group_id \u003d arq[\u0027device_profile_group_id\u0027]"},{"line_number":233,"context_line":"        requester_id \u003d ("},{"line_number":234,"context_line":"            get_device_profile_group_requester_id(dp_group_id, owner))"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        # ARQ and rp is 1:1 mapping"},{"line_number":237,"context_line":"        # One arq always associated with one placement request group and"},{"line_number":238,"context_line":"        # in placement one prefixed request group is always mapped to one RP."}],"source_content_type":"text/x-python","patch_set":27,"id":"d218060e_09cb2ac3","side":"PARENT","line":235,"in_reply_to":"50287034_3a63e224","updated":"2021-07-16 07:33:40.000000000","message":"Done","commit_id":"13475cee30bbb9c9f0dbf0b77541b3cea6f7ac4e"}],"nova/conductor/manager.py":[{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"119319da2ccd718b017a0a2b40f0b4e0bf2d676e","unresolved":true,"context_lines":[{"line_number":1791,"context_line":"                    arq,"},{"line_number":1792,"context_line":"                    resource_provider_mapping,"},{"line_number":1793,"context_line":"                    request_net.port_id)"},{"line_number":1794,"context_line":"                print(\"----_create_arqs_for_ports rp_uuid:\", rp_uuid)"},{"line_number":1795,"context_line":"                arq_binding \u003d {request_net.arq_uuid:"},{"line_number":1796,"context_line":"                    {\"hostname\": hostname,"},{"line_number":1797,"context_line":"                    \"device_rp_uuid\": rp_uuid,"}],"source_content_type":"text/x-python","patch_set":27,"id":"44ca9275_d7b542a3","line":1794,"updated":"2021-07-16 07:06:21.000000000","message":"debugging leftover","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"363639600d59ec9ac446c75676b4f78f417112f6","unresolved":false,"context_lines":[{"line_number":1791,"context_line":"                    arq,"},{"line_number":1792,"context_line":"                    resource_provider_mapping,"},{"line_number":1793,"context_line":"                    request_net.port_id)"},{"line_number":1794,"context_line":"                print(\"----_create_arqs_for_ports rp_uuid:\", rp_uuid)"},{"line_number":1795,"context_line":"                arq_binding \u003d {request_net.arq_uuid:"},{"line_number":1796,"context_line":"                    {\"hostname\": hostname,"},{"line_number":1797,"context_line":"                    \"device_rp_uuid\": rp_uuid,"}],"source_content_type":"text/x-python","patch_set":27,"id":"40de69af_b1d06ab4","line":1794,"in_reply_to":"44ca9275_d7b542a3","updated":"2021-07-16 07:33:40.000000000","message":"Done","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3dc8dc8d24c8c81b2e172d39eef84f06d9af9b7f","unresolved":true,"context_lines":[{"line_number":7807,"context_line":""},{"line_number":7808,"context_line":"    def _setup_compute_nodes_and_device_rps(self):"},{"line_number":7809,"context_line":"        self.compute_services \u003d []"},{"line_number":7810,"context_line":"        # self.device_rp_uuids \u003d {}"},{"line_number":7811,"context_line":"        self.device_rp_uuids \u003d []"},{"line_number":7812,"context_line":"        for i in range(self.NUM_HOSTS):"},{"line_number":7813,"context_line":"            svc \u003d self._start_compute(host\u003d\u0027accel_host\u0027 + str(i))"}],"source_content_type":"text/x-python","patch_set":23,"id":"cdd4c385_1d0d7f3d","line":7810,"range":{"start_line":7810,"start_character":8,"end_line":7810,"end_character":35},"updated":"2021-07-05 08:30:25.000000000","message":"I guess you need to remove this line","commit_id":"2f5dcd74162b19f004b7787ecad98bef474161d7"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"dfc17c386ee4a63464c38ff0261b0b6a6f480f03","unresolved":false,"context_lines":[{"line_number":7807,"context_line":""},{"line_number":7808,"context_line":"    def _setup_compute_nodes_and_device_rps(self):"},{"line_number":7809,"context_line":"        self.compute_services \u003d []"},{"line_number":7810,"context_line":"        # self.device_rp_uuids \u003d {}"},{"line_number":7811,"context_line":"        self.device_rp_uuids \u003d []"},{"line_number":7812,"context_line":"        for i in range(self.NUM_HOSTS):"},{"line_number":7813,"context_line":"            svc \u003d self._start_compute(host\u003d\u0027accel_host\u0027 + str(i))"}],"source_content_type":"text/x-python","patch_set":23,"id":"e2c13b27_ad6241bf","line":7810,"range":{"start_line":7810,"start_character":8,"end_line":7810,"end_character":35},"in_reply_to":"cdd4c385_1d0d7f3d","updated":"2021-07-05 08:43:27.000000000","message":"Done","commit_id":"2f5dcd74162b19f004b7787ecad98bef474161d7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3dc8dc8d24c8c81b2e172d39eef84f06d9af9b7f","unresolved":true,"context_lines":[{"line_number":8445,"context_line":"        self.server \u003d self._create_server("},{"line_number":8446,"context_line":"            self.server_name, flavor_id\u003dself.flavor_id,"},{"line_number":8447,"context_line":"            image_uuid\u003d\u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"},{"line_number":8448,"context_line":"            networks\u003d[{\u0027port\u0027: port[\u0027id\u0027]}], expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8449,"context_line":""},{"line_number":8450,"context_line":"    def test_delete_server(self):"},{"line_number":8451,"context_line":"        self._delete_server(self.server)"}],"source_content_type":"text/x-python","patch_set":23,"id":"4e96dc20_bde7d0c3","line":8448,"updated":"2021-07-05 08:30:25.000000000","message":"I think you should assert the server created successful.\n\nAlso, I expect to assert the neutron port binding info.","commit_id":"2f5dcd74162b19f004b7787ecad98bef474161d7"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"dfc17c386ee4a63464c38ff0261b0b6a6f480f03","unresolved":false,"context_lines":[{"line_number":8445,"context_line":"        self.server \u003d self._create_server("},{"line_number":8446,"context_line":"            self.server_name, flavor_id\u003dself.flavor_id,"},{"line_number":8447,"context_line":"            image_uuid\u003d\u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"},{"line_number":8448,"context_line":"            networks\u003d[{\u0027port\u0027: port[\u0027id\u0027]}], expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8449,"context_line":""},{"line_number":8450,"context_line":"    def test_delete_server(self):"},{"line_number":8451,"context_line":"        self._delete_server(self.server)"}],"source_content_type":"text/x-python","patch_set":23,"id":"0bcfc8b0_40dbb2e2","line":8448,"in_reply_to":"4e96dc20_bde7d0c3","updated":"2021-07-05 08:43:27.000000000","message":"Done","commit_id":"2f5dcd74162b19f004b7787ecad98bef474161d7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8056,"context_line":"        self._check_no_allocs_usage(server_uuid)"},{"line_number":8057,"context_line":"        self.cyborg.mock_del_arqs.assert_has_calls("},{"line_number":8058,"context_line":"            [mock.call(server_uuid),"},{"line_number":8059,"context_line":"             mock.call(server_uuid),"},{"line_number":8060,"context_line":"             mock.call(server_uuid)])"},{"line_number":8061,"context_line":""},{"line_number":8062,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"156fb458_c874a1c9","side":"PARENT","line":8059,"updated":"2021-07-14 14:45:47.000000000","message":"Just out of curiosity why we have one less delete calls?","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8056,"context_line":"        self._check_no_allocs_usage(server_uuid)"},{"line_number":8057,"context_line":"        self.cyborg.mock_del_arqs.assert_has_calls("},{"line_number":8058,"context_line":"            [mock.call(server_uuid),"},{"line_number":8059,"context_line":"             mock.call(server_uuid),"},{"line_number":8060,"context_line":"             mock.call(server_uuid)])"},{"line_number":8061,"context_line":""},{"line_number":8062,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"c3911626_551dc3d3","side":"PARENT","line":8059,"in_reply_to":"156fb458_c874a1c9","updated":"2021-07-15 12:08:45.000000000","message":"This is un-relevant change. More curiosity is that, while i added back, it passed, still. I guess the assert just ensure the call is in the list, not how many calls there is.","commit_id":"9556d09fbb072f20c3efb4a6eb8fc4ee9e5355bb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":7817,"context_line":""},{"line_number":7818,"context_line":"        # host0 have most arqs setup, except the last one"},{"line_number":7819,"context_line":"        # host1 have the last arq of cyborg arqs list"},{"line_number":7820,"context_line":"        for host_index, uuid in enumerate(self.compute_rp_uuids):"},{"line_number":7821,"context_line":"            if host_index \u003d\u003d 0:"},{"line_number":7822,"context_line":"                # host0 have most arqs setup, except the last one"},{"line_number":7823,"context_line":"                for i, _ in enumerate(self.cyborg.arq_list[0:-2]):"}],"source_content_type":"text/x-python","patch_set":26,"id":"1fc9ae08_5c4b6208","line":7820,"range":{"start_line":7820,"start_character":24,"end_line":7820,"end_character":28},"updated":"2021-07-14 14:45:47.000000000","message":"this is unused but could be used to replace all the self.compute_rp_uuids[...] with it below","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":7817,"context_line":""},{"line_number":7818,"context_line":"        # host0 have most arqs setup, except the last one"},{"line_number":7819,"context_line":"        # host1 have the last arq of cyborg arqs list"},{"line_number":7820,"context_line":"        for host_index, uuid in enumerate(self.compute_rp_uuids):"},{"line_number":7821,"context_line":"            if host_index \u003d\u003d 0:"},{"line_number":7822,"context_line":"                # host0 have most arqs setup, except the last one"},{"line_number":7823,"context_line":"                for i, _ in enumerate(self.cyborg.arq_list[0:-2]):"}],"source_content_type":"text/x-python","patch_set":26,"id":"1d3c7772_8e323cdd","line":7820,"range":{"start_line":7820,"start_character":24,"end_line":7820,"end_character":28},"in_reply_to":"1fc9ae08_5c4b6208","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":7823,"context_line":"                for i, _ in enumerate(self.cyborg.arq_list[0:-2]):"},{"line_number":7824,"context_line":"                    # each rp should have unique index"},{"line_number":7825,"context_line":"                    device_rp_uuid \u003d self._create_device_rp("},{"line_number":7826,"context_line":"                        host_index * self.NUM_HOSTS + i,"},{"line_number":7827,"context_line":"                        self.compute_rp_uuids[0])"},{"line_number":7828,"context_line":"                    self.device_rp_uuids.append(device_rp_uuid)"},{"line_number":7829,"context_line":"                host_rp \u003d self.compute_rp_uuids[0]"}],"source_content_type":"text/x-python","patch_set":26,"id":"a819c3a2_5cdfce64","line":7826,"range":{"start_line":7826,"start_character":24,"end_line":7826,"end_character":55},"updated":"2021-07-14 14:45:47.000000000","message":"as you have the condition host_index \u003d\u003d 0 above, this whole expression is just simplified to i","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":7823,"context_line":"                for i, _ in enumerate(self.cyborg.arq_list[0:-2]):"},{"line_number":7824,"context_line":"                    # each rp should have unique index"},{"line_number":7825,"context_line":"                    device_rp_uuid \u003d self._create_device_rp("},{"line_number":7826,"context_line":"                        host_index * self.NUM_HOSTS + i,"},{"line_number":7827,"context_line":"                        self.compute_rp_uuids[0])"},{"line_number":7828,"context_line":"                    self.device_rp_uuids.append(device_rp_uuid)"},{"line_number":7829,"context_line":"                host_rp \u003d self.compute_rp_uuids[0]"}],"source_content_type":"text/x-python","patch_set":26,"id":"fffc35ef_c705e294","line":7826,"range":{"start_line":7826,"start_character":24,"end_line":7826,"end_character":55},"in_reply_to":"a819c3a2_5cdfce64","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":7829,"context_line":"                host_rp \u003d self.compute_rp_uuids[0]"},{"line_number":7830,"context_line":"                self.device_rp_map[host_rp] \u003d self.device_rp_uuids"},{"line_number":7831,"context_line":"            else:"},{"line_number":7832,"context_line":"                # other hosts only have only the last one arq"},{"line_number":7833,"context_line":"                # only 2 host is supported"},{"line_number":7834,"context_line":"                device_rp_uuid \u003d self._create_device_rp("},{"line_number":7835,"context_line":"                    host_index, self.compute_rp_uuids[host_index])"}],"source_content_type":"text/x-python","patch_set":26,"id":"41e8c980_8b847e01","line":7832,"range":{"start_line":7832,"start_character":30,"end_line":7832,"end_character":34},"updated":"2021-07-14 14:45:47.000000000","message":"nit: unnecessary\n\nalso the below code is pretty confusing. I see the above that the first host uses all the arqs except the last two (self.cyborg.arq_list[0:-2]). But then here I don\u0027t see how this code uses the last two arqs arq_list[-2] and arq_list[-1] for the second host.","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":7829,"context_line":"                host_rp \u003d self.compute_rp_uuids[0]"},{"line_number":7830,"context_line":"                self.device_rp_map[host_rp] \u003d self.device_rp_uuids"},{"line_number":7831,"context_line":"            else:"},{"line_number":7832,"context_line":"                # other hosts only have only the last one arq"},{"line_number":7833,"context_line":"                # only 2 host is supported"},{"line_number":7834,"context_line":"                device_rp_uuid \u003d self._create_device_rp("},{"line_number":7835,"context_line":"                    host_index, self.compute_rp_uuids[host_index])"}],"source_content_type":"text/x-python","patch_set":26,"id":"883daa8c_6d0c7b23","line":7832,"range":{"start_line":7832,"start_character":30,"end_line":7832,"end_character":34},"in_reply_to":"41e8c980_8b847e01","updated":"2021-07-15 12:08:45.000000000","message":"The flavor accels testing use second host:\nhttps://review.opendev.org/c/openstack/nova/+/780147/26/nova/tests/functional/test_servers.py#8064\n\nsmartnic change cyborg fixture, need to setup rp in second host.","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":7901,"context_line":"                    device_alloc \u003d ("},{"line_number":7902,"context_line":"                        self._get_allocations_by_provider_uuid(device_uuid))"},{"line_number":7903,"context_line":"                    if device_alloc:"},{"line_number":7904,"context_line":"                        # avoid adding duplicated uuid in allocatd rp,"},{"line_number":7905,"context_line":"                        # for example test_stop_start() uses same arq"},{"line_number":7906,"context_line":"                        # and resource provider"},{"line_number":7907,"context_line":"                        if device_uuid not in self.allocated_device_rps:"}],"source_content_type":"text/x-python","patch_set":26,"id":"b5eaab4f_1e9038e0","line":7904,"range":{"start_line":7904,"start_character":58,"end_line":7904,"end_character":66},"updated":"2021-07-14 14:45:47.000000000","message":"nit: allocated","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":7901,"context_line":"                    device_alloc \u003d ("},{"line_number":7902,"context_line":"                        self._get_allocations_by_provider_uuid(device_uuid))"},{"line_number":7903,"context_line":"                    if device_alloc:"},{"line_number":7904,"context_line":"                        # avoid adding duplicated uuid in allocatd rp,"},{"line_number":7905,"context_line":"                        # for example test_stop_start() uses same arq"},{"line_number":7906,"context_line":"                        # and resource provider"},{"line_number":7907,"context_line":"                        if device_uuid not in self.allocated_device_rps:"}],"source_content_type":"text/x-python","patch_set":26,"id":"cf4c8aac_216a3c7f","line":7904,"range":{"start_line":7904,"start_character":58,"end_line":7904,"end_character":66},"in_reply_to":"b5eaab4f_1e9038e0","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":7904,"context_line":"                        # avoid adding duplicated uuid in allocatd rp,"},{"line_number":7905,"context_line":"                        # for example test_stop_start() uses same arq"},{"line_number":7906,"context_line":"                        # and resource provider"},{"line_number":7907,"context_line":"                        if device_uuid not in self.allocated_device_rps:"},{"line_number":7908,"context_line":"                            self.allocated_device_rps.append(device_uuid)"},{"line_number":7909,"context_line":"                        self.assertEqual(expected_device_alloc,"},{"line_number":7910,"context_line":"                            device_alloc[server_uuid])"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f03152b_5046e1a5","line":7907,"range":{"start_line":7907,"start_character":51,"end_line":7907,"end_character":71},"updated":"2021-07-14 14:45:47.000000000","message":"Could this be made to a local variable. As far as I see it is only used locally in this function.","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":7904,"context_line":"                        # avoid adding duplicated uuid in allocatd rp,"},{"line_number":7905,"context_line":"                        # for example test_stop_start() uses same arq"},{"line_number":7906,"context_line":"                        # and resource provider"},{"line_number":7907,"context_line":"                        if device_uuid not in self.allocated_device_rps:"},{"line_number":7908,"context_line":"                            self.allocated_device_rps.append(device_uuid)"},{"line_number":7909,"context_line":"                        self.assertEqual(expected_device_alloc,"},{"line_number":7910,"context_line":"                            device_alloc[server_uuid])"}],"source_content_type":"text/x-python","patch_set":26,"id":"177cdc5f_6e707fc0","line":7907,"range":{"start_line":7907,"start_character":51,"end_line":7907,"end_character":71},"in_reply_to":"5f03152b_5046e1a5","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":7918,"context_line":""},{"line_number":7919,"context_line":"        # NOTE(Sundar): ARQs for an instance could come from different"},{"line_number":7920,"context_line":"        # devices in the same host, in general. But, in this test case,"},{"line_number":7921,"context_line":"        # there is only one device in the host. So, we check for that."},{"line_number":7922,"context_line":"        expected_arq_bind_info \u003d []"},{"line_number":7923,"context_line":"        for rp in self.allocated_device_rps:"},{"line_number":7924,"context_line":"            expected_arq_bind_info.append((\u0027Bound\u0027, hostname,"}],"source_content_type":"text/x-python","patch_set":26,"id":"6a349a68_1cd38739","line":7921,"range":{"start_line":7921,"start_character":10,"end_line":7921,"end_character":47},"updated":"2021-07-14 14:45:47.000000000","message":"I think it is not true any more","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":7918,"context_line":""},{"line_number":7919,"context_line":"        # NOTE(Sundar): ARQs for an instance could come from different"},{"line_number":7920,"context_line":"        # devices in the same host, in general. But, in this test case,"},{"line_number":7921,"context_line":"        # there is only one device in the host. So, we check for that."},{"line_number":7922,"context_line":"        expected_arq_bind_info \u003d []"},{"line_number":7923,"context_line":"        for rp in self.allocated_device_rps:"},{"line_number":7924,"context_line":"            expected_arq_bind_info.append((\u0027Bound\u0027, hostname,"}],"source_content_type":"text/x-python","patch_set":26,"id":"59bcfa9a_2c431530","line":7921,"range":{"start_line":7921,"start_character":10,"end_line":7921,"end_character":47},"in_reply_to":"6a349a68_1cd38739","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":7936,"context_line":"        allocs \u003d self._get_allocations_by_server_uuid(server_uuid)"},{"line_number":7937,"context_line":"        self.assertEqual({}, allocs)"},{"line_number":7938,"context_line":""},{"line_number":7939,"context_line":"    def _check_resource_released(self, server\u003dNone):"},{"line_number":7940,"context_line":"        if not server:"},{"line_number":7941,"context_line":"            server \u003d self.server"},{"line_number":7942,"context_line":"        hostname \u003d server[\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":7943,"context_line":"        server_host_rp_uuid \u003d self._get_provider_uuid_by_host(hostname)"},{"line_number":7944,"context_line":"        for i in range(self.NUM_HOSTS):"}],"source_content_type":"text/x-python","patch_set":26,"id":"5739c1dd_cc9dee2a","line":7941,"range":{"start_line":7939,"start_character":0,"end_line":7941,"end_character":32},"updated":"2021-07-14 14:45:47.000000000","message":"make server mandatory an let the callers provide either a local server or the self.server","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":7936,"context_line":"        allocs \u003d self._get_allocations_by_server_uuid(server_uuid)"},{"line_number":7937,"context_line":"        self.assertEqual({}, allocs)"},{"line_number":7938,"context_line":""},{"line_number":7939,"context_line":"    def _check_resource_released(self, server\u003dNone):"},{"line_number":7940,"context_line":"        if not server:"},{"line_number":7941,"context_line":"            server \u003d self.server"},{"line_number":7942,"context_line":"        hostname \u003d server[\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":7943,"context_line":"        server_host_rp_uuid \u003d self._get_provider_uuid_by_host(hostname)"},{"line_number":7944,"context_line":"        for i in range(self.NUM_HOSTS):"}],"source_content_type":"text/x-python","patch_set":26,"id":"eba27fa7_b57aa189","line":7941,"range":{"start_line":7939,"start_character":0,"end_line":7941,"end_character":32},"in_reply_to":"5739c1dd_cc9dee2a","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":7945,"context_line":"            compute_uuid \u003d self.compute_rp_uuids[i]"},{"line_number":7946,"context_line":"            host_alloc \u003d self._get_allocations_by_provider_uuid(compute_uuid)"},{"line_number":7947,"context_line":"            if compute_uuid \u003d\u003d server_host_rp_uuid:"},{"line_number":7948,"context_line":"                self.assertEqual({}, host_alloc)"},{"line_number":7949,"context_line":""},{"line_number":7950,"context_line":"    def _test_evacuate(self, server, num_hosts):"},{"line_number":7951,"context_line":"        server_hostname \u003d server[\u0027OS-EXT-SRV-ATTR:host\u0027]"}],"source_content_type":"text/x-python","patch_set":26,"id":"94b09a82_4d1cac15","line":7948,"updated":"2021-07-14 14:45:47.000000000","message":"I think you have to check that the allocation on the device RPs are also freed up","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":7945,"context_line":"            compute_uuid \u003d self.compute_rp_uuids[i]"},{"line_number":7946,"context_line":"            host_alloc \u003d self._get_allocations_by_provider_uuid(compute_uuid)"},{"line_number":7947,"context_line":"            if compute_uuid \u003d\u003d server_host_rp_uuid:"},{"line_number":7948,"context_line":"                self.assertEqual({}, host_alloc)"},{"line_number":7949,"context_line":""},{"line_number":7950,"context_line":"    def _test_evacuate(self, server, num_hosts):"},{"line_number":7951,"context_line":"        server_hostname \u003d server[\u0027OS-EXT-SRV-ATTR:host\u0027]"}],"source_content_type":"text/x-python","patch_set":26,"id":"90dc9f37_c63d7bff","line":7948,"in_reply_to":"94b09a82_4d1cac15","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":7947,"context_line":"            if compute_uuid \u003d\u003d server_host_rp_uuid:"},{"line_number":7948,"context_line":"                self.assertEqual({}, host_alloc)"},{"line_number":7949,"context_line":""},{"line_number":7950,"context_line":"    def _test_evacuate(self, server, num_hosts):"},{"line_number":7951,"context_line":"        server_hostname \u003d server[\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":7952,"context_line":"        for i in range(num_hosts):"},{"line_number":7953,"context_line":"            if self.compute_services[i].host \u003d\u003d server_hostname:"}],"source_content_type":"text/x-python","patch_set":26,"id":"d75f7115_782ce6f6","line":7950,"updated":"2021-07-14 14:45:47.000000000","message":"This function move can be a separate refactor patch","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":7947,"context_line":"            if compute_uuid \u003d\u003d server_host_rp_uuid:"},{"line_number":7948,"context_line":"                self.assertEqual({}, host_alloc)"},{"line_number":7949,"context_line":""},{"line_number":7950,"context_line":"    def _test_evacuate(self, server, num_hosts):"},{"line_number":7951,"context_line":"        server_hostname \u003d server[\u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":7952,"context_line":"        for i in range(num_hosts):"},{"line_number":7953,"context_line":"            if self.compute_services[i].host \u003d\u003d server_hostname:"}],"source_content_type":"text/x-python","patch_set":26,"id":"5d35ebfc_cf0ec172","line":7950,"in_reply_to":"d75f7115_782ce6f6","updated":"2021-07-15 12:08:45.000000000","message":"Following subclasses need this evacuate test function, so move to their common parent is not a refactor along.\n\nhttps://review.opendev.org/c/openstack/nova/+/780147/26/nova/tests/functional/test_servers.py#8596","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8400,"context_line":"                      {\u0027port\u0027: ports[0][\u0027id\u0027]},"},{"line_number":8401,"context_line":"                      {\u0027port\u0027: ports[1][\u0027id\u0027]}"},{"line_number":8402,"context_line":"                    ],"},{"line_number":8403,"context_line":"                  expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8404,"context_line":"        # Clean up"},{"line_number":8405,"context_line":"        self._delete_server(server)"},{"line_number":8406,"context_line":"        self._check_resource_released(server)"}],"source_content_type":"text/x-python","patch_set":26,"id":"94c4f825_6ed5912f","line":8403,"updated":"2021-07-14 14:45:47.000000000","message":"I think you should assert the state of the placement allocations, binding profile of the neturon ports and the state of the cyborg arqs here.","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8400,"context_line":"                      {\u0027port\u0027: ports[0][\u0027id\u0027]},"},{"line_number":8401,"context_line":"                      {\u0027port\u0027: ports[1][\u0027id\u0027]}"},{"line_number":8402,"context_line":"                    ],"},{"line_number":8403,"context_line":"                  expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8404,"context_line":"        # Clean up"},{"line_number":8405,"context_line":"        self._delete_server(server)"},{"line_number":8406,"context_line":"        self._check_resource_released(server)"}],"source_content_type":"text/x-python","patch_set":26,"id":"101234f4_1b50b4d6","line":8403,"in_reply_to":"94c4f825_6ed5912f","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8403,"context_line":"                  expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8404,"context_line":"        # Clean up"},{"line_number":8405,"context_line":"        self._delete_server(server)"},{"line_number":8406,"context_line":"        self._check_resource_released(server)"},{"line_number":8407,"context_line":""},{"line_number":8408,"context_line":"    def test_create_with_two_accels_all_binding_error(self):"},{"line_number":8409,"context_line":"        def throw_error(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":26,"id":"329517fb_1b23a290","line":8406,"updated":"2021-07-14 14:45:47.000000000","message":"You should assert that the port binding profile is cleaned up too.  Also as far as I see this does not verify that the ARQs are deleted in cyborg.","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8403,"context_line":"                  expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8404,"context_line":"        # Clean up"},{"line_number":8405,"context_line":"        self._delete_server(server)"},{"line_number":8406,"context_line":"        self._check_resource_released(server)"},{"line_number":8407,"context_line":""},{"line_number":8408,"context_line":"    def test_create_with_two_accels_all_binding_error(self):"},{"line_number":8409,"context_line":"        def throw_error(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":26,"id":"3599adfa_ea0b2050","line":8406,"in_reply_to":"329517fb_1b23a290","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8410,"context_line":"            raise exception.BuildAbortException(reason\u003d\u0027\u0027,"},{"line_number":8411,"context_line":"                    instance_uuid\u003d\u0027fake\u0027)"},{"line_number":8412,"context_line":"        self.stub_out(\u0027nova.accelerator.cyborg._CyborgClient.bind_arqs\u0027,"},{"line_number":8413,"context_line":"            throw_error)"},{"line_number":8414,"context_line":"        ports \u003d self.neutron.ports_with_accelerator"},{"line_number":8415,"context_line":"        server_name \u003d self.flavor_id"},{"line_number":8416,"context_line":"        server \u003d self._create_server("}],"source_content_type":"text/x-python","patch_set":26,"id":"1106ef91_a1c9f978","line":8413,"updated":"2021-07-14 14:45:47.000000000","message":"This is not realistic. bind_arqs only raise AcceleratorRequestOpFailed exception.","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8410,"context_line":"            raise exception.BuildAbortException(reason\u003d\u0027\u0027,"},{"line_number":8411,"context_line":"                    instance_uuid\u003d\u0027fake\u0027)"},{"line_number":8412,"context_line":"        self.stub_out(\u0027nova.accelerator.cyborg._CyborgClient.bind_arqs\u0027,"},{"line_number":8413,"context_line":"            throw_error)"},{"line_number":8414,"context_line":"        ports \u003d self.neutron.ports_with_accelerator"},{"line_number":8415,"context_line":"        server_name \u003d self.flavor_id"},{"line_number":8416,"context_line":"        server \u003d self._create_server("}],"source_content_type":"text/x-python","patch_set":26,"id":"2f14ba1b_8b9b7aec","line":8413,"in_reply_to":"1106ef91_a1c9f978","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8424,"context_line":""},{"line_number":8425,"context_line":"        # Clean up, no need to delete"},{"line_number":8426,"context_line":"        self._delete_server(server)"},{"line_number":8427,"context_line":"        self._check_no_allocs_usage(server[\"id\"])"},{"line_number":8428,"context_line":""},{"line_number":8429,"context_line":""},{"line_number":8430,"context_line":"class PortAcceleratorServerOpsTest(AcceleratorServerBase):"}],"source_content_type":"text/x-python","patch_set":26,"id":"bf59d209_7e6a9e49","line":8427,"updated":"2021-07-14 14:45:47.000000000","message":"you should assert that the port binding profile is cleaned up and the ARQs are deleted.","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8424,"context_line":""},{"line_number":8425,"context_line":"        # Clean up, no need to delete"},{"line_number":8426,"context_line":"        self._delete_server(server)"},{"line_number":8427,"context_line":"        self._check_no_allocs_usage(server[\"id\"])"},{"line_number":8428,"context_line":""},{"line_number":8429,"context_line":""},{"line_number":8430,"context_line":"class PortAcceleratorServerOpsTest(AcceleratorServerBase):"}],"source_content_type":"text/x-python","patch_set":26,"id":"c2434d38_a0b05c88","line":8427,"in_reply_to":"bf59d209_7e6a9e49","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8466,"context_line":""},{"line_number":8467,"context_line":"    def test_delete_server(self):"},{"line_number":8468,"context_line":"        self._delete_server(self.server)"},{"line_number":8469,"context_line":"        self._check_resource_released()"},{"line_number":8470,"context_line":""},{"line_number":8471,"context_line":"    def test_soft_reboot_ok(self):"},{"line_number":8472,"context_line":"        self._reboot_server(self.server)"}],"source_content_type":"text/x-python","patch_set":26,"id":"a67b210c_e9023dda","line":8469,"updated":"2021-07-14 14:45:47.000000000","message":"you should assert that the port binding profile is cleaned up and the ARQs are deleted.","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8466,"context_line":""},{"line_number":8467,"context_line":"    def test_delete_server(self):"},{"line_number":8468,"context_line":"        self._delete_server(self.server)"},{"line_number":8469,"context_line":"        self._check_resource_released()"},{"line_number":8470,"context_line":""},{"line_number":8471,"context_line":"    def test_soft_reboot_ok(self):"},{"line_number":8472,"context_line":"        self._reboot_server(self.server)"}],"source_content_type":"text/x-python","patch_set":26,"id":"4e2efecb_b208e876","line":8469,"in_reply_to":"a67b210c_e9023dda","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8477,"context_line":"        self._check_allocations_usage(self.server)"},{"line_number":8478,"context_line":""},{"line_number":8479,"context_line":"    def test_pause_unpause_ok(self):"},{"line_number":8480,"context_line":"        # paus and unpause should work with accelerators backed port."},{"line_number":8481,"context_line":"        # This is not a general test of un/pause functionality."},{"line_number":8482,"context_line":"        self.api.post_server_action(self.server[\u0027id\u0027], {\u0027pause\u0027: {}})"},{"line_number":8483,"context_line":"        self._wait_for_state_change(self.server, \u0027PAUSED\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"e0d8c16d_15ae4bbf","line":8480,"range":{"start_line":8480,"start_character":10,"end_line":8480,"end_character":14},"updated":"2021-07-14 14:45:47.000000000","message":"nit:pause","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8477,"context_line":"        self._check_allocations_usage(self.server)"},{"line_number":8478,"context_line":""},{"line_number":8479,"context_line":"    def test_pause_unpause_ok(self):"},{"line_number":8480,"context_line":"        # paus and unpause should work with accelerators backed port."},{"line_number":8481,"context_line":"        # This is not a general test of un/pause functionality."},{"line_number":8482,"context_line":"        self.api.post_server_action(self.server[\u0027id\u0027], {\u0027pause\u0027: {}})"},{"line_number":8483,"context_line":"        self._wait_for_state_change(self.server, \u0027PAUSED\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5e1361ce_496b8fc6","line":8480,"range":{"start_line":8480,"start_character":10,"end_line":8480,"end_character":14},"in_reply_to":"e0d8c16d_15ae4bbf","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8577,"context_line":"        self._check_allocations_usage(self.server)"},{"line_number":8578,"context_line":""},{"line_number":8579,"context_line":"    def test_shelve_reject(self):"},{"line_number":8580,"context_line":"        self.flags(compute\u003d5.0, group\u003d\u0027upgrade_levels\u0027)"},{"line_number":8581,"context_line":"        compute_rpcapi.reset_globals()"},{"line_number":8582,"context_line":"        ex \u003d self.assertRaises("},{"line_number":8583,"context_line":"            client.OpenStackApiException, self.api.post_server_action,"}],"source_content_type":"text/x-python","patch_set":26,"id":"0be7689d_9f9ce63b","line":8580,"updated":"2021-07-14 14:45:47.000000000","message":"Why the compute RPC is pinned to 5.0 for this test?","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8577,"context_line":"        self._check_allocations_usage(self.server)"},{"line_number":8578,"context_line":""},{"line_number":8579,"context_line":"    def test_shelve_reject(self):"},{"line_number":8580,"context_line":"        self.flags(compute\u003d5.0, group\u003d\u0027upgrade_levels\u0027)"},{"line_number":8581,"context_line":"        compute_rpcapi.reset_globals()"},{"line_number":8582,"context_line":"        ex \u003d self.assertRaises("},{"line_number":8583,"context_line":"            client.OpenStackApiException, self.api.post_server_action,"}],"source_content_type":"text/x-python","patch_set":26,"id":"dbe7de78_84837747","line":8580,"in_reply_to":"0be7689d_9f9ce63b","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8607,"context_line":"class PortAcceleratorServerCreateRejectTest(AcceleratorServerBase):"},{"line_number":8608,"context_line":""},{"line_number":8609,"context_line":"    def setUp(self):"},{"line_number":8610,"context_line":"        self.NUM_HOSTS \u003d 2  # 2nd host needed for evacuate"},{"line_number":8611,"context_line":"        super(PortAcceleratorServerCreateRejectTest, self).setUp()"},{"line_number":8612,"context_line":"        self.flavor_id \u003d self._create_flavor(name\u003d\u0027tiny\u0027)"},{"line_number":8613,"context_line":"        self.server_name \u003d \u0027port_accel_server\u0027"}],"source_content_type":"text/x-python","patch_set":26,"id":"203d5aa5_e511737b","line":8610,"updated":"2021-07-14 14:45:47.000000000","message":"I think it is a copy paste mistake, this test class does not have any evacuate test","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8607,"context_line":"class PortAcceleratorServerCreateRejectTest(AcceleratorServerBase):"},{"line_number":8608,"context_line":""},{"line_number":8609,"context_line":"    def setUp(self):"},{"line_number":8610,"context_line":"        self.NUM_HOSTS \u003d 2  # 2nd host needed for evacuate"},{"line_number":8611,"context_line":"        super(PortAcceleratorServerCreateRejectTest, self).setUp()"},{"line_number":8612,"context_line":"        self.flavor_id \u003d self._create_flavor(name\u003d\u0027tiny\u0027)"},{"line_number":8613,"context_line":"        self.server_name \u003d \u0027port_accel_server\u0027"}],"source_content_type":"text/x-python","patch_set":26,"id":"c0b88b60_6242cb2a","line":8610,"in_reply_to":"203d5aa5_e511737b","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8620,"context_line":"        self.neutron._ports[self.port[\u0027id\u0027]] \u003d copy.deepcopy(self.port)"},{"line_number":8621,"context_line":""},{"line_number":8622,"context_line":"    def test_reject_multi_divece_port(self):"},{"line_number":8623,"context_line":"        def get_dev_amount(*args, **kwargs):"},{"line_number":8624,"context_line":"            return 3"},{"line_number":8625,"context_line":"        self.stub_out(\u0027nova.accelerator.cyborg.get_device_amount_of_dp_groups\u0027,"},{"line_number":8626,"context_line":"            get_dev_amount)"},{"line_number":8627,"context_line":"        ex \u003d self.assertRaises(client.OpenStackApiException,"},{"line_number":8628,"context_line":"            self._create_server,"},{"line_number":8629,"context_line":"            self.server_name, flavor_id\u003dself.flavor_id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"2541e9d7_8bd9f77f","line":8626,"range":{"start_line":8623,"start_character":0,"end_line":8626,"end_character":27},"updated":"2021-07-14 14:45:47.000000000","message":"that is not really a functional test any more. Could you set up the cyborg fixture in a way that it returns a device profile with a request group asking for more then one resource?","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8620,"context_line":"        self.neutron._ports[self.port[\u0027id\u0027]] \u003d copy.deepcopy(self.port)"},{"line_number":8621,"context_line":""},{"line_number":8622,"context_line":"    def test_reject_multi_divece_port(self):"},{"line_number":8623,"context_line":"        def get_dev_amount(*args, **kwargs):"},{"line_number":8624,"context_line":"            return 3"},{"line_number":8625,"context_line":"        self.stub_out(\u0027nova.accelerator.cyborg.get_device_amount_of_dp_groups\u0027,"},{"line_number":8626,"context_line":"            get_dev_amount)"},{"line_number":8627,"context_line":"        ex \u003d self.assertRaises(client.OpenStackApiException,"},{"line_number":8628,"context_line":"            self._create_server,"},{"line_number":8629,"context_line":"            self.server_name, flavor_id\u003dself.flavor_id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"4f08ada8_66595e1d","line":8626,"range":{"start_line":8623,"start_character":0,"end_line":8626,"end_character":27},"in_reply_to":"2541e9d7_8bd9f77f","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8632,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":8633,"context_line":""},{"line_number":8634,"context_line":"    def test_reject_if_have_old_version_service(self):"},{"line_number":8635,"context_line":"        def get_mini_version(*args, **kwargs):"},{"line_number":8636,"context_line":"            return 56"},{"line_number":8637,"context_line":"        self.stub_out(\u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":8638,"context_line":"            get_mini_version)"}],"source_content_type":"text/x-python","patch_set":26,"id":"89a323cc_c82b835c","line":8635,"range":{"start_line":8635,"start_character":12,"end_line":8635,"end_character":28},"updated":"2021-07-14 14:45:47.000000000","message":"nit: get_min_version","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8632,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":8633,"context_line":""},{"line_number":8634,"context_line":"    def test_reject_if_have_old_version_service(self):"},{"line_number":8635,"context_line":"        def get_mini_version(*args, **kwargs):"},{"line_number":8636,"context_line":"            return 56"},{"line_number":8637,"context_line":"        self.stub_out(\u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":8638,"context_line":"            get_mini_version)"}],"source_content_type":"text/x-python","patch_set":26,"id":"55ddea94_32d92914","line":8635,"range":{"start_line":8635,"start_character":12,"end_line":8635,"end_character":28},"in_reply_to":"89a323cc_c82b835c","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eba60b85f204eae723cb54210b9777d57d4d978b","unresolved":true,"context_lines":[{"line_number":8643,"context_line":"            networks\u003d[{\u0027port\u0027: self.port[\u0027id\u0027]}], expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8644,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":8645,"context_line":""},{"line_number":8646,"context_line":""},{"line_number":8647,"context_line":"class CrossCellResizeWithQoSPort(PortResourceRequestBasedSchedulingTestBase):"},{"line_number":8648,"context_line":"    NUMBER_OF_CELLS \u003d 2"},{"line_number":8649,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"725eb124_cfd04229","line":8646,"updated":"2021-07-14 14:45:47.000000000","message":"1) Do we support server creation with a flavor that requests an accelerator while the same create request also has ports requesting acceleratos? If yes then a test case would be nice to show that it works. If not then another test case showing that such request is rejected would be nice instead.\n\n2) what happens when a port with a device profile is detached from a running instance?\n\n3) what happens when a port with device profile is attached to a running instance?","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"5def75ed54a824832622ab1d1dea9151637e4098","unresolved":false,"context_lines":[{"line_number":8643,"context_line":"            networks\u003d[{\u0027port\u0027: self.port[\u0027id\u0027]}], expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8644,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":8645,"context_line":""},{"line_number":8646,"context_line":""},{"line_number":8647,"context_line":"class CrossCellResizeWithQoSPort(PortResourceRequestBasedSchedulingTestBase):"},{"line_number":8648,"context_line":"    NUMBER_OF_CELLS \u003d 2"},{"line_number":8649,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"18bd9f1f_864fb172","line":8646,"in_reply_to":"725eb124_cfd04229","updated":"2021-07-15 12:08:45.000000000","message":"Done","commit_id":"1f6aa8d4798ce28a56be372e4fc2cc131f98a592"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"119319da2ccd718b017a0a2b40f0b4e0bf2d676e","unresolved":true,"context_lines":[{"line_number":7817,"context_line":""},{"line_number":7818,"context_line":"        # host0 have most arqs setup, except the last one"},{"line_number":7819,"context_line":"        # host1 have the last arq of cyborg arqs list"},{"line_number":7820,"context_line":"        for host_index, uuid in enumerate(self.compute_rp_uuids):"},{"line_number":7821,"context_line":"            if host_index \u003d\u003d 0:"},{"line_number":7822,"context_line":"                device_rp_uuid_per_host \u003d []"},{"line_number":7823,"context_line":"                # host0 have most arqs setup, except the last one"}],"source_content_type":"text/x-python","patch_set":27,"id":"bdc260c3_9214e088","line":7820,"range":{"start_line":7820,"start_character":24,"end_line":7820,"end_character":28},"updated":"2021-07-16 07:06:21.000000000","message":"better change to host_rp_uuid","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"363639600d59ec9ac446c75676b4f78f417112f6","unresolved":false,"context_lines":[{"line_number":7817,"context_line":""},{"line_number":7818,"context_line":"        # host0 have most arqs setup, except the last one"},{"line_number":7819,"context_line":"        # host1 have the last arq of cyborg arqs list"},{"line_number":7820,"context_line":"        for host_index, uuid in enumerate(self.compute_rp_uuids):"},{"line_number":7821,"context_line":"            if host_index \u003d\u003d 0:"},{"line_number":7822,"context_line":"                device_rp_uuid_per_host \u003d []"},{"line_number":7823,"context_line":"                # host0 have most arqs setup, except the last one"}],"source_content_type":"text/x-python","patch_set":27,"id":"e99d49bd_c22447ba","line":7820,"range":{"start_line":7820,"start_character":24,"end_line":7820,"end_character":28},"in_reply_to":"bdc260c3_9214e088","updated":"2021-07-16 07:33:40.000000000","message":"Done","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"119319da2ccd718b017a0a2b40f0b4e0bf2d676e","unresolved":true,"context_lines":[{"line_number":7826,"context_line":"                    device_rp_uuid \u003d self._create_device_rp(i, uuid)"},{"line_number":7827,"context_line":"                    self.device_rp_uuids.append(device_rp_uuid)"},{"line_number":7828,"context_line":"                    device_rp_uuid_per_host.append(device_rp_uuid)"},{"line_number":7829,"context_line":"                host_rp \u003d uuid"},{"line_number":7830,"context_line":"                self.device_rp_map[host_rp] \u003d device_rp_uuid_per_host"},{"line_number":7831,"context_line":"            else:"},{"line_number":7832,"context_line":"                # other hosts have only the last one arq"}],"source_content_type":"text/x-python","patch_set":27,"id":"344a1d89_46f3486c","line":7829,"range":{"start_line":7829,"start_character":16,"end_line":7829,"end_character":30},"updated":"2021-07-16 07:06:21.000000000","message":"could be eliminated.","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"363639600d59ec9ac446c75676b4f78f417112f6","unresolved":false,"context_lines":[{"line_number":7826,"context_line":"                    device_rp_uuid \u003d self._create_device_rp(i, uuid)"},{"line_number":7827,"context_line":"                    self.device_rp_uuids.append(device_rp_uuid)"},{"line_number":7828,"context_line":"                    device_rp_uuid_per_host.append(device_rp_uuid)"},{"line_number":7829,"context_line":"                host_rp \u003d uuid"},{"line_number":7830,"context_line":"                self.device_rp_map[host_rp] \u003d device_rp_uuid_per_host"},{"line_number":7831,"context_line":"            else:"},{"line_number":7832,"context_line":"                # other hosts have only the last one arq"}],"source_content_type":"text/x-python","patch_set":27,"id":"9ea1fa25_6a45df93","line":7829,"range":{"start_line":7829,"start_character":16,"end_line":7829,"end_character":30},"in_reply_to":"344a1d89_46f3486c","updated":"2021-07-16 07:33:40.000000000","message":"Done","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"119319da2ccd718b017a0a2b40f0b4e0bf2d676e","unresolved":true,"context_lines":[{"line_number":7834,"context_line":"                host0_dev_num \u003d len(self.cyborg.arq_list[0:-2])"},{"line_number":7835,"context_line":"                device_rp_uuid \u003d self._create_device_rp("},{"line_number":7836,"context_line":"                    host_index + host0_dev_num,"},{"line_number":7837,"context_line":"                    self.compute_rp_uuids[host_index])"},{"line_number":7838,"context_line":"                self.device_rp_uuids.append(device_rp_uuid)"},{"line_number":7839,"context_line":"                host_rp \u003d self.compute_rp_uuids[host_index]"},{"line_number":7840,"context_line":"                self.device_rp_map[host_rp] \u003d [device_rp_uuid]"}],"source_content_type":"text/x-python","patch_set":27,"id":"808c1387_46edddc2","line":7837,"range":{"start_line":7837,"start_character":20,"end_line":7837,"end_character":53},"updated":"2021-07-16 07:06:21.000000000","message":"use host_rp_uuid direct","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"363639600d59ec9ac446c75676b4f78f417112f6","unresolved":false,"context_lines":[{"line_number":7834,"context_line":"                host0_dev_num \u003d len(self.cyborg.arq_list[0:-2])"},{"line_number":7835,"context_line":"                device_rp_uuid \u003d self._create_device_rp("},{"line_number":7836,"context_line":"                    host_index + host0_dev_num,"},{"line_number":7837,"context_line":"                    self.compute_rp_uuids[host_index])"},{"line_number":7838,"context_line":"                self.device_rp_uuids.append(device_rp_uuid)"},{"line_number":7839,"context_line":"                host_rp \u003d self.compute_rp_uuids[host_index]"},{"line_number":7840,"context_line":"                self.device_rp_map[host_rp] \u003d [device_rp_uuid]"}],"source_content_type":"text/x-python","patch_set":27,"id":"1144e54e_832d4d9d","line":7837,"range":{"start_line":7837,"start_character":20,"end_line":7837,"end_character":53},"in_reply_to":"808c1387_46edddc2","updated":"2021-07-16 07:33:40.000000000","message":"Done","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"2c10664ff1c4291a40f5c29a074a11f9530c4646","unresolved":true,"context_lines":[{"line_number":7897,"context_line":"        alloc_dev_nums \u003d 0"},{"line_number":7898,"context_line":"        for i in range(self.NUM_HOSTS):"},{"line_number":7899,"context_line":"            compute_uuid \u003d self.compute_rp_uuids[i]"},{"line_number":7900,"context_line":"            device_rp_uuids \u003d self.device_rp_map[compute_uuid]"},{"line_number":7901,"context_line":"            host_alloc \u003d self._get_allocations_by_provider_uuid(compute_uuid)"},{"line_number":7902,"context_line":"            if device_rp_uuids is not None:"},{"line_number":7903,"context_line":"                for device_rp_uuid in device_rp_uuids:"}],"source_content_type":"text/x-python","patch_set":27,"id":"f4e64ab9_83fbec28","line":7900,"range":{"start_line":7900,"start_character":12,"end_line":7900,"end_character":62},"updated":"2021-07-16 07:22:09.000000000","message":"could be remove","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"363639600d59ec9ac446c75676b4f78f417112f6","unresolved":false,"context_lines":[{"line_number":7897,"context_line":"        alloc_dev_nums \u003d 0"},{"line_number":7898,"context_line":"        for i in range(self.NUM_HOSTS):"},{"line_number":7899,"context_line":"            compute_uuid \u003d self.compute_rp_uuids[i]"},{"line_number":7900,"context_line":"            device_rp_uuids \u003d self.device_rp_map[compute_uuid]"},{"line_number":7901,"context_line":"            host_alloc \u003d self._get_allocations_by_provider_uuid(compute_uuid)"},{"line_number":7902,"context_line":"            if device_rp_uuids is not None:"},{"line_number":7903,"context_line":"                for device_rp_uuid in device_rp_uuids:"}],"source_content_type":"text/x-python","patch_set":27,"id":"d9348ef2_48fcce9d","line":7900,"range":{"start_line":7900,"start_character":12,"end_line":7900,"end_character":62},"in_reply_to":"f4e64ab9_83fbec28","updated":"2021-07-16 07:33:40.000000000","message":"Done","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"2c10664ff1c4291a40f5c29a074a11f9530c4646","unresolved":true,"context_lines":[{"line_number":7898,"context_line":"        for i in range(self.NUM_HOSTS):"},{"line_number":7899,"context_line":"            compute_uuid \u003d self.compute_rp_uuids[i]"},{"line_number":7900,"context_line":"            device_rp_uuids \u003d self.device_rp_map[compute_uuid]"},{"line_number":7901,"context_line":"            host_alloc \u003d self._get_allocations_by_provider_uuid(compute_uuid)"},{"line_number":7902,"context_line":"            if device_rp_uuids is not None:"},{"line_number":7903,"context_line":"                for device_rp_uuid in device_rp_uuids:"},{"line_number":7904,"context_line":"                    device_alloc \u003d ("}],"source_content_type":"text/x-python","patch_set":27,"id":"0e4eaef4_0f477d82","line":7901,"range":{"start_line":7901,"start_character":12,"end_line":7901,"end_character":77},"updated":"2021-07-16 07:22:09.000000000","message":"regular resources, move to 7920 for readability.","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"363639600d59ec9ac446c75676b4f78f417112f6","unresolved":false,"context_lines":[{"line_number":7898,"context_line":"        for i in range(self.NUM_HOSTS):"},{"line_number":7899,"context_line":"            compute_uuid \u003d self.compute_rp_uuids[i]"},{"line_number":7900,"context_line":"            device_rp_uuids \u003d self.device_rp_map[compute_uuid]"},{"line_number":7901,"context_line":"            host_alloc \u003d self._get_allocations_by_provider_uuid(compute_uuid)"},{"line_number":7902,"context_line":"            if device_rp_uuids is not None:"},{"line_number":7903,"context_line":"                for device_rp_uuid in device_rp_uuids:"},{"line_number":7904,"context_line":"                    device_alloc \u003d ("}],"source_content_type":"text/x-python","patch_set":27,"id":"9de86d84_c147e6ab","line":7901,"range":{"start_line":7901,"start_character":12,"end_line":7901,"end_character":77},"in_reply_to":"0e4eaef4_0f477d82","updated":"2021-07-16 07:33:40.000000000","message":"Done","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"2c10664ff1c4291a40f5c29a074a11f9530c4646","unresolved":true,"context_lines":[{"line_number":7922,"context_line":"            else:"},{"line_number":7923,"context_line":"                if check_other_host_alloc:"},{"line_number":7924,"context_line":"                    self.assertEqual({}, host_alloc)"},{"line_number":7925,"context_line":"        self.assertEqual(dev_alloced, alloc_dev_nums)"},{"line_number":7926,"context_line":""},{"line_number":7927,"context_line":"        # NOTE(Sundar): ARQs for an instance could come from different"},{"line_number":7928,"context_line":"        # devices in the same host, in general."}],"source_content_type":"text/x-python","patch_set":27,"id":"05aac53c_d82b97b5","line":7925,"range":{"start_line":7925,"start_character":8,"end_line":7925,"end_character":53},"updated":"2021-07-16 07:22:09.000000000","message":"better insert a black line for readable.","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"363639600d59ec9ac446c75676b4f78f417112f6","unresolved":false,"context_lines":[{"line_number":7922,"context_line":"            else:"},{"line_number":7923,"context_line":"                if check_other_host_alloc:"},{"line_number":7924,"context_line":"                    self.assertEqual({}, host_alloc)"},{"line_number":7925,"context_line":"        self.assertEqual(dev_alloced, alloc_dev_nums)"},{"line_number":7926,"context_line":""},{"line_number":7927,"context_line":"        # NOTE(Sundar): ARQs for an instance could come from different"},{"line_number":7928,"context_line":"        # devices in the same host, in general."}],"source_content_type":"text/x-python","patch_set":27,"id":"313bba35_cdac1518","line":7925,"range":{"start_line":7925,"start_character":8,"end_line":7925,"end_character":53},"in_reply_to":"05aac53c_d82b97b5","updated":"2021-07-16 07:33:40.000000000","message":"Done","commit_id":"5996e2f2dea12d3aa5d29218d8cd4b67c8755e1b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":7826,"context_line":"        for host_index, host_rp_uuid in enumerate(self.compute_rp_uuids):"},{"line_number":7827,"context_line":"            if host_index \u003d\u003d 0:"},{"line_number":7828,"context_line":"                host_dev_rps \u003d []"},{"line_number":7829,"context_line":"                # host0 have most arqs setup, except the last one"},{"line_number":7830,"context_line":"                for i, _ in enumerate(self.cyborg.arq_list[0:-2]):"},{"line_number":7831,"context_line":"                    device_rp \u003d self._create_device_rp(i, host_rp_uuid)"},{"line_number":7832,"context_line":"                    host_dev_rps.append(device_rp)"},{"line_number":7833,"context_line":"                self.device_rp_map[host_rp_uuid] \u003d host_dev_rps"}],"source_content_type":"text/x-python","patch_set":28,"id":"f2b70b39_abc3d83b","line":7830,"range":{"start_line":7829,"start_character":16,"end_line":7830,"end_character":66},"updated":"2021-08-04 11:31:19.000000000","message":"if host0 has all the arqs except the last one the why the code enumerate all the arqs from the self.cyborg.arq_list except the last two? I.e why self.cyborg.arq_list[0:-2] instead of self.cyborg.arq_list[0:-1]?","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":7826,"context_line":"        for host_index, host_rp_uuid in enumerate(self.compute_rp_uuids):"},{"line_number":7827,"context_line":"            if host_index \u003d\u003d 0:"},{"line_number":7828,"context_line":"                host_dev_rps \u003d []"},{"line_number":7829,"context_line":"                # host0 have most arqs setup, except the last one"},{"line_number":7830,"context_line":"                for i, _ in enumerate(self.cyborg.arq_list[0:-2]):"},{"line_number":7831,"context_line":"                    device_rp \u003d self._create_device_rp(i, host_rp_uuid)"},{"line_number":7832,"context_line":"                    host_dev_rps.append(device_rp)"},{"line_number":7833,"context_line":"                self.device_rp_map[host_rp_uuid] \u003d host_dev_rps"}],"source_content_type":"text/x-python","patch_set":28,"id":"08f89c44_09570c8c","line":7830,"range":{"start_line":7829,"start_character":16,"end_line":7830,"end_character":66},"in_reply_to":"f2b70b39_abc3d83b","updated":"2021-08-05 08:03:55.000000000","message":"Done","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":7899,"context_line":"        for i in range(self.NUM_HOSTS):"},{"line_number":7900,"context_line":"            # gathering allocated device on this host"},{"line_number":7901,"context_line":"            compute_uuid \u003d self.compute_rp_uuids[i]"},{"line_number":7902,"context_line":"            if self.device_rp_map[compute_uuid] is not None:"},{"line_number":7903,"context_line":"                for device_rp_uuid in self.device_rp_map[compute_uuid]:"},{"line_number":7904,"context_line":"                    device_alloc \u003d ("},{"line_number":7905,"context_line":"                        self._get_allocations_by_provider_uuid(device_rp_uuid))"},{"line_number":7906,"context_line":"                    if device_alloc:"}],"source_content_type":"text/x-python","patch_set":28,"id":"98bd00b8_23886056","line":7903,"range":{"start_line":7902,"start_character":12,"end_line":7903,"end_character":71},"updated":"2021-08-04 11:31:19.000000000","message":"I don\u0027t see how self.device_rp_map[compute_uuid] be None. In _setup_compute_nodes_and_device_rps() the code created an empty or non empty list for each compute_rp_uuid in the dict","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":7899,"context_line":"        for i in range(self.NUM_HOSTS):"},{"line_number":7900,"context_line":"            # gathering allocated device on this host"},{"line_number":7901,"context_line":"            compute_uuid \u003d self.compute_rp_uuids[i]"},{"line_number":7902,"context_line":"            if self.device_rp_map[compute_uuid] is not None:"},{"line_number":7903,"context_line":"                for device_rp_uuid in self.device_rp_map[compute_uuid]:"},{"line_number":7904,"context_line":"                    device_alloc \u003d ("},{"line_number":7905,"context_line":"                        self._get_allocations_by_provider_uuid(device_rp_uuid))"},{"line_number":7906,"context_line":"                    if device_alloc:"}],"source_content_type":"text/x-python","patch_set":28,"id":"879df1e4_f57ec4d5","line":7903,"range":{"start_line":7902,"start_character":12,"end_line":7903,"end_character":71},"in_reply_to":"98bd00b8_23886056","updated":"2021-08-05 08:03:55.000000000","message":"Nice catch. Over cautious code style.","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":7915,"context_line":"                        # ------- {\u0027resources\u0027: {\u0027FPGA\u0027: 1}}"},{"line_number":7916,"context_line":"                        for i in range(res.get(\u0027FPGA\u0027, 0)):"},{"line_number":7917,"context_line":"                            allocated_device_rps.append(device_rp_uuid)"},{"line_number":7918,"context_line":"                    else:"},{"line_number":7919,"context_line":"                        continue"},{"line_number":7920,"context_line":""},{"line_number":7921,"context_line":"            # host regular resources assert"},{"line_number":7922,"context_line":"            host_alloc \u003d self._get_allocations_by_provider_uuid(compute_uuid)"}],"source_content_type":"text/x-python","patch_set":28,"id":"805d955c_3635cb6f","line":7919,"range":{"start_line":7918,"start_character":20,"end_line":7919,"end_character":32},"updated":"2021-08-04 11:31:19.000000000","message":"as this is the last thing you do in the for loop having else: continue has the same effect as not having anything here","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":7915,"context_line":"                        # ------- {\u0027resources\u0027: {\u0027FPGA\u0027: 1}}"},{"line_number":7916,"context_line":"                        for i in range(res.get(\u0027FPGA\u0027, 0)):"},{"line_number":7917,"context_line":"                            allocated_device_rps.append(device_rp_uuid)"},{"line_number":7918,"context_line":"                    else:"},{"line_number":7919,"context_line":"                        continue"},{"line_number":7920,"context_line":""},{"line_number":7921,"context_line":"            # host regular resources assert"},{"line_number":7922,"context_line":"            host_alloc \u003d self._get_allocations_by_provider_uuid(compute_uuid)"}],"source_content_type":"text/x-python","patch_set":28,"id":"f70077e7_9772650d","line":7919,"range":{"start_line":7918,"start_character":20,"end_line":7919,"end_character":32},"in_reply_to":"805d955c_3635cb6f","updated":"2021-08-05 08:03:55.000000000","message":"Done","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":7927,"context_line":"                    self.assertEqual({}, host_alloc)"},{"line_number":7928,"context_line":""},{"line_number":7929,"context_line":"        # allocated smartnic devices asserts"},{"line_number":7930,"context_line":"        self.assertEqual(dev_alloced, alloc_dev_nums)"},{"line_number":7931,"context_line":""},{"line_number":7932,"context_line":"        # NOTE(Sundar): ARQs for an instance could come from different"},{"line_number":7933,"context_line":"        # devices in the same host, in general."}],"source_content_type":"text/x-python","patch_set":28,"id":"d81a3e16_0b24c496","line":7930,"updated":"2021-08-04 11:31:19.000000000","message":"This is now only checks if the number of devices allocated in the whole system is equal to the number of requested devices. But it does not check that for the same server the devices and the regular resources (cpu, mem, disk) are allocated from the same compute provider tree.","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":7927,"context_line":"                    self.assertEqual({}, host_alloc)"},{"line_number":7928,"context_line":""},{"line_number":7929,"context_line":"        # allocated smartnic devices asserts"},{"line_number":7930,"context_line":"        self.assertEqual(dev_alloced, alloc_dev_nums)"},{"line_number":7931,"context_line":""},{"line_number":7932,"context_line":"        # NOTE(Sundar): ARQs for an instance could come from different"},{"line_number":7933,"context_line":"        # devices in the same host, in general."}],"source_content_type":"text/x-python","patch_set":28,"id":"fdac1b10_99fc7e6e","line":7930,"in_reply_to":"d81a3e16_0b24c496","updated":"2021-08-05 08:03:55.000000000","message":"By refactor the logic, we now ensure this check.","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":8424,"context_line":"                      {\u0027port\u0027: ports[1][\u0027id\u0027]}"},{"line_number":8425,"context_line":"                    ],"},{"line_number":8426,"context_line":"                  expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8427,"context_line":"        self._check_allocations_usage(server, dev_alloced\u003d2)"},{"line_number":8428,"context_line":"        # Clean up"},{"line_number":8429,"context_line":"        self._delete_server(server)"},{"line_number":8430,"context_line":"        self._check_no_allocs_usage(server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"e37dce73_a02eaa57","line":8427,"updated":"2021-08-04 11:31:19.000000000","message":"So this check that placement has proper allocation, two devices allocated as you boot with two ports each requesting a single device. Also it checks that the cyborg arqs are bound to the host the server runs on.\n\nBut as I asked in PS26, the state of neutron port bindings should be asserted too.","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":8424,"context_line":"                      {\u0027port\u0027: ports[1][\u0027id\u0027]}"},{"line_number":8425,"context_line":"                    ],"},{"line_number":8426,"context_line":"                  expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8427,"context_line":"        self._check_allocations_usage(server, dev_alloced\u003d2)"},{"line_number":8428,"context_line":"        # Clean up"},{"line_number":8429,"context_line":"        self._delete_server(server)"},{"line_number":8430,"context_line":"        self._check_no_allocs_usage(server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"2e39fcd0_af7fb074","line":8427,"in_reply_to":"e37dce73_a02eaa57","updated":"2021-08-05 08:03:55.000000000","message":"neutron binding cleanup is checked in self._check_neutron_binding_info_cleaned()","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":8425,"context_line":"                    ],"},{"line_number":8426,"context_line":"                  expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8427,"context_line":"        self._check_allocations_usage(server, dev_alloced\u003d2)"},{"line_number":8428,"context_line":"        # Clean up"},{"line_number":8429,"context_line":"        self._delete_server(server)"},{"line_number":8430,"context_line":"        self._check_no_allocs_usage(server[\u0027id\u0027])"},{"line_number":8431,"context_line":"        self._check_resource_released(server)"}],"source_content_type":"text/x-python","patch_set":28,"id":"78ac1c3f_51785fed","line":8428,"updated":"2021-08-04 11:31:19.000000000","message":"So the asserts below checks placement resource usage and allocation, and checks the neutron binding profile. However it still not checks that the cyborgs ARQs are deleted after the server is deleted. See my comment from PS26","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":8425,"context_line":"                    ],"},{"line_number":8426,"context_line":"                  expected_state\u003d\u0027ACTIVE\u0027)"},{"line_number":8427,"context_line":"        self._check_allocations_usage(server, dev_alloced\u003d2)"},{"line_number":8428,"context_line":"        # Clean up"},{"line_number":8429,"context_line":"        self._delete_server(server)"},{"line_number":8430,"context_line":"        self._check_no_allocs_usage(server[\u0027id\u0027])"},{"line_number":8431,"context_line":"        self._check_resource_released(server)"}],"source_content_type":"text/x-python","patch_set":28,"id":"6e62ae1f_99b19b5d","line":8428,"in_reply_to":"78ac1c3f_51785fed","updated":"2021-08-05 08:03:55.000000000","message":"add arq allocated checked into self._check_resource_released(server), so it shared for all test cases.","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":8452,"context_line":"        # Clean up, no need to delete"},{"line_number":8453,"context_line":"        self._delete_server(server)"},{"line_number":8454,"context_line":"        self._check_no_allocs_usage(server[\"id\"])"},{"line_number":8455,"context_line":"        self._check_neutron_binding_info_cleaned()"},{"line_number":8456,"context_line":""},{"line_number":8457,"context_line":""},{"line_number":8458,"context_line":"class PortAcceleratorServerOpsTest(AcceleratorServerBase):"}],"source_content_type":"text/x-python","patch_set":28,"id":"57a3972c_67cc2cf6","line":8455,"updated":"2021-08-04 11:31:19.000000000","message":"OK, so now the neutron binding cleanup is checked, but you still not check that the ARQs are cleaned up in cyborg too. (See comment from PS26)","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":8452,"context_line":"        # Clean up, no need to delete"},{"line_number":8453,"context_line":"        self._delete_server(server)"},{"line_number":8454,"context_line":"        self._check_no_allocs_usage(server[\"id\"])"},{"line_number":8455,"context_line":"        self._check_neutron_binding_info_cleaned()"},{"line_number":8456,"context_line":""},{"line_number":8457,"context_line":""},{"line_number":8458,"context_line":"class PortAcceleratorServerOpsTest(AcceleratorServerBase):"}],"source_content_type":"text/x-python","patch_set":28,"id":"0d193d55_7ea7cde6","line":8455,"in_reply_to":"57a3972c_67cc2cf6","updated":"2021-08-05 08:03:55.000000000","message":"add arq allocated checked into self._check_resource_released(server), so it shared for all test cases.","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":8501,"context_line":"        updated_port \u003d self.neutron.show_port(port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":8502,"context_line":"        binding_profile \u003d neutronapi.get_binding_profile(updated_port)"},{"line_number":8503,"context_line":"        self.assertNotIn(\u0027arq_uuid\u0027, binding_profile)"},{"line_number":8504,"context_line":"        self.assertNotIn(\u0027pci_slot\u0027, binding_profile)"},{"line_number":8505,"context_line":""},{"line_number":8506,"context_line":"    def test_soft_reboot_ok(self):"},{"line_number":8507,"context_line":"        self._reboot_server(self.server)"}],"source_content_type":"text/x-python","patch_set":28,"id":"a07938b4_951e9426","line":8504,"updated":"2021-08-04 11:31:19.000000000","message":"Please assert that the cyborg ARQs are also cleaned up","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":8501,"context_line":"        updated_port \u003d self.neutron.show_port(port[\u0027id\u0027])[\u0027port\u0027]"},{"line_number":8502,"context_line":"        binding_profile \u003d neutronapi.get_binding_profile(updated_port)"},{"line_number":8503,"context_line":"        self.assertNotIn(\u0027arq_uuid\u0027, binding_profile)"},{"line_number":8504,"context_line":"        self.assertNotIn(\u0027pci_slot\u0027, binding_profile)"},{"line_number":8505,"context_line":""},{"line_number":8506,"context_line":"    def test_soft_reboot_ok(self):"},{"line_number":8507,"context_line":"        self._reboot_server(self.server)"}],"source_content_type":"text/x-python","patch_set":28,"id":"8d3a06b3_bf653585","line":8504,"in_reply_to":"a07938b4_951e9426","updated":"2021-08-05 08:03:55.000000000","message":"add arq allocated checked into self._check_resource_released(server), so it shared for all test cases.","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":8612,"context_line":"        self._check_allocations_usage(self.server)"},{"line_number":8613,"context_line":""},{"line_number":8614,"context_line":"    def test_shelve_reject(self):"},{"line_number":8615,"context_line":"        self.flags(group\u003d\u0027upgrade_levels\u0027)"},{"line_number":8616,"context_line":"        compute_rpcapi.reset_globals()"},{"line_number":8617,"context_line":"        ex \u003d self.assertRaises("},{"line_number":8618,"context_line":"            client.OpenStackApiException, self.api.post_server_action,"}],"source_content_type":"text/x-python","patch_set":28,"id":"ce35a9a7_fef0ef82","line":8615,"range":{"start_line":8615,"start_character":8,"end_line":8615,"end_character":42},"updated":"2021-08-04 11:31:19.000000000","message":"drop it. flags with only a group name is basically noop","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":8612,"context_line":"        self._check_allocations_usage(self.server)"},{"line_number":8613,"context_line":""},{"line_number":8614,"context_line":"    def test_shelve_reject(self):"},{"line_number":8615,"context_line":"        self.flags(group\u003d\u0027upgrade_levels\u0027)"},{"line_number":8616,"context_line":"        compute_rpcapi.reset_globals()"},{"line_number":8617,"context_line":"        ex \u003d self.assertRaises("},{"line_number":8618,"context_line":"            client.OpenStackApiException, self.api.post_server_action,"}],"source_content_type":"text/x-python","patch_set":28,"id":"a52741fc_72544165","line":8615,"range":{"start_line":8615,"start_character":8,"end_line":8615,"end_character":42},"in_reply_to":"ce35a9a7_fef0ef82","updated":"2021-08-05 08:03:55.000000000","message":"Done","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":8620,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":8621,"context_line":""},{"line_number":8622,"context_line":"    def test_shelve_offload_reject(self):"},{"line_number":8623,"context_line":"        self.flags(compute\u003d5.0, group\u003d\u0027upgrade_levels\u0027)"},{"line_number":8624,"context_line":"        compute_rpcapi.reset_globals()"},{"line_number":8625,"context_line":"        ex \u003d self.assertRaises("},{"line_number":8626,"context_line":"            client.OpenStackApiException, self.api.post_server_action,"}],"source_content_type":"text/x-python","patch_set":28,"id":"9260a3a8_889b70d6","line":8623,"range":{"start_line":8623,"start_character":8,"end_line":8623,"end_character":55},"updated":"2021-08-04 11:31:19.000000000","message":"why do you need to pin the compute RPC to 5.0?!","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":8620,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":8621,"context_line":""},{"line_number":8622,"context_line":"    def test_shelve_offload_reject(self):"},{"line_number":8623,"context_line":"        self.flags(compute\u003d5.0, group\u003d\u0027upgrade_levels\u0027)"},{"line_number":8624,"context_line":"        compute_rpcapi.reset_globals()"},{"line_number":8625,"context_line":"        ex \u003d self.assertRaises("},{"line_number":8626,"context_line":"            client.OpenStackApiException, self.api.post_server_action,"}],"source_content_type":"text/x-python","patch_set":28,"id":"23a91314_57387c4c","line":8623,"range":{"start_line":8623,"start_character":8,"end_line":8623,"end_character":55},"in_reply_to":"9260a3a8_889b70d6","updated":"2021-08-05 08:03:55.000000000","message":"Done","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":8645,"context_line":"                    \u0027port_id\u0027: self.port[\u0027id\u0027]"},{"line_number":8646,"context_line":"                }}"},{"line_number":8647,"context_line":"        ex \u003d self.assertRaises("},{"line_number":8648,"context_line":"                client.OpenStackApiException, self.api.attach_interface,"},{"line_number":8649,"context_line":"                self.server[\u0027id\u0027], post)"},{"line_number":8650,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":8651,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5ff29bde_b500853b","line":8648,"range":{"start_line":8648,"start_character":8,"end_line":8648,"end_character":16},"updated":"2021-08-04 11:31:19.000000000","message":"nit: a single indent is enough here","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":8645,"context_line":"                    \u0027port_id\u0027: self.port[\u0027id\u0027]"},{"line_number":8646,"context_line":"                }}"},{"line_number":8647,"context_line":"        ex \u003d self.assertRaises("},{"line_number":8648,"context_line":"                client.OpenStackApiException, self.api.attach_interface,"},{"line_number":8649,"context_line":"                self.server[\u0027id\u0027], post)"},{"line_number":8650,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":8651,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"e0ac03b6_ae4c520d","line":8648,"range":{"start_line":8648,"start_character":8,"end_line":8648,"end_character":16},"in_reply_to":"5ff29bde_b500853b","updated":"2021-08-05 08:03:55.000000000","message":"Done","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":8652,"context_line":"    def test_port_detach_interface_reject(self):"},{"line_number":8653,"context_line":"        # try to add a port with resource request"},{"line_number":8654,"context_line":"        ex \u003d self.assertRaises("},{"line_number":8655,"context_line":"                client.OpenStackApiException, self.api.detach_interface,"},{"line_number":8656,"context_line":"                self.server[\u0027id\u0027], self.port[\u0027id\u0027])"},{"line_number":8657,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":8658,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"4bf4d3d5_c937a1a9","line":8655,"range":{"start_line":8655,"start_character":8,"end_line":8655,"end_character":16},"updated":"2021-08-04 11:31:19.000000000","message":"nit: single indent is enough","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":8652,"context_line":"    def test_port_detach_interface_reject(self):"},{"line_number":8653,"context_line":"        # try to add a port with resource request"},{"line_number":8654,"context_line":"        ex \u003d self.assertRaises("},{"line_number":8655,"context_line":"                client.OpenStackApiException, self.api.detach_interface,"},{"line_number":8656,"context_line":"                self.server[\u0027id\u0027], self.port[\u0027id\u0027])"},{"line_number":8657,"context_line":"        self.assertEqual(400, ex.response.status_code)"},{"line_number":8658,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"243fab77_3189fdec","line":8655,"range":{"start_line":8655,"start_character":8,"end_line":8655,"end_character":16},"in_reply_to":"4bf4d3d5_c937a1a9","updated":"2021-08-05 08:03:55.000000000","message":"Done","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":8703,"context_line":"        self.flavor_id \u003d self._create_acc_flavor()"},{"line_number":8704,"context_line":"        self.server_name \u003d \u0027port_accel_server\u0027"},{"line_number":8705,"context_line":""},{"line_number":8706,"context_line":"        # ccelerator from port: device profile \u0027fakedev-dp-port\u0027"},{"line_number":8707,"context_line":"        self.neutron._networks["},{"line_number":8708,"context_line":"            self.neutron.network_2[\u0027id\u0027]] \u003d self.neutron.network_2"},{"line_number":8709,"context_line":"        self.neutron._subnets["}],"source_content_type":"text/x-python","patch_set":28,"id":"94dab93c_d1c2f7cf","line":8706,"range":{"start_line":8706,"start_character":8,"end_line":8706,"end_character":20},"updated":"2021-08-04 11:31:19.000000000","message":"nit: # accelerator","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":8703,"context_line":"        self.flavor_id \u003d self._create_acc_flavor()"},{"line_number":8704,"context_line":"        self.server_name \u003d \u0027port_accel_server\u0027"},{"line_number":8705,"context_line":""},{"line_number":8706,"context_line":"        # ccelerator from port: device profile \u0027fakedev-dp-port\u0027"},{"line_number":8707,"context_line":"        self.neutron._networks["},{"line_number":8708,"context_line":"            self.neutron.network_2[\u0027id\u0027]] \u003d self.neutron.network_2"},{"line_number":8709,"context_line":"        self.neutron._subnets["}],"source_content_type":"text/x-python","patch_set":28,"id":"c8a468ac_d7fae069","line":8706,"range":{"start_line":8706,"start_character":8,"end_line":8706,"end_character":20},"in_reply_to":"94dab93c_d1c2f7cf","updated":"2021-08-05 08:03:55.000000000","message":"Done","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17cf67ca9517eafe7c862aa81f052fb51e78184c","unresolved":true,"context_lines":[{"line_number":8711,"context_line":"        self.port \u003d self.neutron.ports_with_accelerator[0]"},{"line_number":8712,"context_line":"        self.neutron._ports[self.port[\u0027id\u0027]] \u003d copy.deepcopy(self.port)"},{"line_number":8713,"context_line":""},{"line_number":8714,"context_line":"    def test_accels_from_both_port_and_flavor(self):"},{"line_number":8715,"context_line":"        self.server \u003d self._create_server("},{"line_number":8716,"context_line":"            self.server_name, flavor_id\u003dself.flavor_id,"},{"line_number":8717,"context_line":"            image_uuid\u003d\u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"}],"source_content_type":"text/x-python","patch_set":28,"id":"aaf75fdb_eeb5050c","line":8714,"updated":"2021-08-04 11:31:19.000000000","message":"thanks for this test!","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"8c52b6a00812a11f5ce307eb676439dc8a22540d","unresolved":false,"context_lines":[{"line_number":8711,"context_line":"        self.port \u003d self.neutron.ports_with_accelerator[0]"},{"line_number":8712,"context_line":"        self.neutron._ports[self.port[\u0027id\u0027]] \u003d copy.deepcopy(self.port)"},{"line_number":8713,"context_line":""},{"line_number":8714,"context_line":"    def test_accels_from_both_port_and_flavor(self):"},{"line_number":8715,"context_line":"        self.server \u003d self._create_server("},{"line_number":8716,"context_line":"            self.server_name, flavor_id\u003dself.flavor_id,"},{"line_number":8717,"context_line":"            image_uuid\u003d\u0027155d900f-4e14-4e4c-a73d-069cbf4541e6\u0027,"}],"source_content_type":"text/x-python","patch_set":28,"id":"b92a8c12_010af410","line":8714,"in_reply_to":"aaf75fdb_eeb5050c","updated":"2021-08-05 08:03:55.000000000","message":"Done","commit_id":"215ea31ffea7c06ed0dcbd3f8c86b90947a2e52d"}]}
