)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c3a7dcb4e7038b49d1e01dddf74d3699a5d14911","unresolved":true,"context_lines":[{"line_number":27,"context_line":"Made-with: Cursor"},{"line_number":28,"context_line":"Change-Id: I776a9d3e9092fc062fcade8a5499b5dd0bfb1756"},{"line_number":29,"context_line":"Signed-off-by: JayGue Lee \u003cenginrect@gmail.com\u003e"},{"line_number":30,"context_line":"Co-authored-by: Cursor \u003ccursoragent@cursor.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"026373ad_bc58766c","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":47},"updated":"2026-06-15 07:29:24.000000000","message":"Nit: I think this line is not necessary","commit_id":"c9b6ee4656f992c5663dddd5ed643a807ed9b2fe"},{"author":{"_account_id":38822,"name":"JayGue Lee","display_name":"JayGue Lee","email":"enginrect@gmail.com","username":"enginrect"},"change_message_id":"4432ff9f0fa6092b55ec7741061a89c7e6ff3d33","unresolved":false,"context_lines":[{"line_number":27,"context_line":"Made-with: Cursor"},{"line_number":28,"context_line":"Change-Id: I776a9d3e9092fc062fcade8a5499b5dd0bfb1756"},{"line_number":29,"context_line":"Signed-off-by: JayGue Lee \u003cenginrect@gmail.com\u003e"},{"line_number":30,"context_line":"Co-authored-by: Cursor \u003ccursoragent@cursor.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ce2e2b08_0386178a","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":47},"in_reply_to":"026373ad_bc58766c","updated":"2026-07-06 23:25:18.000000000","message":"Done","commit_id":"c9b6ee4656f992c5663dddd5ed643a807ed9b2fe"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5afebeabf97068e0097c36c8df5a72b492caedf5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1517840f_e5429b08","updated":"2026-05-27 17:28:14.000000000","message":"Unit test failures seem related.","commit_id":"bb4c6b778a26c5b89a4bfc4d28675a0d4e34bac2"},{"author":{"_account_id":38822,"name":"JayGue Lee","display_name":"JayGue Lee","email":"enginrect@gmail.com","username":"enginrect"},"change_message_id":"4432ff9f0fa6092b55ec7741061a89c7e6ff3d33","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bcc8c53a_f7d02360","in_reply_to":"1517840f_e5429b08","updated":"2026-07-06 23:25:18.000000000","message":"Thanks Brian, you\u0027re right. The 7 failing tests in test_plugin.py were all asserting add_nat_rule_in_lrouter calls without the new gateway_port parameter. Fixed in PS5 by adding gateway_port\u003dmock.ANY to those assertions.","commit_id":"bb4c6b778a26c5b89a4bfc4d28675a0d4e34bac2"},{"author":{"_account_id":38822,"name":"JayGue Lee","display_name":"JayGue Lee","email":"enginrect@gmail.com","username":"enginrect"},"change_message_id":"4432ff9f0fa6092b55ec7741061a89c7e6ff3d33","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"76d526f4_0824d434","updated":"2026-07-06 23:25:18.000000000","message":"recheck","commit_id":"db40587dca07eb53070d5d8e19fe7c413812eca9"},{"author":{"_account_id":38822,"name":"JayGue Lee","display_name":"JayGue Lee","email":"enginrect@gmail.com","username":"enginrect"},"change_message_id":"b9da909021acd8d1269ffb81426ab1c84739f059","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"6d28dd53_e2b0654a","updated":"2026-07-06 23:27:09.000000000","message":"sorry about the interruption, my bad.","commit_id":"7e35a5f16d5460a7fde298ccb0ceeada575d080a"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5afebeabf97068e0097c36c8df5a72b492caedf5","unresolved":true,"context_lines":[{"line_number":2120,"context_line":"            lrp \u003d self._nb_idl.get_lrouter_port(gw_port[\u0027id\u0027])"},{"line_number":2121,"context_line":"            for gw_info in self._get_gw_info(context, gw_port):"},{"line_number":2122,"context_line":"                if gw_info.ip_version !\u003d const.IP_VERSION_6:"},{"line_number":2123,"context_line":"                    yield gw_info.router_ip, lrp"},{"line_number":2124,"context_line":""},{"line_number":2125,"context_line":"    def update_nat_rules(self, context, router_id, enable_snat, cidrs\u003dNone,"},{"line_number":2126,"context_line":"                         txn\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"a1a3e48f_fc10a71c","line":2123,"updated":"2026-05-27 17:28:14.000000000","message":"I think you can make this just like the above code with just a small change:\n\n+        yield from (\n+            (gw_info.router_ip, self._nb_idl.get_lrouter_port(gw_port[\u0027id\u0027]))\n+            for gw_port in self._get_router_gw_ports(context, router_id)\n+            for gw_info in self._get_gw_info(context, gw_port)\n+            if gw_info.ip_version !\u003d const.IP_VERSION_6\n+        )","commit_id":"bb4c6b778a26c5b89a4bfc4d28675a0d4e34bac2"},{"author":{"_account_id":38822,"name":"JayGue Lee","display_name":"JayGue Lee","email":"enginrect@gmail.com","username":"enginrect"},"change_message_id":"4432ff9f0fa6092b55ec7741061a89c7e6ff3d33","unresolved":false,"context_lines":[{"line_number":2120,"context_line":"            lrp \u003d self._nb_idl.get_lrouter_port(gw_port[\u0027id\u0027])"},{"line_number":2121,"context_line":"            for gw_info in self._get_gw_info(context, gw_port):"},{"line_number":2122,"context_line":"                if gw_info.ip_version !\u003d const.IP_VERSION_6:"},{"line_number":2123,"context_line":"                    yield gw_info.router_ip, lrp"},{"line_number":2124,"context_line":""},{"line_number":2125,"context_line":"    def update_nat_rules(self, context, router_id, enable_snat, cidrs\u003dNone,"},{"line_number":2126,"context_line":"                         txn\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"925d8b7f_4c4898a3","line":2123,"in_reply_to":"a1a3e48f_fc10a71c","updated":"2026-07-06 23:25:18.000000000","message":"Good suggestion, adopted in PS5. Replaced the nested for-loops with a yield from generator expression as you suggested.","commit_id":"bb4c6b778a26c5b89a4bfc4d28675a0d4e34bac2"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c3a7dcb4e7038b49d1e01dddf74d3699a5d14911","unresolved":true,"context_lines":[{"line_number":2132,"context_line":"            if gw_info.ip_version !\u003d const.IP_VERSION_6"},{"line_number":2133,"context_line":"        )"},{"line_number":2134,"context_line":""},{"line_number":2135,"context_line":"    def _iter_ipv4_gw_addrs_with_lrp(self, context, router_id):"},{"line_number":2136,"context_line":"        \"\"\"Yield (router_ip, lrp) tuples for each IPv4 gateway address."},{"line_number":2137,"context_line":""},{"line_number":2138,"context_line":"        For routers with multiple gateway ports on the same subnet, each"}],"source_content_type":"text/x-python","patch_set":6,"id":"d92fa00a_7c8b865c","line":2135,"updated":"2026-06-15 07:29:24.000000000","message":"+1 for similar approach as above, makes the code much more readable.\nCan you please check i duplication can be avoided, like with extra param or similar?","commit_id":"c9b6ee4656f992c5663dddd5ed643a807ed9b2fe"},{"author":{"_account_id":38822,"name":"JayGue Lee","display_name":"JayGue Lee","email":"enginrect@gmail.com","username":"enginrect"},"change_message_id":"4432ff9f0fa6092b55ec7741061a89c7e6ff3d33","unresolved":false,"context_lines":[{"line_number":2132,"context_line":"            if gw_info.ip_version !\u003d const.IP_VERSION_6"},{"line_number":2133,"context_line":"        )"},{"line_number":2134,"context_line":""},{"line_number":2135,"context_line":"    def _iter_ipv4_gw_addrs_with_lrp(self, context, router_id):"},{"line_number":2136,"context_line":"        \"\"\"Yield (router_ip, lrp) tuples for each IPv4 gateway address."},{"line_number":2137,"context_line":""},{"line_number":2138,"context_line":"        For routers with multiple gateway ports on the same subnet, each"}],"source_content_type":"text/x-python","patch_set":6,"id":"93766533_44b4987f","line":2135,"in_reply_to":"d92fa00a_7c8b865c","updated":"2026-07-06 23:25:18.000000000","message":"Done. Thanks,by the way.","commit_id":"c9b6ee4656f992c5663dddd5ed643a807ed9b2fe"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c3a7dcb4e7038b49d1e01dddf74d3699a5d14911","unresolved":true,"context_lines":[{"line_number":2144,"context_line":"        \"\"\""},{"line_number":2145,"context_line":"        yield from ("},{"line_number":2146,"context_line":"            (gw_info.router_ip,"},{"line_number":2147,"context_line":"             self._nb_idl.get_lrouter_port(gw_port[\u0027id\u0027]))"},{"line_number":2148,"context_line":"            for gw_port in self._get_router_gw_ports(context, router_id)"},{"line_number":2149,"context_line":"            for gw_info in self._get_gw_info(context, gw_port)"},{"line_number":2150,"context_line":"            if gw_info.ip_version !\u003d const.IP_VERSION_6"}],"source_content_type":"text/x-python","patch_set":6,"id":"19e00ef3_c568f153","line":2147,"range":{"start_line":2147,"start_character":0,"end_line":2147,"end_character":58},"updated":"2026-06-15 07:29:24.000000000","message":"if I understand right this goes to nb_db in each iteration, can we fetch preemtively all the lrps and giveit as param to the method to avoid db calls in the loop?","commit_id":"c9b6ee4656f992c5663dddd5ed643a807ed9b2fe"},{"author":{"_account_id":38822,"name":"JayGue Lee","display_name":"JayGue Lee","email":"enginrect@gmail.com","username":"enginrect"},"change_message_id":"4432ff9f0fa6092b55ec7741061a89c7e6ff3d33","unresolved":true,"context_lines":[{"line_number":2144,"context_line":"        \"\"\""},{"line_number":2145,"context_line":"        yield from ("},{"line_number":2146,"context_line":"            (gw_info.router_ip,"},{"line_number":2147,"context_line":"             self._nb_idl.get_lrouter_port(gw_port[\u0027id\u0027]))"},{"line_number":2148,"context_line":"            for gw_port in self._get_router_gw_ports(context, router_id)"},{"line_number":2149,"context_line":"            for gw_info in self._get_gw_info(context, gw_port)"},{"line_number":2150,"context_line":"            if gw_info.ip_version !\u003d const.IP_VERSION_6"}],"source_content_type":"text/x-python","patch_set":6,"id":"3b7a7cb8_c822b097","line":2147,"range":{"start_line":2147,"start_character":0,"end_line":2147,"end_character":58},"in_reply_to":"19e00ef3_c568f153","updated":"2026-07-06 23:25:18.000000000","message":"Good point. In PS7 I merged the two iterators into a single _iter_ipv4_gw_addrs(with_lrp\u003d) and moved the get_lrouter_port() call outside the inner gw_info loop, so it is now called once per gateway port rather than once per (gateway port x gw_info) pair.\n\nThat said, get_lrouter_port() is an OVSDB IDL in-memory index lookup (no network round-trip), and ovsdbapp does not expose a bulk get_lrouter_ports(list_of_ids) API, so pre-fetching into a dict would still be a Python-level loop over the same local cache.","commit_id":"c9b6ee4656f992c5663dddd5ed643a807ed9b2fe"}]}
