)]}'
{"neutron/db/db_base_plugin_v2.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1a2820bdb2b3af7886e9e51056370c0d20d15a63","unresolved":true,"context_lines":[{"line_number":1435,"context_line":"                context, p.get(\u0027device_owner\u0027), p.get(\u0027device_id\u0027),"},{"line_number":1436,"context_line":"                project_id)"},{"line_number":1437,"context_line":""},{"line_number":1438,"context_line":"        port_data \u003d dict(tenant_id\u003dproject_id,"},{"line_number":1439,"context_line":"                         name\u003dp[\u0027name\u0027],"},{"line_number":1440,"context_line":"                         id\u003dport_id,"},{"line_number":1441,"context_line":"                         network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"a5bd61a0_5e091853","line":1438,"range":{"start_line":1438,"start_character":25,"end_line":1438,"end_character":31},"updated":"2021-09-09 07:57:24.000000000","message":"project_id?","commit_id":"30ac62b55af72926d4622a6037accfd41daa433e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"98fcf61a5a9d22bccfef0666a351eb71e16bfe06","unresolved":true,"context_lines":[{"line_number":1435,"context_line":"                context, p.get(\u0027device_owner\u0027), p.get(\u0027device_id\u0027),"},{"line_number":1436,"context_line":"                project_id)"},{"line_number":1437,"context_line":""},{"line_number":1438,"context_line":"        port_data \u003d dict(tenant_id\u003dproject_id,"},{"line_number":1439,"context_line":"                         name\u003dp[\u0027name\u0027],"},{"line_number":1440,"context_line":"                         id\u003dport_id,"},{"line_number":1441,"context_line":"                         network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"b5a7a75a_5f4aa9ce","line":1438,"range":{"start_line":1438,"start_character":25,"end_line":1438,"end_character":31},"in_reply_to":"65c0a61a_d4a05bbe","updated":"2021-09-09 09:00:01.000000000","message":"Here I see port_data will be used only by _create_db_port_obj which should handle project_id","commit_id":"30ac62b55af72926d4622a6037accfd41daa433e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2fac4700bbaaee2d4f87f714f1f85edcb2f4275f","unresolved":true,"context_lines":[{"line_number":1435,"context_line":"                context, p.get(\u0027device_owner\u0027), p.get(\u0027device_id\u0027),"},{"line_number":1436,"context_line":"                project_id)"},{"line_number":1437,"context_line":""},{"line_number":1438,"context_line":"        port_data \u003d dict(tenant_id\u003dproject_id,"},{"line_number":1439,"context_line":"                         name\u003dp[\u0027name\u0027],"},{"line_number":1440,"context_line":"                         id\u003dport_id,"},{"line_number":1441,"context_line":"                         network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ed774492_03bdc3a3","line":1438,"range":{"start_line":1438,"start_character":25,"end_line":1438,"end_character":31},"in_reply_to":"8072e71c_6b0eccd1","updated":"2021-09-09 16:45:43.000000000","message":"There is something not working in neutron.tests.functional.plugins.ml2.drivers.ovn.mech_driver.ovsdb.test_ovn_db_sync [1]\n\nBecause this is out of scope of this patch, I\u0027ll prefer to investigate and change this in a follow up patch.\n\n[1]https://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_ac0/805849/8/check/neutron-functional-with-uwsgi/ac00e72/testr_results.html","commit_id":"30ac62b55af72926d4622a6037accfd41daa433e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"584470039b3c8bf670b29f5f86f91816f94c85cf","unresolved":true,"context_lines":[{"line_number":1435,"context_line":"                context, p.get(\u0027device_owner\u0027), p.get(\u0027device_id\u0027),"},{"line_number":1436,"context_line":"                project_id)"},{"line_number":1437,"context_line":""},{"line_number":1438,"context_line":"        port_data \u003d dict(tenant_id\u003dproject_id,"},{"line_number":1439,"context_line":"                         name\u003dp[\u0027name\u0027],"},{"line_number":1440,"context_line":"                         id\u003dport_id,"},{"line_number":1441,"context_line":"                         network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"65c0a61a_d4a05bbe","line":1438,"range":{"start_line":1438,"start_character":25,"end_line":1438,"end_character":31},"in_reply_to":"a5bd61a0_5e091853","updated":"2021-09-09 08:40:38.000000000","message":"We still need to return tenant_id in the port structure. There are a lot of places where we still read tenant_id only.","commit_id":"30ac62b55af72926d4622a6037accfd41daa433e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"28e66a43baffaa2111a0340980e093131415b57a","unresolved":true,"context_lines":[{"line_number":1435,"context_line":"                context, p.get(\u0027device_owner\u0027), p.get(\u0027device_id\u0027),"},{"line_number":1436,"context_line":"                project_id)"},{"line_number":1437,"context_line":""},{"line_number":1438,"context_line":"        port_data \u003d dict(tenant_id\u003dproject_id,"},{"line_number":1439,"context_line":"                         name\u003dp[\u0027name\u0027],"},{"line_number":1440,"context_line":"                         id\u003dport_id,"},{"line_number":1441,"context_line":"                         network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"8072e71c_6b0eccd1","line":1438,"range":{"start_line":1438,"start_character":25,"end_line":1438,"end_character":31},"in_reply_to":"b5a7a75a_5f4aa9ce","updated":"2021-09-09 11:51:30.000000000","message":"Let\u0027s change it (I think something was failing buy we\u0027ll see the CI)","commit_id":"30ac62b55af72926d4622a6037accfd41daa433e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b526b7253990ebcf599a72fc99758ff32a2ac2f7","unresolved":true,"context_lines":[{"line_number":1435,"context_line":"                context, p.get(\u0027device_owner\u0027), p.get(\u0027device_id\u0027),"},{"line_number":1436,"context_line":"                project_id)"},{"line_number":1437,"context_line":""},{"line_number":1438,"context_line":"        port_data \u003d dict(tenant_id\u003dproject_id,"},{"line_number":1439,"context_line":"                         name\u003dp[\u0027name\u0027],"},{"line_number":1440,"context_line":"                         id\u003dport_id,"},{"line_number":1441,"context_line":"                         network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"2bcf229a_a357b009","line":1438,"range":{"start_line":1438,"start_character":25,"end_line":1438,"end_character":31},"in_reply_to":"ed774492_03bdc3a3","updated":"2021-09-10 07:47:46.000000000","message":"That\u0027s really weird dependency..","commit_id":"30ac62b55af72926d4622a6037accfd41daa433e"}],"neutron/extensions/quotasv2.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"91822695770a33d3e3e3cc7f4ea3298decf0864e","unresolved":true,"context_lines":[{"line_number":105,"context_line":"        context \u003d request.context"},{"line_number":106,"context_line":"        if not context.project_id:"},{"line_number":107,"context_line":"            raise exceptions.QuotaMissingTenant()"},{"line_number":108,"context_line":"        return {\u0027tenant\u0027: {\u0027project_id\u0027: context.project_id}}"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def show(self, request, id):"},{"line_number":111,"context_line":"        if id !\u003d request.context.project_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"6b9cf4cd_a7fb22f3","line":108,"updated":"2021-08-26 05:19:39.000000000","message":"While I am not sure who actually uses this URL, isn\u0027t it better to keep \u0027tenant_id\u0027 together (as we do for most resources)?","commit_id":"3e1fde0eb0ee2e2e05df0a5911cf3af8c58284c2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"881b935f89efa136a45160034efd2485d2d68696","unresolved":true,"context_lines":[{"line_number":105,"context_line":"        context \u003d request.context"},{"line_number":106,"context_line":"        if not context.project_id:"},{"line_number":107,"context_line":"            raise exceptions.QuotaMissingTenant()"},{"line_number":108,"context_line":"        return {\u0027tenant\u0027: {\u0027project_id\u0027: context.project_id}}"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def show(self, request, id):"},{"line_number":111,"context_line":"        if id !\u003d request.context.project_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"c7b76db3_9cc26498","line":108,"in_reply_to":"6b9cf4cd_a7fb22f3","updated":"2021-08-30 08:18:47.000000000","message":"Actually I think (I need to check that) no one is using this method.\n\nIn any case, I\u0027ll leave \"tenant_id\" for this method along with a deprecation note.","commit_id":"3e1fde0eb0ee2e2e05df0a5911cf3af8c58284c2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"91822695770a33d3e3e3cc7f4ea3298decf0864e","unresolved":true,"context_lines":[{"line_number":169,"context_line":"            Quotasv2.get_alias(),"},{"line_number":170,"context_line":"            controller,"},{"line_number":171,"context_line":"            member_actions\u003d{DEFAULT_QUOTAS_ACTION: \u0027GET\u0027},"},{"line_number":172,"context_line":"            collection_actions\u003d{\u0027project\u0027: \u0027GET\u0027})]"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def get_extended_resources(self, version):"},{"line_number":175,"context_line":"        if version \u003d\u003d \"2.0\":"}],"source_content_type":"text/x-python","patch_set":4,"id":"b0ecf132_6661d95f","line":172,"updated":"2021-08-26 05:19:39.000000000","message":"Is it related to tenant() method at L.103?\nAt least the behavior for /qutoas/project URL has changed between before and after this change,\nso I wonder the action name here needs to match the method name at L.103.\n\n[before this change]\n\n GET /v2.0/quotas/project HTTP/1.1\n\n HTTP/1.1 403 Forbidden\n {\n  \"NeutronError\": {\n    \"detail\": \"\",\n    \"message\": \"rule:get_quota is disallowed by policy\",\n    \"type\": \"PolicyNotAuthorized\"\n  }\n }\n\n[after this change]\n\n GET /v2.0/quotas/project HTTP/1.1\n\n HTTP/1.1 500 Internal Server Error\n {\n  \"NeutronError\": {\n    \"detail\": \"\",\n    \"message\": \"Request Failed: internal server error while processing your request.\",\n    \"type\": \"HTTPInternalServerError\"\n  }\n }","commit_id":"3e1fde0eb0ee2e2e05df0a5911cf3af8c58284c2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"881b935f89efa136a45160034efd2485d2d68696","unresolved":true,"context_lines":[{"line_number":169,"context_line":"            Quotasv2.get_alias(),"},{"line_number":170,"context_line":"            controller,"},{"line_number":171,"context_line":"            member_actions\u003d{DEFAULT_QUOTAS_ACTION: \u0027GET\u0027},"},{"line_number":172,"context_line":"            collection_actions\u003d{\u0027project\u0027: \u0027GET\u0027})]"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def get_extended_resources(self, version):"},{"line_number":175,"context_line":"        if version \u003d\u003d \"2.0\":"}],"source_content_type":"text/x-python","patch_set":4,"id":"a2915075_09990a4e","line":172,"in_reply_to":"b0ecf132_6661d95f","updated":"2021-08-30 08:18:47.000000000","message":"It is. After checking this, I\u0027ll add two methods: tenant and project, marking tenant as deprecated.","commit_id":"3e1fde0eb0ee2e2e05df0a5911cf3af8c58284c2"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1a2820bdb2b3af7886e9e51056370c0d20d15a63","unresolved":true,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def tenant(self, request):"},{"line_number":106,"context_line":"        \"\"\"Retrieve the project info in context.\"\"\""},{"line_number":107,"context_line":"        warnings.warn("},{"line_number":108,"context_line":"            \u0027\"tenant\" Quota API method is deprecated, use \"project\" instead\u0027)"},{"line_number":109,"context_line":"        return self._project(request, \u0027tenant\u0027)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"65f18740_555d77d9","line":107,"range":{"start_line":107,"start_character":8,"end_line":107,"end_character":21},"updated":"2021-09-09 07:57:24.000000000","message":"Why need alternative to LOG.warning?","commit_id":"30ac62b55af72926d4622a6037accfd41daa433e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"584470039b3c8bf670b29f5f86f91816f94c85cf","unresolved":true,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def tenant(self, request):"},{"line_number":106,"context_line":"        \"\"\"Retrieve the project info in context.\"\"\""},{"line_number":107,"context_line":"        warnings.warn("},{"line_number":108,"context_line":"            \u0027\"tenant\" Quota API method is deprecated, use \"project\" instead\u0027)"},{"line_number":109,"context_line":"        return self._project(request, \u0027tenant\u0027)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"c299bf24_5dd02c60","line":107,"range":{"start_line":107,"start_character":8,"end_line":107,"end_character":21},"in_reply_to":"65f18740_555d77d9","updated":"2021-09-09 08:40:38.000000000","message":"Because this is going to be called many times and we need to print this warning only once, not to overpopulate the logs. We had this problem before with the n-lib context: https://review.opendev.org/c/openstack/neutron-lib/+/711410\n\nwarnings.warn will be printed only once.","commit_id":"30ac62b55af72926d4622a6037accfd41daa433e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"98fcf61a5a9d22bccfef0666a351eb71e16bfe06","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def tenant(self, request):"},{"line_number":106,"context_line":"        \"\"\"Retrieve the project info in context.\"\"\""},{"line_number":107,"context_line":"        warnings.warn("},{"line_number":108,"context_line":"            \u0027\"tenant\" Quota API method is deprecated, use \"project\" instead\u0027)"},{"line_number":109,"context_line":"        return self._project(request, \u0027tenant\u0027)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5533784b_1b8e457f","line":107,"range":{"start_line":107,"start_character":8,"end_line":107,"end_character":21},"in_reply_to":"c299bf24_5dd02c60","updated":"2021-09-09 09:00:01.000000000","message":"Ack","commit_id":"30ac62b55af72926d4622a6037accfd41daa433e"}]}
