)]}'
{"nova/api/metadata/handler.py":[{"author":{"_account_id":20363,"name":"Adit Sarfaty","email":"asarfaty@vmware.com","username":"asarfaty"},"change_message_id":"6b9251f29d5b45dd5c281a47bdef36e1866e8f40","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            advanced_service_providers\u003d[provider_id],"},{"line_number":210,"context_line":"            fields\u003d[\u0027network_id\u0027])"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if not md_subnets:"},{"line_number":213,"context_line":"            msg \u003d _(\u0027Could not find any subnets for provider %s\u0027) % provider_id"},{"line_number":214,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_ec7eb1e1","line":212,"range":{"start_line":212,"start_character":15,"end_line":212,"end_character":25},"updated":"2019-10-28 08:24:27.000000000","message":"I think we should also add \u0027or not md_subnets.get(\u0027subnets\u0027]\u0027","commit_id":"956d9532eb7df675d45a1df0617f3a6d13205e5b"},{"author":{"_account_id":13438,"name":"Kobi Samoray","email":"ksamoray@vmware.com","username":"ksamoray"},"change_message_id":"bab043ec2b2e4cb09da88de328133a58971ac2e9","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            advanced_service_providers\u003d[provider_id],"},{"line_number":210,"context_line":"            fields\u003d[\u0027network_id\u0027])"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if not md_subnets:"},{"line_number":213,"context_line":"            msg \u003d _(\u0027Could not find any subnets for provider %s\u0027) % provider_id"},{"line_number":214,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_8fc28f52","line":212,"range":{"start_line":212,"start_character":15,"end_line":212,"end_character":25},"in_reply_to":"3fa7e38b_ec7eb1e1","updated":"2019-10-28 09:35:15.000000000","message":"Done","commit_id":"956d9532eb7df675d45a1df0617f3a6d13205e5b"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"6108f5a40971b54a3a0b7714d71abbbc5a50de3f","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                fixed_ips\u003d\u0027ip_address\u003d\u0027 + instance_address,"},{"line_number":225,"context_line":"                network_id\u003dmd_networks,"},{"line_number":226,"context_line":"                fields\u003d[\u0027device_id\u0027, \u0027tenant_id\u0027])[\u0027ports\u0027]"},{"line_number":227,"context_line":"            if len(ports) \u003e 1:"},{"line_number":228,"context_line":"                msg \u003d _(\"Found multiple ports matching provider %(pr)s and \""},{"line_number":229,"context_line":"                        \"ip %(ip)s\") % {\u0027pr\u0027: provider_id,"},{"line_number":230,"context_line":"                                        \u0027ip\u0027: instance_address}"},{"line_number":231,"context_line":"                LOG.error(msg)"},{"line_number":232,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":233,"context_line":"            instance_data \u003d ports[0]"},{"line_number":234,"context_line":"        except Exception as e:"},{"line_number":235,"context_line":"            LOG.error(\u0027Failed to get instance id for metadata \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_ab29fb89","line":232,"range":{"start_line":227,"start_character":0,"end_line":232,"end_character":63},"updated":"2019-11-06 23:16:55.000000000","message":"The test case for this change is missing.","commit_id":"88bb54566908efd8c4627f430a2f429bcf6fda52"},{"author":{"_account_id":20363,"name":"Adit Sarfaty","email":"asarfaty@vmware.com","username":"asarfaty"},"change_message_id":"3c43189bc310515fb38b363894246ffc58e112f3","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                fixed_ips\u003d\u0027ip_address\u003d\u0027 + instance_address,"},{"line_number":225,"context_line":"                network_id\u003dmd_networks,"},{"line_number":226,"context_line":"                fields\u003d[\u0027device_id\u0027, \u0027tenant_id\u0027])[\u0027ports\u0027]"},{"line_number":227,"context_line":"            if len(ports) \u003e 1:"},{"line_number":228,"context_line":"                msg \u003d _(\"Found multiple ports matching provider %(pr)s and \""},{"line_number":229,"context_line":"                        \"ip %(ip)s\") % {\u0027pr\u0027: provider_id,"},{"line_number":230,"context_line":"                                        \u0027ip\u0027: instance_address}"},{"line_number":231,"context_line":"                LOG.error(msg)"},{"line_number":232,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":233,"context_line":"            instance_data \u003d ports[0]"},{"line_number":234,"context_line":"        except Exception as e:"},{"line_number":235,"context_line":"            LOG.error(\u0027Failed to get instance id for metadata \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_d315099d","line":232,"range":{"start_line":227,"start_character":0,"end_line":232,"end_character":63},"in_reply_to":"3fa7e38b_ab29fb89","updated":"2019-11-07 08:00:00.000000000","message":"Done","commit_id":"88bb54566908efd8c4627f430a2f429bcf6fda52"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7ee27d70eaab390a741d4e95b145f367c0b85d9d","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                fixed_ips\u003d\u0027ip_address\u003d\u0027 + instance_address,"},{"line_number":225,"context_line":"                network_id\u003dmd_networks,"},{"line_number":226,"context_line":"                fields\u003d[\u0027device_id\u0027, \u0027tenant_id\u0027])[\u0027ports\u0027]"},{"line_number":227,"context_line":"            if len(ports) \u003e 1:"},{"line_number":228,"context_line":"                msg \u003d _(\"Found multiple ports matching provider %(pr)s and \""},{"line_number":229,"context_line":"                        \"ip %(ip)s\") % {\u0027pr\u0027: provider_id,"},{"line_number":230,"context_line":"                                        \u0027ip\u0027: instance_address}"},{"line_number":231,"context_line":"                LOG.error(msg)"},{"line_number":232,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":233,"context_line":"            instance_data \u003d ports[0]"},{"line_number":234,"context_line":"        except Exception as e:"},{"line_number":235,"context_line":"            LOG.error(\u0027Failed to get instance id for metadata \u0027"},{"line_number":236,"context_line":"                      \u0027request, provider %(provider)s \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_c09426ea","line":233,"range":{"start_line":227,"start_character":0,"end_line":233,"end_character":36},"updated":"2019-12-02 10:42:51.000000000","message":"I suspect this should go outside of the try-except. As things are, you\u0027ll raise this exception, catch it, then raise the same exception type again only with the error message nested. That seems wrong.\n\nYou should probably check that the list of ports is not empty too and raise accordingly. I assume that can be a thing","commit_id":"5c66190db2ab00753714b9f80dacfcb131abcc3f"},{"author":{"_account_id":13438,"name":"Kobi Samoray","email":"ksamoray@vmware.com","username":"ksamoray"},"change_message_id":"7e3226e7a460aeb53848b82a10c5d032ad516954","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                fixed_ips\u003d\u0027ip_address\u003d\u0027 + instance_address,"},{"line_number":225,"context_line":"                network_id\u003dmd_networks,"},{"line_number":226,"context_line":"                fields\u003d[\u0027device_id\u0027, \u0027tenant_id\u0027])[\u0027ports\u0027]"},{"line_number":227,"context_line":"            if len(ports) \u003e 1:"},{"line_number":228,"context_line":"                msg \u003d _(\"Found multiple ports matching provider %(pr)s and \""},{"line_number":229,"context_line":"                        \"ip %(ip)s\") % {\u0027pr\u0027: provider_id,"},{"line_number":230,"context_line":"                                        \u0027ip\u0027: instance_address}"},{"line_number":231,"context_line":"                LOG.error(msg)"},{"line_number":232,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":233,"context_line":"            instance_data \u003d ports[0]"},{"line_number":234,"context_line":"        except Exception as e:"},{"line_number":235,"context_line":"            LOG.error(\u0027Failed to get instance id for metadata \u0027"},{"line_number":236,"context_line":"                      \u0027request, provider %(provider)s \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_9abda004","line":233,"range":{"start_line":227,"start_character":0,"end_line":233,"end_character":36},"in_reply_to":"3fa7e38b_c09426ea","updated":"2020-01-28 09:33:56.000000000","message":"Done","commit_id":"5c66190db2ab00753714b9f80dacfcb131abcc3f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9694e115503fe0a6815e67253d63873141c52152","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                    \u0027Please try your request again.\u0027)"},{"line_number":238,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        if len(ports) \u003e 1:"},{"line_number":241,"context_line":"            msg \u003d _(\"Found multiple ports matching provider %(pr)s and \""},{"line_number":242,"context_line":"                    \"ip %(ip)s\") % {\u0027pr\u0027: provider_id,"},{"line_number":243,"context_line":"                                    \u0027ip\u0027: instance_address}"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_809d32bb","line":240,"range":{"start_line":240,"start_character":8,"end_line":240,"end_character":26},"updated":"2020-01-28 10:57:43.000000000","message":"You need to check for exactly 1...","commit_id":"41a77ccffe0aff66cbe40ee20e32bd5219e1ea81"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9694e115503fe0a6815e67253d63873141c52152","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            LOG.error(msg)"},{"line_number":245,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        instance_data \u003d ports[0]"},{"line_number":248,"context_line":"        instance_id \u003d instance_data[\u0027device_id\u0027]"},{"line_number":249,"context_line":"        tenant_id \u003d instance_data[\u0027tenant_id\u0027]"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_a0a06ef3","line":247,"updated":"2020-01-28 10:57:43.000000000","message":"otherwise this can fail (if the list is empty)","commit_id":"41a77ccffe0aff66cbe40ee20e32bd5219e1ea81"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7e115d3228554ae24f654659e03f1cdd621207c4","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                    \"ip %(ip)s\") % {\u0027pr\u0027: provider_id,"},{"line_number":249,"context_line":"                                    \u0027ip\u0027: instance_address}"},{"line_number":250,"context_line":"            LOG.error(msg)"},{"line_number":251,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        instance_data \u003d ports[0]"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_2361e8a2","line":251,"updated":"2020-01-28 11:43:19.000000000","message":"nit: you could have just said\n\n  if len(ports) !\u003d 1:\n      msg \u003d _(\u0027Expected a single port matching provider %(pr)s \u0027\n              \u0027and IP %(ip)s. Found %(count)d.\u0027 % ...)","commit_id":"6df330fa3d8ceeb38b26eb1532c3343bf4c92f56"}],"nova/tests/unit/test_metadata.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"6108f5a40971b54a3a0b7714d71abbbc5a50de3f","unresolved":false,"context_lines":[{"line_number":1611,"context_line":"            fake_get_metadata_by_instance_id\u003dself._fake_x_get_metadata,"},{"line_number":1612,"context_line":"            headers\u003d{\u0027X-Forwarded-For\u0027: \u0027192.192.192.2\u0027,"},{"line_number":1613,"context_line":"                     \u0027X-Metadata-Provider\u0027: proxy_lb_id})"},{"line_number":1614,"context_line":"        self.assertEqual(500, response.status_int)"},{"line_number":1615,"context_line":""},{"line_number":1616,"context_line":"    @mock.patch.object(context, \u0027get_admin_context\u0027)"},{"line_number":1617,"context_line":"    @mock.patch(\u0027nova.network.API\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_8b243fb4","line":1614,"range":{"start_line":1614,"start_character":25,"end_line":1614,"end_character":28},"updated":"2019-11-06 23:16:55.000000000","message":"400","commit_id":"88bb54566908efd8c4627f430a2f429bcf6fda52"},{"author":{"_account_id":20363,"name":"Adit Sarfaty","email":"asarfaty@vmware.com","username":"asarfaty"},"change_message_id":"3c43189bc310515fb38b363894246ffc58e112f3","unresolved":false,"context_lines":[{"line_number":1611,"context_line":"            fake_get_metadata_by_instance_id\u003dself._fake_x_get_metadata,"},{"line_number":1612,"context_line":"            headers\u003d{\u0027X-Forwarded-For\u0027: \u0027192.192.192.2\u0027,"},{"line_number":1613,"context_line":"                     \u0027X-Metadata-Provider\u0027: proxy_lb_id})"},{"line_number":1614,"context_line":"        self.assertEqual(500, response.status_int)"},{"line_number":1615,"context_line":""},{"line_number":1616,"context_line":"    @mock.patch.object(context, \u0027get_admin_context\u0027)"},{"line_number":1617,"context_line":"    @mock.patch(\u0027nova.network.API\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_b3108dad","line":1614,"range":{"start_line":1614,"start_character":25,"end_line":1614,"end_character":28},"in_reply_to":"3fa7e38b_8b243fb4","updated":"2019-11-07 08:00:00.000000000","message":"Done","commit_id":"88bb54566908efd8c4627f430a2f429bcf6fda52"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9694e115503fe0a6815e67253d63873141c52152","unresolved":false,"context_lines":[{"line_number":1602,"context_line":"        self.assertEqual(400, response.status_int)"},{"line_number":1603,"context_line":""},{"line_number":1604,"context_line":"    @mock.patch.object(neutronapi, \u0027get_client\u0027, return_value\u003dmock.Mock())"},{"line_number":1605,"context_line":"    def test_metadata_lb_too_many_ports(self, mock_get_client):"},{"line_number":1606,"context_line":""},{"line_number":1607,"context_line":"        self.flags(service_metadata_proxy\u003dTrue, group\u003d\u0027neutron\u0027)"},{"line_number":1608,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_8091b247","line":1605,"updated":"2020-01-28 10:57:43.000000000","message":"A \u0027too_few_ports\u0027 test would be helpful too, per comments on previous file","commit_id":"41a77ccffe0aff66cbe40ee20e32bd5219e1ea81"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7e115d3228554ae24f654659e03f1cdd621207c4","unresolved":false,"context_lines":[{"line_number":1602,"context_line":"        self.assertEqual(400, response.status_int)"},{"line_number":1603,"context_line":""},{"line_number":1604,"context_line":"    @mock.patch.object(neutronapi, \u0027get_client\u0027, return_value\u003dmock.Mock())"},{"line_number":1605,"context_line":"    def test_metadata_lb_too_many_ports(self, mock_get_client):"},{"line_number":1606,"context_line":""},{"line_number":1607,"context_line":"        self.flags(service_metadata_proxy\u003dTrue, group\u003d\u0027neutron\u0027)"},{"line_number":1608,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_a30ab8cc","line":1605,"updated":"2020-01-28 11:43:19.000000000","message":"Any chance of getting that \u0027too_few_ports\u0027 test?","commit_id":"6df330fa3d8ceeb38b26eb1532c3343bf4c92f56"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a8fcf39f5dd8e4e67561b4eb3f0b011b8a5ee46e","unresolved":false,"context_lines":[{"line_number":1602,"context_line":"        self.assertEqual(400, response.status_int)"},{"line_number":1603,"context_line":""},{"line_number":1604,"context_line":"    @mock.patch.object(neutronapi, \u0027get_client\u0027, return_value\u003dmock.Mock())"},{"line_number":1605,"context_line":"    def test_metadata_lb_too_many_ports(self, mock_get_client):"},{"line_number":1606,"context_line":""},{"line_number":1607,"context_line":"        self.flags(service_metadata_proxy\u003dTrue, group\u003d\u0027neutron\u0027)"},{"line_number":1608,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_431e640d","line":1605,"in_reply_to":"3fa7e38b_a30ab8cc","updated":"2020-01-28 11:46:20.000000000","message":"You could essentially reuse this test...\n\n    def _test_metadata_lb_incorrect_port_count(\n            self, mock_get_client, ports):\n        ...\n        mock_client.list_ports.return_value \u003d {\u0027ports\u0027: ports}\n        ...\n\n    def test_metadata_lb_too_many_ports(self):\n        self._test_metadata_lb_incorrect_port_count(\n            ports\u003d[\u0027{device_id\u0027: ...}, ...])\n\n    ....","commit_id":"6df330fa3d8ceeb38b26eb1532c3343bf4c92f56"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8cbd37b0dff16528411e1a546db8bc5f0c4545bb","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"                     \u0027X-Metadata-Provider\u0027: proxy_lb_id})"},{"line_number":1625,"context_line":"        self.assertEqual(400, response.status_int)"},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"    @mock.patch.object(neutronapi, \u0027get_client\u0027, return_value\u003dmock.Mock())"},{"line_number":1628,"context_line":"    def test_metadata_lb_too_many_ports(self, mock_get_client):"},{"line_number":1629,"context_line":"        self._test_metadata_lb_incorrect_port_count("},{"line_number":1630,"context_line":"            mock_get_client,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fa7e38b_a623a656","line":1627,"updated":"2020-01-28 12:41:39.000000000","message":"nit: Could have left this on the nested function. I don\u0027t recall if the mock parameter goes before or after additional parameters (I think before) but that\u0027s easily figured out :)","commit_id":"31773715687326c92d4ad46ebb32b14645bbc614"}]}
