)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"51c244198eff87886d0c0d723b2c1080215d1a89","unresolved":true,"context_lines":[{"line_number":17,"context_line":"on the same provider network."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The patch configures only FIP addresses on the ARP proxy. It is"},{"line_number":20,"context_line":"configured by the reconiler or by an event when a new NAT entry is"},{"line_number":21,"context_line":"added or removed."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Assisted-By: Claude Opus 4.6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1810c3b3_fda7e552","line":20,"range":{"start_line":20,"start_character":18,"end_line":20,"end_character":27},"updated":"2026-09-03 15:14:50.000000000","message":"reconciler","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"72cf5a90350788d95a54d667a0c84f2f8f9beadf","unresolved":false,"context_lines":[{"line_number":17,"context_line":"on the same provider network."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The patch configures only FIP addresses on the ARP proxy. It is"},{"line_number":20,"context_line":"configured by the reconiler or by an event when a new NAT entry is"},{"line_number":21,"context_line":"added or removed."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Assisted-By: Claude Opus 4.6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"d4d7c5ce_b3cfc55c","line":20,"range":{"start_line":20,"start_character":18,"end_line":20,"end_character":27},"in_reply_to":"1810c3b3_fda7e552","updated":"2026-09-03 17:16:56.000000000","message":"Done","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b39cdf6e47a79c2bb86d4eb5335302723b023570","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a8e0c53e_91da296b","updated":"2026-09-01 23:59:28.000000000","message":"check experimental","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"aa6d584e8be8cac4856f088cc47b37b21e245030","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"56ed95de_a20c78cc","updated":"2026-09-04 17:33:58.000000000","message":"recheck functional tests got stuck","commit_id":"5758282f10d0863e46ef4e9e919fd8c93d721d1d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ff6aea93b3ecd1afbcfcf8abc83a94fc86c91eef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5a43e84a_4c0259cd","updated":"2026-09-06 21:58:34.000000000","message":"recheck functional timeout","commit_id":"5758282f10d0863e46ef4e9e919fd8c93d721d1d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"93bc07cdfa7e062044e23e631929f5a6f2ef3707","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"2d6dcfcf_bc1794fd","updated":"2026-09-07 13:39:53.000000000","message":"recheck neutron-functional","commit_id":"5758282f10d0863e46ef4e9e919fd8c93d721d1d"}],"neutron/services/bgp/commands.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"1c6d6509ed71f910f70d17d0338ce5947929019e","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"def _get_fip_ips_for_network(nb_idl, n_net_id):"},{"line_number":104,"context_line":"    return [nat.external_ip"},{"line_number":105,"context_line":"            for nat in nb_idl.tables[\u0027NAT\u0027].rows.values()"},{"line_number":106,"context_line":"            if (nat.type \u003d\u003d \u0027dnat_and_snat\u0027 and"},{"line_number":107,"context_line":"                nat.external_ids.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"570e3566_8498ed50","line":104,"updated":"2026-09-03 16:37:00.000000000","message":"It should be possible to add map key:value indexes to ovsdbapp (python-ovs should already support it) to avoid having to do this table scan if we need to in the future.","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"1c6d6509ed71f910f70d17d0338ce5947929019e","unresolved":true,"context_lines":[{"line_number":653,"context_line":"            interconnect_switch_name, constants.MAIN_ROUTER_NAME)"},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"    def run_idl(self, txn):"},{"line_number":656,"context_line":"        fip_ips \u003d _get_fip_ips_for_network(self.api, self.n_net_id)"},{"line_number":657,"context_line":"        try:"},{"line_number":658,"context_line":"            lsp \u003d self.api.lookup(\u0027Logical_Switch_Port\u0027, self.lsp_name)"},{"line_number":659,"context_line":"        except idlutils.RowNotFound:"}],"source_content_type":"text/x-python","patch_set":1,"id":"283623ea_d2edbe9d","line":656,"updated":"2026-09-03 16:37:00.000000000","message":"This is an expensive scan over all nat entries, seems like it could go after the lookup() to avoid doing it in the case we are going to return early anyway.","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4b0eed6dc2442a8384d028a91ae38963b714217f","unresolved":false,"context_lines":[{"line_number":653,"context_line":"            interconnect_switch_name, constants.MAIN_ROUTER_NAME)"},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"    def run_idl(self, txn):"},{"line_number":656,"context_line":"        fip_ips \u003d _get_fip_ips_for_network(self.api, self.n_net_id)"},{"line_number":657,"context_line":"        try:"},{"line_number":658,"context_line":"            lsp \u003d self.api.lookup(\u0027Logical_Switch_Port\u0027, self.lsp_name)"},{"line_number":659,"context_line":"        except idlutils.RowNotFound:"}],"source_content_type":"text/x-python","patch_set":1,"id":"d21d7289_f418c1c4","line":656,"in_reply_to":"283623ea_d2edbe9d","updated":"2026-09-03 17:14:10.000000000","message":"Done","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"}],"neutron/services/bgp/events.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"51c244198eff87886d0c0d723b2c1080215d1a89","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"class FIPChangedEvent(FIPEvent):"},{"line_number":158,"context_line":"    EVENTS \u003d (BGPReconcilerResourceEvent.ROW_CREATE,"},{"line_number":159,"context_line":"              BGPReconcilerResourceEvent.ROW_DELETE)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"class BGPChassisEvent(BGPReconcilerResourceEvent):"}],"source_content_type":"text/x-python","patch_set":1,"id":"29ba5f83_e1d6c81f","line":159,"range":{"start_line":158,"start_character":4,"end_line":159,"end_character":52},"updated":"2026-09-03 15:14:50.000000000","message":"Ok, we don\u0027t need UPDATE because the `NAT` register is deleted when the Neutron FIP is updated.","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"}],"neutron/services/bgp/ovn.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"51c244198eff87886d0c0d723b2c1080215d1a89","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    \u0027Logical_Router\u0027, \u0027Logical_Router_Port\u0027,"},{"line_number":30,"context_line":"    \u0027HA_Chassis_Group\u0027, \u0027HA_Chassis\u0027,"},{"line_number":31,"context_line":"    \u0027Logical_Router_Static_Route\u0027, \u0027Logical_Router_Policy\u0027,"},{"line_number":32,"context_line":"    \u0027DHCP_Options\u0027, \u0027NAT\u0027,"},{"line_number":33,"context_line":")"},{"line_number":34,"context_line":"OVN_SB_TABLES \u003d (\u0027Chassis\u0027, \u0027Chassis_Private\u0027)"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bd024cf6_3a0c478d","line":32,"range":{"start_line":32,"start_character":19,"end_line":32,"end_character":26},"updated":"2026-09-03 15:14:50.000000000","message":"nit: we should have added one table per line...","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"}],"neutron/tests/functional/services/bgp/__init__.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"1c6d6509ed71f910f70d17d0338ce5947929019e","unresolved":true,"context_lines":[{"line_number":34,"context_line":"get_unique_name \u003d n_base.get_unique_name"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class AddNATToRouterCommand(ovs_cmd.BaseCommand):"},{"line_number":38,"context_line":"    \"\"\"Create a NAT row and add it to a router in a single transaction."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    ovsdbapp\u0027s lr_nat_add does not accept external_ids. This command"}],"source_content_type":"text/x-python","patch_set":1,"id":"aedecebd_a0e91e69","line":37,"updated":"2026-09-03 16:37:00.000000000","message":"nit: I think you could just subclass adding **columns and doing the set_columns() at the end and keep the type checking of the original, etc.","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"956a7b5d467038f330ae6b86b9f73b480db48363","unresolved":true,"context_lines":[{"line_number":34,"context_line":"get_unique_name \u003d n_base.get_unique_name"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class AddNATToRouterCommand(ovs_cmd.BaseCommand):"},{"line_number":38,"context_line":"    \"\"\"Create a NAT row and add it to a router in a single transaction."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    ovsdbapp\u0027s lr_nat_add does not accept external_ids. This command"}],"source_content_type":"text/x-python","patch_set":1,"id":"741ee36e_7346dba4","line":37,"in_reply_to":"5c154217_9916f1d8","updated":"2026-09-03 17:32:59.000000000","message":"Ah, yeah. It could be done with a with transaction() block and db_set() command to set the external_id in the same transaction in the test as an example. Not a big deal either way.","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4b0eed6dc2442a8384d028a91ae38963b714217f","unresolved":true,"context_lines":[{"line_number":34,"context_line":"get_unique_name \u003d n_base.get_unique_name"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class AddNATToRouterCommand(ovs_cmd.BaseCommand):"},{"line_number":38,"context_line":"    \"\"\"Create a NAT row and add it to a router in a single transaction."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    ovsdbapp\u0027s lr_nat_add does not accept external_ids. This command"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c154217_9916f1d8","line":37,"in_reply_to":"aedecebd_a0e91e69","updated":"2026-09-03 17:14:10.000000000","message":"I tried but in `run_idl` I didn\u0027t have an access to the `nat` instance returned by `txn.insert()` to be able to call `set_columns` on it. And given that this is just for the tests I thought it would be fine like this. But if there is a way how to do it, I\u0027ll be happy to improve this :)","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"}],"neutron/tests/functional/services/bgp/test_commands.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"10d006e1a0e6a8b28ff3f79166dbed01869b3eeb","unresolved":true,"context_lines":[{"line_number":815,"context_line":""},{"line_number":816,"context_line":"        return lsp_name"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    def _create_nat_entry(self, router_name, external_ip, net_id):"},{"line_number":819,"context_line":"        self.nb_api.db_create("},{"line_number":820,"context_line":"            \u0027NAT\u0027,"},{"line_number":821,"context_line":"            type\u003d\u0027dnat_and_snat\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"6579153a_fa8d3ca2","line":818,"range":{"start_line":818,"start_character":8,"end_line":818,"end_character":25},"updated":"2026-09-03 15:16:52.000000000","message":"From Claude: this is dead code","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4b0eed6dc2442a8384d028a91ae38963b714217f","unresolved":false,"context_lines":[{"line_number":815,"context_line":""},{"line_number":816,"context_line":"        return lsp_name"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    def _create_nat_entry(self, router_name, external_ip, net_id):"},{"line_number":819,"context_line":"        self.nb_api.db_create("},{"line_number":820,"context_line":"            \u0027NAT\u0027,"},{"line_number":821,"context_line":"            type\u003d\u0027dnat_and_snat\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"710ce858_483a196f","line":818,"range":{"start_line":818,"start_character":8,"end_line":818,"end_character":25},"in_reply_to":"232caa39_f4ee93d6","updated":"2026-09-03 17:14:10.000000000","message":"I guess I asked my Claude to do the code review and then I made some additional changes, or your Claude is better than my Claude. Done","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"1c6d6509ed71f910f70d17d0338ce5947929019e","unresolved":true,"context_lines":[{"line_number":815,"context_line":""},{"line_number":816,"context_line":"        return lsp_name"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    def _create_nat_entry(self, router_name, external_ip, net_id):"},{"line_number":819,"context_line":"        self.nb_api.db_create("},{"line_number":820,"context_line":"            \u0027NAT\u0027,"},{"line_number":821,"context_line":"            type\u003d\u0027dnat_and_snat\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"232caa39_f4ee93d6","line":818,"range":{"start_line":818,"start_character":8,"end_line":818,"end_character":25},"in_reply_to":"6579153a_fa8d3ca2","updated":"2026-09-03 16:37:00.000000000","message":"My Claude also says this is dead code. 😆","commit_id":"fa793bdb2779a0b99fcbb626cf12614a28806b42"}]}
