)]}'
{"nova/tests/functional/integrated_helpers.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1992cd0c75e6c5d37b485826b89446418fe3549e","unresolved":true,"context_lines":[{"line_number":650,"context_line":"            _body \u003d {\u0027volumeId\u0027: vol_id}"},{"line_number":651,"context_line":"            if tag:"},{"line_number":652,"context_line":"                # same tag for all volumes"},{"line_number":653,"context_line":"                _body.update({\u0027tag\u0027: tag})"},{"line_number":654,"context_line":"            self.api.post_server_volume("},{"line_number":655,"context_line":"                server[\u0027id\u0027], {\u0027volumeAttachment\u0027: _body})"},{"line_number":656,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5fd2d5f5_890d6548","line":653,"updated":"2023-10-02 17:07:39.000000000","message":"I\u0027m on the fence about using the same tag for all volumes. It\u0027s definitely the simplest MVP, and maybe we can leave it at that for the beginning, but ideally we\u0027d change the method signature to accept a dict or a list of tuples or something...","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"2b54a3274e45a26d3dd5ba7492b163654927a798","unresolved":true,"context_lines":[{"line_number":650,"context_line":"            _body \u003d {\u0027volumeId\u0027: vol_id}"},{"line_number":651,"context_line":"            if tag:"},{"line_number":652,"context_line":"                # same tag for all volumes"},{"line_number":653,"context_line":"                _body.update({\u0027tag\u0027: tag})"},{"line_number":654,"context_line":"            self.api.post_server_volume("},{"line_number":655,"context_line":"                server[\u0027id\u0027], {\u0027volumeAttachment\u0027: _body})"},{"line_number":656,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"362367d0_c5a5c1d3","line":653,"in_reply_to":"5fd2d5f5_890d6548","updated":"2023-10-10 07:11:58.000000000","message":"then caller has to pass somthing like this everytime:\n\u003cserver, [(vol1, tag1), (vol2, None), (vol3, None), (vol4, tag4)]\u003e\n\nwe have to pass tag for each request. which is not very frequent for volume attachment tests.\n\nthe worst case scenario for current signature is, if we are attaching 5 vol to 1 server with 5 tags, then caller has to call 5 times for each attachment. which is very rare.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"}],"nova/tests/functional/libvirt/test_device_tagging.py":[{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"178cb41ea0dfe89563e8ccf589213240aa82d249","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        with mock.patch(\u0027nova.network.neutron.API\u0027"},{"line_number":54,"context_line":"                        \u0027.get_fixed_ip_by_address\u0027) as mock_obj:"},{"line_number":55,"context_line":"            mock_obj.return_value \u003d {\u0027instance_uuid\u0027: server[\u0027id\u0027]}"},{"line_number":56,"context_line":"            res \u003d requests.request(\u0027GET\u0027, self.md_url, timeout\u003d1024)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        metadata \u003d res.json()"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3722aa8f_20cbcc63","line":56,"range":{"start_line":56,"start_character":55,"end_line":56,"end_character":67},"updated":"2023-09-14 11:34:54.000000000","message":"temporary for local test","commit_id":"230456e6bc88f792cca6b6dd0376a10867f8cb8d"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"ef29b4ea0aaff1c22abe05caee137719b745b5b7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        with mock.patch(\u0027nova.network.neutron.API\u0027"},{"line_number":54,"context_line":"                        \u0027.get_fixed_ip_by_address\u0027) as mock_obj:"},{"line_number":55,"context_line":"            mock_obj.return_value \u003d {\u0027instance_uuid\u0027: server[\u0027id\u0027]}"},{"line_number":56,"context_line":"            res \u003d requests.request(\u0027GET\u0027, self.md_url, timeout\u003d1024)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        metadata \u003d res.json()"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7b09da3a_db3e8f90","line":56,"range":{"start_line":56,"start_character":55,"end_line":56,"end_character":67},"in_reply_to":"3722aa8f_20cbcc63","updated":"2023-09-27 11:03:09.000000000","message":"Done","commit_id":"230456e6bc88f792cca6b6dd0376a10867f8cb8d"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1992cd0c75e6c5d37b485826b89446418fe3549e","unresolved":true,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class DeviceTaggingTests("},{"line_number":26,"context_line":"    base.ServersTestBase,"},{"line_number":27,"context_line":"    integrated_helpers.InstanceHelperMixin):"},{"line_number":28,"context_line":"    microversion \u003d \"latest\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # base inherted from libvirt so we can use libvirtfixture"}],"source_content_type":"text/x-python","patch_set":6,"id":"c79eccdf_fb245f45","line":27,"updated":"2023-10-02 17:07:39.000000000","message":"I don\u0027t think you need this inheritance, if you follow the base.ServersTestBase parent tree, you get base.ServersTestBase \u003c- integrated_helpers._IntegratedTestBase \u003c- PlacementInstanceHelperMixin \u003c- InstanceHelperMixi","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"8d9958b639810014c11e5ec99711e09802b08508","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class DeviceTaggingTests("},{"line_number":26,"context_line":"    base.ServersTestBase,"},{"line_number":27,"context_line":"    integrated_helpers.InstanceHelperMixin):"},{"line_number":28,"context_line":"    microversion \u003d \"latest\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # base inherted from libvirt so we can use libvirtfixture"}],"source_content_type":"text/x-python","patch_set":6,"id":"55bda87f_03e4f4d1","line":27,"in_reply_to":"c79eccdf_fb245f45","updated":"2023-10-03 05:50:13.000000000","message":"Ack","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1992cd0c75e6c5d37b485826b89446418fe3549e","unresolved":true,"context_lines":[{"line_number":27,"context_line":"    integrated_helpers.InstanceHelperMixin):"},{"line_number":28,"context_line":"    microversion \u003d \"latest\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # base inherted from libvirt so we can use libvirtfixture"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def setUp(self):"},{"line_number":33,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"12cbc3d6_dd0bff28","line":30,"updated":"2023-10-02 17:07:39.000000000","message":"You don\u0027t need this comment.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"1fe722fdbb999e957495c39f93f2cb8fd7ba7426","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    integrated_helpers.InstanceHelperMixin):"},{"line_number":28,"context_line":"    microversion \u003d \"latest\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # base inherted from libvirt so we can use libvirtfixture"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def setUp(self):"},{"line_number":33,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":6,"id":"8e0b654a_d29e0842","line":30,"in_reply_to":"12cbc3d6_dd0bff28","updated":"2023-10-03 12:37:12.000000000","message":"Done","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1992cd0c75e6c5d37b485826b89446418fe3549e","unresolved":true,"context_lines":[{"line_number":38,"context_line":"        self.md_url \u003d ("},{"line_number":39,"context_line":"            f\"{self.api_fixture.md_url}openstack/latest/meta_data.json\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.neutron \u003d self.useFixture(base.LibvirtNeutronFixture(self))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.TAGS \u003d {"},{"line_number":44,"context_line":"            \u0027nets\u0027: [\u0027pvt_foo\u0027, \u0027pub_bar\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a213f87_3b9277eb","line":41,"updated":"2023-10-02 17:07:39.000000000","message":"OK, you do need this, I\u0027m just surprised it\u0027s not already setup for us in the base libvirt func test class.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"8d9958b639810014c11e5ec99711e09802b08508","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.md_url \u003d ("},{"line_number":39,"context_line":"            f\"{self.api_fixture.md_url}openstack/latest/meta_data.json\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.neutron \u003d self.useFixture(base.LibvirtNeutronFixture(self))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.TAGS \u003d {"},{"line_number":44,"context_line":"            \u0027nets\u0027: [\u0027pvt_foo\u0027, \u0027pub_bar\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"310ff1e0_9bdeeaf3","line":41,"in_reply_to":"3a213f87_3b9277eb","updated":"2023-10-03 05:50:13.000000000","message":"Ack","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1992cd0c75e6c5d37b485826b89446418fe3549e","unresolved":true,"context_lines":[{"line_number":47,"context_line":"            \u0027tags\u0027: [\u0027tag1\u0027, \u0027tag2\u0027]"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _create_taged_server(self, args):"},{"line_number":51,"context_line":"        server \u003d self._build_server("},{"line_number":52,"context_line":"            name\u003dargs[\u0027name\u0027],"},{"line_number":53,"context_line":"            networks\u003dargs.get(\u0027networks\u0027, \u0027none\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1c43eb51_7d976304","line":50,"updated":"2023-10-02 17:07:39.000000000","message":"Could you not spell out the args here, with default values? So something like:\n\n    (self, networks\u003dNone, bsm\u003dNone)?","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"8d9958b639810014c11e5ec99711e09802b08508","unresolved":true,"context_lines":[{"line_number":47,"context_line":"            \u0027tags\u0027: [\u0027tag1\u0027, \u0027tag2\u0027]"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _create_taged_server(self, args):"},{"line_number":51,"context_line":"        server \u003d self._build_server("},{"line_number":52,"context_line":"            name\u003dargs[\u0027name\u0027],"},{"line_number":53,"context_line":"            networks\u003dargs.get(\u0027networks\u0027, \u0027none\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"e16ed356_180a88c2","line":50,"in_reply_to":"1c43eb51_7d976304","updated":"2023-10-03 05:50:13.000000000","message":"yes, will update.\ninitially I was thinking of more combination, so set it as args.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"1fe722fdbb999e957495c39f93f2cb8fd7ba7426","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \u0027tags\u0027: [\u0027tag1\u0027, \u0027tag2\u0027]"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _create_taged_server(self, args):"},{"line_number":51,"context_line":"        server \u003d self._build_server("},{"line_number":52,"context_line":"            name\u003dargs[\u0027name\u0027],"},{"line_number":53,"context_line":"            networks\u003dargs.get(\u0027networks\u0027, \u0027none\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"428862f0_01a75f90","line":50,"in_reply_to":"e16ed356_180a88c2","updated":"2023-10-03 12:37:12.000000000","message":"Done","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"c2ae02bdc51e3df3fee1deb4decb7cbb7cdc5027","unresolved":true,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        server \u003d self.api.post_server({\u0027server\u0027: server})"},{"line_number":59,"context_line":"        # so DB will have tag info"},{"line_number":60,"context_line":"        # is there a way we can verify DB here."},{"line_number":61,"context_line":"        return self._wait_for_state_change(server, \u0027ACTIVE\u0027)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _verify_tags_by_metadata_server(self, server, tags):"}],"source_content_type":"text/x-python","patch_set":6,"id":"00b26e8f_6b4851cb","line":60,"updated":"2023-09-29 15:51:36.000000000","message":"remove this!!","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"1fe722fdbb999e957495c39f93f2cb8fd7ba7426","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        server \u003d self.api.post_server({\u0027server\u0027: server})"},{"line_number":59,"context_line":"        # so DB will have tag info"},{"line_number":60,"context_line":"        # is there a way we can verify DB here."},{"line_number":61,"context_line":"        return self._wait_for_state_change(server, \u0027ACTIVE\u0027)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _verify_tags_by_metadata_server(self, server, tags):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a7b35c4_1115dc84","line":60,"in_reply_to":"00b26e8f_6b4851cb","updated":"2023-10-03 12:37:12.000000000","message":"Done","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1992cd0c75e6c5d37b485826b89446418fe3549e","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        with mock.patch(\u0027nova.network.neutron.API\u0027"},{"line_number":71,"context_line":"                        \u0027.get_fixed_ip_by_address\u0027) as mock_obj:"},{"line_number":72,"context_line":"            mock_obj.return_value \u003d {\u0027instance_uuid\u0027: server[\u0027id\u0027]}"},{"line_number":73,"context_line":"            for _ in range(2):"},{"line_number":74,"context_line":"                # this is added for volume attachement test"},{"line_number":75,"context_line":"                res \u003d requests.request(\u0027GET\u0027, self.md_url)"},{"line_number":76,"context_line":"                if res.json()[\u0027devices\u0027] \u003d\u003d []:"}],"source_content_type":"text/x-python","patch_set":6,"id":"4590be87_d571eeb5","line":73,"updated":"2023-10-02 17:07:39.000000000","message":"I have to confess to not understanding why there\u0027s a loop here, and why there\u0027s a sleep in the loop.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"2b54a3274e45a26d3dd5ba7492b163654927a798","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        with mock.patch(\u0027nova.network.neutron.API\u0027"},{"line_number":71,"context_line":"                        \u0027.get_fixed_ip_by_address\u0027) as mock_obj:"},{"line_number":72,"context_line":"            mock_obj.return_value \u003d {\u0027instance_uuid\u0027: server[\u0027id\u0027]}"},{"line_number":73,"context_line":"            for _ in range(2):"},{"line_number":74,"context_line":"                # this is added for volume attachement test"},{"line_number":75,"context_line":"                res \u003d requests.request(\u0027GET\u0027, self.md_url)"},{"line_number":76,"context_line":"                if res.json()[\u0027devices\u0027] \u003d\u003d []:"}],"source_content_type":"text/x-python","patch_set":6,"id":"76082c6d_b12449ab","line":73,"in_reply_to":"3f205395_634016ed","updated":"2023-10-10 07:11:58.000000000","message":"Done","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b5863b715c13a074cd83cc21ab71e310d2e32e89","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        with mock.patch(\u0027nova.network.neutron.API\u0027"},{"line_number":71,"context_line":"                        \u0027.get_fixed_ip_by_address\u0027) as mock_obj:"},{"line_number":72,"context_line":"            mock_obj.return_value \u003d {\u0027instance_uuid\u0027: server[\u0027id\u0027]}"},{"line_number":73,"context_line":"            for _ in range(2):"},{"line_number":74,"context_line":"                # this is added for volume attachement test"},{"line_number":75,"context_line":"                res \u003d requests.request(\u0027GET\u0027, self.md_url)"},{"line_number":76,"context_line":"                if res.json()[\u0027devices\u0027] \u003d\u003d []:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ad0be17_6c20dd90","line":73,"in_reply_to":"4590be87_d571eeb5","updated":"2023-10-02 17:39:19.000000000","message":"I think this is a retry loop, which absolutely shouldn\u0027t be required in a functional test, nor should there be a sleep. TBH, I\u0027m not sure why this is using requests directly either, but it feels wrong.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b56a63483d6d425ab910c8bdeb2470c690642e8f","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        with mock.patch(\u0027nova.network.neutron.API\u0027"},{"line_number":71,"context_line":"                        \u0027.get_fixed_ip_by_address\u0027) as mock_obj:"},{"line_number":72,"context_line":"            mock_obj.return_value \u003d {\u0027instance_uuid\u0027: server[\u0027id\u0027]}"},{"line_number":73,"context_line":"            for _ in range(2):"},{"line_number":74,"context_line":"                # this is added for volume attachement test"},{"line_number":75,"context_line":"                res \u003d requests.request(\u0027GET\u0027, self.md_url)"},{"line_number":76,"context_line":"                if res.json()[\u0027devices\u0027] \u003d\u003d []:"}],"source_content_type":"text/x-python","patch_set":6,"id":"8fb1b8ab_0529f192","line":73,"in_reply_to":"5ad0be17_6c20dd90","updated":"2023-10-02 17:47:24.000000000","message":"requests is because this is the metadata API, if you look at nova/tests/functional/test_metadata.py the client-side is using pure requests as well, so that\u0027s not shocking to me.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"8d9958b639810014c11e5ec99711e09802b08508","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        with mock.patch(\u0027nova.network.neutron.API\u0027"},{"line_number":71,"context_line":"                        \u0027.get_fixed_ip_by_address\u0027) as mock_obj:"},{"line_number":72,"context_line":"            mock_obj.return_value \u003d {\u0027instance_uuid\u0027: server[\u0027id\u0027]}"},{"line_number":73,"context_line":"            for _ in range(2):"},{"line_number":74,"context_line":"                # this is added for volume attachement test"},{"line_number":75,"context_line":"                res \u003d requests.request(\u0027GET\u0027, self.md_url)"},{"line_number":76,"context_line":"                if res.json()[\u0027devices\u0027] \u003d\u003d []:"}],"source_content_type":"text/x-python","patch_set":6,"id":"819ed2f6_af12a93d","line":73,"in_reply_to":"653dde06_a3ba650a","updated":"2023-10-03 05:50:13.000000000","message":"for only volume_attachment tc, tagging is taking some extra time to get reflected,\nI can move it (loop and sleep) to test itself, like extra wait after attaching, but here it\u0027s kind of poling, there it will be just wait.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"1fe722fdbb999e957495c39f93f2cb8fd7ba7426","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        with mock.patch(\u0027nova.network.neutron.API\u0027"},{"line_number":71,"context_line":"                        \u0027.get_fixed_ip_by_address\u0027) as mock_obj:"},{"line_number":72,"context_line":"            mock_obj.return_value \u003d {\u0027instance_uuid\u0027: server[\u0027id\u0027]}"},{"line_number":73,"context_line":"            for _ in range(2):"},{"line_number":74,"context_line":"                # this is added for volume attachement test"},{"line_number":75,"context_line":"                res \u003d requests.request(\u0027GET\u0027, self.md_url)"},{"line_number":76,"context_line":"                if res.json()[\u0027devices\u0027] \u003d\u003d []:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f205395_634016ed","line":73,"in_reply_to":"819ed2f6_af12a93d","updated":"2023-10-03 12:37:12.000000000","message":"Setting metadata_cache_expiration\u003d0 fixed this.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"24eca39e48532e90a02309150ada231133670aa1","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        with mock.patch(\u0027nova.network.neutron.API\u0027"},{"line_number":71,"context_line":"                        \u0027.get_fixed_ip_by_address\u0027) as mock_obj:"},{"line_number":72,"context_line":"            mock_obj.return_value \u003d {\u0027instance_uuid\u0027: server[\u0027id\u0027]}"},{"line_number":73,"context_line":"            for _ in range(2):"},{"line_number":74,"context_line":"                # this is added for volume attachement test"},{"line_number":75,"context_line":"                res \u003d requests.request(\u0027GET\u0027, self.md_url)"},{"line_number":76,"context_line":"                if res.json()[\u0027devices\u0027] \u003d\u003d []:"}],"source_content_type":"text/x-python","patch_set":6,"id":"653dde06_a3ba650a","line":73,"in_reply_to":"8fb1b8ab_0529f192","updated":"2023-10-02 18:00:39.000000000","message":"Ah, right, okay I thought this was requests\u0027ing to neutron, but I see.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"c2ae02bdc51e3df3fee1deb4decb7cbb7cdc5027","unresolved":true,"context_lines":[{"line_number":79,"context_line":"                    break"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        metadata \u003d res.json()"},{"line_number":82,"context_line":"        # import rpdb;rpdb.set_trace()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # verify if we got the info for correct server"},{"line_number":85,"context_line":"        self.assertEqual(server[\u0027name\u0027], metadata[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"7961add8_e1f537e1","line":82,"updated":"2023-09-29 15:51:36.000000000","message":"remove this","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"1fe722fdbb999e957495c39f93f2cb8fd7ba7426","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                    break"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        metadata \u003d res.json()"},{"line_number":82,"context_line":"        # import rpdb;rpdb.set_trace()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # verify if we got the info for correct server"},{"line_number":85,"context_line":"        self.assertEqual(server[\u0027name\u0027], metadata[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"ede1e797_ebcc49cb","line":82,"in_reply_to":"7961add8_e1f537e1","updated":"2023-10-03 12:37:12.000000000","message":"Done","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"c2ae02bdc51e3df3fee1deb4decb7cbb7cdc5027","unresolved":true,"context_lines":[{"line_number":85,"context_line":"        self.assertEqual(server[\u0027name\u0027], metadata[\u0027name\u0027])"},{"line_number":86,"context_line":"        devs \u003d metadata[\u0027devices\u0027]"},{"line_number":87,"context_line":"        if tags:"},{"line_number":88,"context_line":"            # import rpdb;rpdb.set_trace()"},{"line_number":89,"context_line":"            self.assertTrue(devs)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        for dev, tag in zip(devs, tags):"}],"source_content_type":"text/x-python","patch_set":6,"id":"c2d125a0_bb234fe6","line":88,"updated":"2023-09-29 15:51:36.000000000","message":"this","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"1fe722fdbb999e957495c39f93f2cb8fd7ba7426","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.assertEqual(server[\u0027name\u0027], metadata[\u0027name\u0027])"},{"line_number":86,"context_line":"        devs \u003d metadata[\u0027devices\u0027]"},{"line_number":87,"context_line":"        if tags:"},{"line_number":88,"context_line":"            # import rpdb;rpdb.set_trace()"},{"line_number":89,"context_line":"            self.assertTrue(devs)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        for dev, tag in zip(devs, tags):"}],"source_content_type":"text/x-python","patch_set":6,"id":"6c16451b_f83a2296","line":88,"in_reply_to":"c2d125a0_bb234fe6","updated":"2023-10-03 12:37:12.000000000","message":"Done","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"1992cd0c75e6c5d37b485826b89446418fe3549e","unresolved":true,"context_lines":[{"line_number":103,"context_line":"                }"},{"line_number":104,"context_line":"        ]}"},{"line_number":105,"context_line":"        server \u003d self._create_taged_server(_body)"},{"line_number":106,"context_line":"        self._verify_tags_by_metadata_server(server, [self.TAGS[\u0027nets\u0027][0]])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def test_interface_port_tagging(self):"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"d6f94303_b5a03a75","line":106,"updated":"2023-10-02 17:07:39.000000000","message":"This is more complexity than is necessary. You don\u0027t need the class-level self.TAGS dictionary, just hardcode the tags in the tests themselves. If you absolutely need a helper method to pull metadata, limit it at just that: pulling metadata and returning the JSON dict (maybe it can return just the `devices` section). Then do your assertions on that dict in the test directly, with the hardcoded tag from before.\n\nI suspect doing that will also get rid of that weird loop/sleep you have.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"1fe722fdbb999e957495c39f93f2cb8fd7ba7426","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                }"},{"line_number":104,"context_line":"        ]}"},{"line_number":105,"context_line":"        server \u003d self._create_taged_server(_body)"},{"line_number":106,"context_line":"        self._verify_tags_by_metadata_server(server, [self.TAGS[\u0027nets\u0027][0]])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def test_interface_port_tagging(self):"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"4f6cade6_b1ca02e5","line":106,"in_reply_to":"d6f94303_b5a03a75","updated":"2023-10-03 12:37:12.000000000","message":"Done","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bfc8c47d06d60600a42bb66515e80e3170a95d03","unresolved":true,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class DeviceTaggingTests("},{"line_number":26,"context_line":"    base.ServersTestBase,"},{"line_number":27,"context_line":"    integrated_helpers.InstanceHelperMixin):"},{"line_number":28,"context_line":"    microversion \u003d \"latest\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"65a1ec09_34a96e6c","line":27,"updated":"2023-10-10 02:50:49.000000000","message":"You left my comment on this line of PS6 unaddressed - did you confirm that we _do_ actually need this, or did you forget to remove it?","commit_id":"f566921d88e5af3f0c805d306a66ee0dc5398731"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"2b54a3274e45a26d3dd5ba7492b163654927a798","unresolved":true,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class DeviceTaggingTests("},{"line_number":26,"context_line":"    base.ServersTestBase,"},{"line_number":27,"context_line":"    integrated_helpers.InstanceHelperMixin):"},{"line_number":28,"context_line":"    microversion \u003d \"latest\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f4d4256_82f95271","line":27,"in_reply_to":"65a1ec09_34a96e6c","updated":"2023-10-10 07:11:58.000000000","message":"my bad, I acked here but missed to remove it before updating patch.\nfixed this time right away. thanks","commit_id":"f566921d88e5af3f0c805d306a66ee0dc5398731"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bfc8c47d06d60600a42bb66515e80e3170a95d03","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        super().setUp()"},{"line_number":32,"context_line":"        self.start_compute()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        self.flags(metadata_cache_expiration\u003d0, group\u003d\u0027api\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        # so we can call metadata.json"},{"line_number":37,"context_line":"        self.api_fixture \u003d self.useFixture(nova_fixtures.OSMetadataServer())"}],"source_content_type":"text/x-python","patch_set":7,"id":"f293a468_4dad0913","line":34,"updated":"2023-10-10 02:50:49.000000000","message":"A comment here would be explain to explain why we need this.","commit_id":"f566921d88e5af3f0c805d306a66ee0dc5398731"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"2b54a3274e45a26d3dd5ba7492b163654927a798","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        super().setUp()"},{"line_number":32,"context_line":"        self.start_compute()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        self.flags(metadata_cache_expiration\u003d0, group\u003d\u0027api\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        # so we can call metadata.json"},{"line_number":37,"context_line":"        self.api_fixture \u003d self.useFixture(nova_fixtures.OSMetadataServer())"}],"source_content_type":"text/x-python","patch_set":7,"id":"829cdfea_04d99cd6","line":34,"in_reply_to":"f293a468_4dad0913","updated":"2023-10-10 07:11:58.000000000","message":"Done, thanks","commit_id":"f566921d88e5af3f0c805d306a66ee0dc5398731"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bfc8c47d06d60600a42bb66515e80e3170a95d03","unresolved":true,"context_lines":[{"line_number":78,"context_line":"        networks \u003d ["},{"line_number":79,"context_line":"                {"},{"line_number":80,"context_line":"                \"uuid\": network1[\u0027id\u0027],"},{"line_number":81,"context_line":"                \"tag\": tags[0]"},{"line_number":82,"context_line":"                }"},{"line_number":83,"context_line":"        ]"},{"line_number":84,"context_line":"        server \u003d self._create_taged_server(networks)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5e48b700_360d9c57","line":81,"updated":"2023-10-10 02:50:49.000000000","message":"There\u0027s only one network, why not just have this as \"tag\": \"pvt_foo\", and use [\"pvt_foo\"] as value on L85?","commit_id":"f566921d88e5af3f0c805d306a66ee0dc5398731"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"2b54a3274e45a26d3dd5ba7492b163654927a798","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        networks \u003d ["},{"line_number":79,"context_line":"                {"},{"line_number":80,"context_line":"                \"uuid\": network1[\u0027id\u0027],"},{"line_number":81,"context_line":"                \"tag\": tags[0]"},{"line_number":82,"context_line":"                }"},{"line_number":83,"context_line":"        ]"},{"line_number":84,"context_line":"        server \u003d self._create_taged_server(networks)"}],"source_content_type":"text/x-python","patch_set":7,"id":"e8b77738_651373a8","line":81,"in_reply_to":"5e48b700_360d9c57","updated":"2023-10-10 07:11:58.000000000","message":"Ack","commit_id":"f566921d88e5af3f0c805d306a66ee0dc5398731"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bfc8c47d06d60600a42bb66515e80e3170a95d03","unresolved":true,"context_lines":[{"line_number":103,"context_line":"                }"},{"line_number":104,"context_line":"        ]"},{"line_number":105,"context_line":"        server \u003d self._create_taged_server(networks)"},{"line_number":106,"context_line":"        self._verify_tags_by_metadata_server(server, tags)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    # disk - disk_metadata"},{"line_number":109,"context_line":"    def test_disk_tagging(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"47b6ac27_fcf57439","line":106,"updated":"2023-10-10 02:50:49.000000000","message":"Ditto here - I\u0027m not sure what the value is of having the tags declared as an array on L93.","commit_id":"f566921d88e5af3f0c805d306a66ee0dc5398731"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"2b54a3274e45a26d3dd5ba7492b163654927a798","unresolved":true,"context_lines":[{"line_number":103,"context_line":"                }"},{"line_number":104,"context_line":"        ]"},{"line_number":105,"context_line":"        server \u003d self._create_taged_server(networks)"},{"line_number":106,"context_line":"        self._verify_tags_by_metadata_server(server, tags)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    # disk - disk_metadata"},{"line_number":109,"context_line":"    def test_disk_tagging(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"c30d4e08_d6136d1a","line":106,"in_reply_to":"47b6ac27_fcf57439","updated":"2023-10-10 07:11:58.000000000","message":"my original plan was to write all tags at setup as constants, otherwise I have to write them individual times\nin this ex:\n``port_foo, \nport_bar, \n[port_foo, port_bar]\n``\nthis is not going to change for a very long time or ever, but still I thought better to have constants.\n\n\nbut yes, its not really used in many places. so will use value directly.","commit_id":"f566921d88e5af3f0c805d306a66ee0dc5398731"}],"nova/tests/functional/libvirt/test_pci_sriov_servers.py":[{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"45d0782eff415eb9dd38d1ff49a5a1515782de47","unresolved":true,"context_lines":[{"line_number":4249,"context_line":"                }])"},{"line_number":4250,"context_line":"        self._verify_tags_by_metadata_server(server, [\u0027pvt_port\u0027])"},{"line_number":4251,"context_line":""},{"line_number":4252,"context_line":"    def test_network_and_port(self):"},{"line_number":4253,"context_line":"        # create the port"},{"line_number":4254,"context_line":"        port \u003d self.neutron.create_port("},{"line_number":4255,"context_line":"            {\u0027port\u0027: self.neutron.network_4_port_1})"}],"source_content_type":"text/x-python","patch_set":6,"id":"f22dd0ef_6c5ed2d1","line":4252,"updated":"2023-09-27 11:07:11.000000000","message":"this was suppose to be a reproducer tests for related bug.\nbut  its passing.","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bfc8c47d06d60600a42bb66515e80e3170a95d03","unresolved":true,"context_lines":[{"line_number":4249,"context_line":"                }])"},{"line_number":4250,"context_line":"        self._verify_tags_by_metadata_server(server, [\u0027pvt_port\u0027])"},{"line_number":4251,"context_line":""},{"line_number":4252,"context_line":"    def test_network_and_port(self):"},{"line_number":4253,"context_line":"        # create the port"},{"line_number":4254,"context_line":"        port \u003d self.neutron.create_port("},{"line_number":4255,"context_line":"            {\u0027port\u0027: self.neutron.network_4_port_1})"}],"source_content_type":"text/x-python","patch_set":6,"id":"e897d220_2a339c1c","line":4252,"in_reply_to":"f22dd0ef_6c5ed2d1","updated":"2023-10-10 02:50:49.000000000","message":"I think the PF port is network_4_port_pf. I\u0027m having trouble running functional tests locally, but I wonder if that\u0027s not the cause of this passing when it should be failing...","commit_id":"8bd5f230f7b51fc606bc3e04a1e61efbc98e72e8"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bfc8c47d06d60600a42bb66515e80e3170a95d03","unresolved":true,"context_lines":[{"line_number":4181,"context_line":"    # hostdev_metadata tagging"},{"line_number":4182,"context_line":"    microversion \u003d \u0027latest\u0027"},{"line_number":4183,"context_line":""},{"line_number":4184,"context_line":"    PCI_DEVICE_SPEC \u003d [jsonutils.dumps(x) for x in ("},{"line_number":4185,"context_line":"        {"},{"line_number":4186,"context_line":"            \u0027vendor_id\u0027: fakelibvirt.PCI_VEND_ID,"},{"line_number":4187,"context_line":"            \u0027product_id\u0027: fakelibvirt.PF_PROD_ID,"}],"source_content_type":"text/x-python","patch_set":7,"id":"6c715380_45b5f973","line":4184,"updated":"2023-10-10 02:50:49.000000000","message":"You don\u0027t need this, it\u0027s for flavor-based PCI passthrough, Neutron ports don\u0027t need it.","commit_id":"f566921d88e5af3f0c805d306a66ee0dc5398731"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"2b54a3274e45a26d3dd5ba7492b163654927a798","unresolved":true,"context_lines":[{"line_number":4181,"context_line":"    # hostdev_metadata tagging"},{"line_number":4182,"context_line":"    microversion \u003d \u0027latest\u0027"},{"line_number":4183,"context_line":""},{"line_number":4184,"context_line":"    PCI_DEVICE_SPEC \u003d [jsonutils.dumps(x) for x in ("},{"line_number":4185,"context_line":"        {"},{"line_number":4186,"context_line":"            \u0027vendor_id\u0027: fakelibvirt.PCI_VEND_ID,"},{"line_number":4187,"context_line":"            \u0027product_id\u0027: fakelibvirt.PF_PROD_ID,"}],"source_content_type":"text/x-python","patch_set":7,"id":"d1903cb5_7e9846a6","line":4184,"in_reply_to":"6c715380_45b5f973","updated":"2023-10-10 07:11:58.000000000","message":"in parent class _PCIServersTestBase, in setup its setting device_spec and alias, so there we need these constants.\nself.flags(\n            device_spec\u003dself.PCI_DEVICE_SPEC,\n            alias\u003dself.PCI_ALIAS,\n            group\u003d\u0027pci\u0027\n        )\n        \nI tried to avoid it, but did not work.\n\nempty lists did not work either\nPCI_DEVICE_SPEC \u003d []\nPCI_ALIAS \u003d []\n\nwith these scheduler is deciding hosts.","commit_id":"f566921d88e5af3f0c805d306a66ee0dc5398731"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bfc8c47d06d60600a42bb66515e80e3170a95d03","unresolved":true,"context_lines":[{"line_number":4194,"context_line":"        },"},{"line_number":4195,"context_line":"    )]"},{"line_number":4196,"context_line":""},{"line_number":4197,"context_line":"    PCI_ALIAS \u003d [jsonutils.dumps(x) for x in ("},{"line_number":4198,"context_line":"        {"},{"line_number":4199,"context_line":"            \u0027vendor_id\u0027: fakelibvirt.PCI_VEND_ID,"},{"line_number":4200,"context_line":"            \u0027product_id\u0027: fakelibvirt.PF_PROD_ID,"}],"source_content_type":"text/x-python","patch_set":7,"id":"c755a220_d5963426","line":4197,"updated":"2023-10-10 02:50:49.000000000","message":"Ditto.","commit_id":"f566921d88e5af3f0c805d306a66ee0dc5398731"}]}
