)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"853c7a972238769456ee08e45f65932cf15b559a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"49d82e13_84bdb9cb","updated":"2026-08-17 12:57:20.000000000","message":"Setting -1 for visibility as this breaks the original sync","commit_id":"6a4e5bda1839c2cfcc1e80aaa9f2189e2d7fa990"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f74b57859611369b50de339cbe03a841ccf8846f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f0c3877b_6a46f27e","in_reply_to":"49d82e13_84bdb9cb","updated":"2026-08-17 13:11:07.000000000","message":"I proposed this solution - https://review.opendev.org/c/openstack/neutron/+/1001147 where we could define the order with a class attribute","commit_id":"6a4e5bda1839c2cfcc1e80aaa9f2189e2d7fa990"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"d54d04585a3f1eb436c3e50a8ea947d318e3dc85","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"dfa43f52_1354ce20","in_reply_to":"f0c3877b_6a46f27e","updated":"2026-08-27 14:26:46.000000000","message":"Done","commit_id":"6a4e5bda1839c2cfcc1e80aaa9f2189e2d7fa990"}],"neutron/db/evpn_db.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"207516047bd590cac390515afedcca1a3e066e76","unresolved":true,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":185,"context_line":"    @db_api.CONTEXT_READER"},{"line_number":186,"context_line":"    def get_all_evpn_instances(self, context):"},{"line_number":187,"context_line":"        \"\"\"Get all EVPN L3 instances with their VNI and VLAN allocations."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        :param context: Neutron request context"}],"source_content_type":"text/x-python","patch_set":3,"id":"b4286d92_807a33ba","line":186,"updated":"2026-07-31 19:49:22.000000000","message":"nit: I\u0027d go with `get_all_evpn_l3_instances` - as likely we\u0027ll implement l2 as well","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"fc6ec81e020fa4862616a1c840ea0eaba257b0da","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":185,"context_line":"    @db_api.CONTEXT_READER"},{"line_number":186,"context_line":"    def get_all_evpn_instances(self, context):"},{"line_number":187,"context_line":"        \"\"\"Get all EVPN L3 instances with their VNI and VLAN allocations."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        :param context: Neutron request context"}],"source_content_type":"text/x-python","patch_set":3,"id":"e4906267_e14c2584","line":186,"in_reply_to":"b4286d92_807a33ba","updated":"2026-08-03 13:52:23.000000000","message":"Done","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"}],"neutron/services/evpn/db_sync.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"207516047bd590cac390515afedcca1a3e066e76","unresolved":true,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _sync_topology(self, router_id, inst):"},{"line_number":81,"context_line":"        super()._sync_topology(router_id, inst)"},{"line_number":82,"context_line":"        LOG.warning(\"Repairing EVPN topology for router %s\","},{"line_number":83,"context_line":"                    router_id)"},{"line_number":84,"context_line":"        self._txn.add(evpn_commands.CreateEVPNRouterCommand("},{"line_number":85,"context_line":"            self.ovn_nb_api, router_id,"},{"line_number":86,"context_line":"            inst[\u0027vni\u0027], inst[\u0027vlan\u0027], self.gw_chassis))"}],"source_content_type":"text/x-python","patch_set":3,"id":"4f8ee2a8_7db775e9","line":83,"range":{"start_line":82,"start_character":0,"end_line":83,"end_character":30},"updated":"2026-07-31 19:49:22.000000000","message":"Do we want the warnings to be here? There is a warning message in the super() call","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"fc6ec81e020fa4862616a1c840ea0eaba257b0da","unresolved":true,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _sync_topology(self, router_id, inst):"},{"line_number":81,"context_line":"        super()._sync_topology(router_id, inst)"},{"line_number":82,"context_line":"        LOG.warning(\"Repairing EVPN topology for router %s\","},{"line_number":83,"context_line":"                    router_id)"},{"line_number":84,"context_line":"        self._txn.add(evpn_commands.CreateEVPNRouterCommand("},{"line_number":85,"context_line":"            self.ovn_nb_api, router_id,"},{"line_number":86,"context_line":"            inst[\u0027vni\u0027], inst[\u0027vlan\u0027], self.gw_chassis))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9b434dcc_9b44becb","line":83,"range":{"start_line":82,"start_character":0,"end_line":83,"end_character":30},"in_reply_to":"4f8ee2a8_7db775e9","updated":"2026-08-03 13:52:23.000000000","message":"I did it on purpose, anyway. The ones above are the \"it\u0027s missing\" and the ones here are the \"We\u0027re fixing it.\" which is similar to rules on ovn_db_sync, like _add_routers_del_txn, etc.","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c758177b35de167000a783f1ecf93959e81adeb8","unresolved":true,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _sync_topology(self, router_id, inst):"},{"line_number":81,"context_line":"        super()._sync_topology(router_id, inst)"},{"line_number":82,"context_line":"        LOG.warning(\"Repairing EVPN topology for router %s\","},{"line_number":83,"context_line":"                    router_id)"},{"line_number":84,"context_line":"        self._txn.add(evpn_commands.CreateEVPNRouterCommand("},{"line_number":85,"context_line":"            self.ovn_nb_api, router_id,"},{"line_number":86,"context_line":"            inst[\u0027vni\u0027], inst[\u0027vlan\u0027], self.gw_chassis))"}],"source_content_type":"text/x-python","patch_set":3,"id":"0affd25e_c133e5ea","line":83,"range":{"start_line":82,"start_character":0,"end_line":83,"end_character":30},"in_reply_to":"9b434dcc_9b44becb","updated":"2026-08-27 15:16:55.000000000","message":"ok, I just thought from the troubleshooting perspective when running the `repair` mode it won\u0027t add any new information but i\u0027m fine with that","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"207516047bd590cac390515afedcca1a3e066e76","unresolved":true,"context_lines":[{"line_number":240,"context_line":"                syncer._sync_topology(router_id, db_routers[router_id])"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"            for lrp_name in missing_advertised:"},{"line_number":243,"context_line":"                port_id \u003d advertised_lrp_to_port.get(lrp_name)"},{"line_number":244,"context_line":"                syncer._sync_missing_advertised(port_id, lrp_name)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            for name in orphan_ls:"}],"source_content_type":"text/x-python","patch_set":3,"id":"4ae09634_7698cb69","line":243,"updated":"2026-07-31 19:49:22.000000000","message":"we can do\n```\ntry:\n    port_id \u003d advertised_lrp_to_port[lrp_name]\nexcept KeyError:\n    continue\nsyncer._sync_missing_advertised(port_id, lrp_name)\n```\nand avoid the branching on L90","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"fc6ec81e020fa4862616a1c840ea0eaba257b0da","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                syncer._sync_topology(router_id, db_routers[router_id])"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"            for lrp_name in missing_advertised:"},{"line_number":243,"context_line":"                port_id \u003d advertised_lrp_to_port.get(lrp_name)"},{"line_number":244,"context_line":"                syncer._sync_missing_advertised(port_id, lrp_name)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            for name in orphan_ls:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fd4cf620_d47f3381","line":243,"in_reply_to":"4ae09634_7698cb69","updated":"2026-08-03 13:52:23.000000000","message":"Done","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4f39d15f867752d04dc61090e138517ef8d50b6a","unresolved":true,"context_lines":[{"line_number":128,"context_line":"    _required_mechanism_drivers \u003d [\u0027ovn-sync\u0027]"},{"line_number":129,"context_line":"    _required_service_plugins \u003d [\u0027evpn\u0027]"},{"line_number":130,"context_line":"    _required_ml2_ext_drivers \u003d []"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def do_sync(self):"},{"line_number":133,"context_line":"        LOG.debug(\u0027OVN-NB Sync EVPN started @ %s\u0027, str(datetime.now()))"},{"line_number":134,"context_line":"        ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":5,"id":"01bef2d8_83f025e3","line":131,"updated":"2026-08-17 13:33:28.000000000","message":"Putting `_sync_order \u003d 1` here with https://review.opendev.org/c/openstack/neutron/+/1001147 would solve the problem with running the db sync while the evpn router doesn\u0027t exist in the NB DB yet.","commit_id":"6a4e5bda1839c2cfcc1e80aaa9f2189e2d7fa990"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"d54d04585a3f1eb436c3e50a8ea947d318e3dc85","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    _required_mechanism_drivers \u003d [\u0027ovn-sync\u0027]"},{"line_number":129,"context_line":"    _required_service_plugins \u003d [\u0027evpn\u0027]"},{"line_number":130,"context_line":"    _required_ml2_ext_drivers \u003d []"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def do_sync(self):"},{"line_number":133,"context_line":"        LOG.debug(\u0027OVN-NB Sync EVPN started @ %s\u0027, str(datetime.now()))"},{"line_number":134,"context_line":"        ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1c0cb22f_02a664b4","line":131,"in_reply_to":"01bef2d8_83f025e3","updated":"2026-08-27 14:26:46.000000000","message":"Done","commit_id":"6a4e5bda1839c2cfcc1e80aaa9f2189e2d7fa990"}],"neutron/tests/functional/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_db_sync.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"41fe28016a4a16bf8c30a158edb3516a2a717024","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from neutron.services.evpn import commands as evpn_commands"},{"line_number":50,"context_line":"from neutron.services.evpn import constants as evpn_const"},{"line_number":51,"context_line":"from neutron.services.evpn import db_sync as evpn_db_sync"},{"line_number":52,"context_line":"from neutron.services.evpn import helpers as evpn_helpers"},{"line_number":53,"context_line":"from neutron.services.portforwarding.drivers.ovn.driver import \\"},{"line_number":54,"context_line":"    OVNPortForwarding as ovn_pf"},{"line_number":55,"context_line":"from neutron.services.revisions import revision_plugin"}],"source_content_type":"text/x-python","patch_set":3,"id":"eb19e90f_fbca1b6a","line":52,"updated":"2026-07-31 18:48:56.000000000","message":"pep8: E0611: No name \u0027helpers\u0027 in module \u0027neutron.services.evpn\u0027 (no-name-in-module)","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"207516047bd590cac390515afedcca1a3e066e76","unresolved":true,"context_lines":[{"line_number":2262,"context_line":"    _extension_drivers \u003d [\u0027port_security\u0027, \u0027revision_plugin\u0027]"},{"line_number":2263,"context_line":""},{"line_number":2264,"context_line":"    def setUp(self):"},{"line_number":2265,"context_line":"        self._mock_has_lock \u003d mock.patch.object("},{"line_number":2266,"context_line":"            maintenance.DBInconsistenciesPeriodics, \u0027has_lock\u0027,"},{"line_number":2267,"context_line":"            mock.PropertyMock(return_value\u003dTrue))"},{"line_number":2268,"context_line":"        self.mock_has_lock \u003d self._mock_has_lock.start()"},{"line_number":2269,"context_line":"        self._mock_set_lock \u003d mock.patch.object("},{"line_number":2270,"context_line":"            ovsdb_monitor.BaseOvnIdl, \u0027set_lock\u0027)"},{"line_number":2271,"context_line":"        self.mock_set_lock \u003d self._mock_set_lock.start()"}],"source_content_type":"text/x-python","patch_set":3,"id":"c05d22b3_8437aaea","line":2268,"range":{"start_line":2265,"start_character":0,"end_line":2268,"end_character":56},"updated":"2026-07-31 19:49:22.000000000","message":"nit: This can be a one-liner","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"fc6ec81e020fa4862616a1c840ea0eaba257b0da","unresolved":false,"context_lines":[{"line_number":2262,"context_line":"    _extension_drivers \u003d [\u0027port_security\u0027, \u0027revision_plugin\u0027]"},{"line_number":2263,"context_line":""},{"line_number":2264,"context_line":"    def setUp(self):"},{"line_number":2265,"context_line":"        self._mock_has_lock \u003d mock.patch.object("},{"line_number":2266,"context_line":"            maintenance.DBInconsistenciesPeriodics, \u0027has_lock\u0027,"},{"line_number":2267,"context_line":"            mock.PropertyMock(return_value\u003dTrue))"},{"line_number":2268,"context_line":"        self.mock_has_lock \u003d self._mock_has_lock.start()"},{"line_number":2269,"context_line":"        self._mock_set_lock \u003d mock.patch.object("},{"line_number":2270,"context_line":"            ovsdb_monitor.BaseOvnIdl, \u0027set_lock\u0027)"},{"line_number":2271,"context_line":"        self.mock_set_lock \u003d self._mock_set_lock.start()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9353a349_f34cfefc","line":2268,"range":{"start_line":2265,"start_character":0,"end_line":2268,"end_character":56},"in_reply_to":"c05d22b3_8437aaea","updated":"2026-08-03 13:52:23.000000000","message":"Done","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"207516047bd590cac390515afedcca1a3e066e76","unresolved":true,"context_lines":[{"line_number":2383,"context_line":"        self._sync_evpn(n_lib_ovn_const.OVN_DB_SYNC_MODE_REPAIR)"},{"line_number":2384,"context_line":"        self._validate_evpn_objects_exist()"},{"line_number":2385,"context_line":""},{"line_number":2386,"context_line":"    def test_evpn_sync_repair_missing_topology(self):"},{"line_number":2387,"context_line":"        self._create_evpn_resources()"},{"line_number":2388,"context_line":"        self._validate_evpn_objects_exist()"},{"line_number":2389,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9716b91d_c5759aa8","line":2386,"range":{"start_line":2386,"start_character":38,"end_line":2386,"end_character":46},"updated":"2026-07-31 19:49:22.000000000","message":"`missing_ls` ?","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"fc6ec81e020fa4862616a1c840ea0eaba257b0da","unresolved":false,"context_lines":[{"line_number":2383,"context_line":"        self._sync_evpn(n_lib_ovn_const.OVN_DB_SYNC_MODE_REPAIR)"},{"line_number":2384,"context_line":"        self._validate_evpn_objects_exist()"},{"line_number":2385,"context_line":""},{"line_number":2386,"context_line":"    def test_evpn_sync_repair_missing_topology(self):"},{"line_number":2387,"context_line":"        self._create_evpn_resources()"},{"line_number":2388,"context_line":"        self._validate_evpn_objects_exist()"},{"line_number":2389,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bc05093d_9c4b4b13","line":2386,"range":{"start_line":2386,"start_character":38,"end_line":2386,"end_character":46},"in_reply_to":"9716b91d_c5759aa8","updated":"2026-08-03 13:52:23.000000000","message":"Done","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"207516047bd590cac390515afedcca1a3e066e76","unresolved":true,"context_lines":[{"line_number":2414,"context_line":"        self._sync_evpn(n_lib_ovn_const.OVN_DB_SYNC_MODE_REPAIR)"},{"line_number":2415,"context_line":""},{"line_number":2416,"context_line":"        self._validate_evpn_objects_exist()"},{"line_number":2417,"context_line":""},{"line_number":2418,"context_line":"    def test_evpn_sync_repair_missing_advertise_host(self):"},{"line_number":2419,"context_line":"        self._create_evpn_resources()"},{"line_number":2420,"context_line":"        self._validate_evpn_objects_exist()"}],"source_content_type":"text/x-python","patch_set":3,"id":"6633ecb5_0a7a46bd","line":2417,"updated":"2026-07-31 19:49:22.000000000","message":"Tests we can add:\n - missing HA_CHassis_group\n - wrong options (missing dynamic-routing for example) on LR or LRPs","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"fc6ec81e020fa4862616a1c840ea0eaba257b0da","unresolved":false,"context_lines":[{"line_number":2414,"context_line":"        self._sync_evpn(n_lib_ovn_const.OVN_DB_SYNC_MODE_REPAIR)"},{"line_number":2415,"context_line":""},{"line_number":2416,"context_line":"        self._validate_evpn_objects_exist()"},{"line_number":2417,"context_line":""},{"line_number":2418,"context_line":"    def test_evpn_sync_repair_missing_advertise_host(self):"},{"line_number":2419,"context_line":"        self._create_evpn_resources()"},{"line_number":2420,"context_line":"        self._validate_evpn_objects_exist()"}],"source_content_type":"text/x-python","patch_set":3,"id":"953f5947_9fd71d28","line":2417,"in_reply_to":"6633ecb5_0a7a46bd","updated":"2026-08-03 13:52:23.000000000","message":"Done","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"207516047bd590cac390515afedcca1a3e066e76","unresolved":true,"context_lines":[{"line_number":2434,"context_line":"        self.assertIn(self.evpn_advertised_lrp,"},{"line_number":2435,"context_line":"                      self._get_ovn_advertised_lrp_names())"},{"line_number":2436,"context_line":""},{"line_number":2437,"context_line":"    def test_evpn_sync_repair_orphan_cleanup(self):"},{"line_number":2438,"context_line":"        self._create_evpn_resources()"},{"line_number":2439,"context_line":"        self._validate_evpn_objects_exist()"},{"line_number":2440,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"25424c02_df695ba7","line":2437,"updated":"2026-07-31 19:49:22.000000000","message":"test with an orphaned LR","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"fc6ec81e020fa4862616a1c840ea0eaba257b0da","unresolved":false,"context_lines":[{"line_number":2434,"context_line":"        self.assertIn(self.evpn_advertised_lrp,"},{"line_number":2435,"context_line":"                      self._get_ovn_advertised_lrp_names())"},{"line_number":2436,"context_line":""},{"line_number":2437,"context_line":"    def test_evpn_sync_repair_orphan_cleanup(self):"},{"line_number":2438,"context_line":"        self._create_evpn_resources()"},{"line_number":2439,"context_line":"        self._validate_evpn_objects_exist()"},{"line_number":2440,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"d21dd8dc_a5e34305","line":2437,"in_reply_to":"25424c02_df695ba7","updated":"2026-08-03 13:52:23.000000000","message":"Done","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"}],"neutron/tests/functional/services/evpn/test_commands.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"41fe28016a4a16bf8c30a158edb3516a2a717024","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from neutron.services.bgp import constants as bgp_const"},{"line_number":25,"context_line":"from neutron.services.evpn import commands as evpn_ovn"},{"line_number":26,"context_line":"from neutron.services.evpn import constants as evpn_const"},{"line_number":27,"context_line":"from neutron.services.evpn import helpers as evpn_helpers"},{"line_number":28,"context_line":"from neutron.tests.functional import base as func_base"},{"line_number":29,"context_line":"from neutron.tests.functional.services import bgp as bgp_base"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"0a88e6ff_ab4401fa","line":27,"updated":"2026-07-31 18:48:56.000000000","message":"pep8: E0611: No name \u0027helpers\u0027 in module \u0027neutron.services.evpn\u0027 (no-name-in-module)","commit_id":"a261f79c6685c592cf22e2e9d15d9d3a2fa1b1f0"}],"pyproject.toml":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ff6589afd4a8ef4774b8dd4efef99d3870ed5cbd","unresolved":true,"context_lines":[{"line_number":298,"context_line":"[project.entry-points.\"neutron.ovn.db_sync\"]"},{"line_number":299,"context_line":"neutron_nb_sync \u003d \"neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.ovn_db_sync:OvnNbSynchronizer\""},{"line_number":300,"context_line":"neutron_sb_sync \u003d \"neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.ovn_db_sync:OvnSbSynchronizer\""},{"line_number":301,"context_line":"evpn_sync \u003d \"neutron.services.evpn.db_sync:EvpnOvnSynchronizer\""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"[project.entry-points.\"neutron.ovn.db_migration\"]"},{"line_number":304,"context_line":"neutron \u003d \"neutron.plugins.ml2.drivers.ovn.db_migration:migrate_neutron_database_to_ovn\""}],"source_content_type":"text/x-toml","patch_set":5,"id":"6468668a_d730f4f4","line":301,"updated":"2026-08-13 12:04:19.000000000","message":"I think the naming breaks the db sync script. I tried to delete an evpn router and run the sync with evpn plugin - it failed because we do not recreate the router as that what the NB db syncer should do. So then I tried to run the db sync without specifying the plugin but it still failed because the db sync ran with the evpn plugin first but we need to run the NB sync first.\n\nIt is not a bug in this patch but in the synchronizer plugin management in cases like this where we need to prioritize plugins because the order matters.","commit_id":"6a4e5bda1839c2cfcc1e80aaa9f2189e2d7fa990"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"d54d04585a3f1eb436c3e50a8ea947d318e3dc85","unresolved":false,"context_lines":[{"line_number":298,"context_line":"[project.entry-points.\"neutron.ovn.db_sync\"]"},{"line_number":299,"context_line":"neutron_nb_sync \u003d \"neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.ovn_db_sync:OvnNbSynchronizer\""},{"line_number":300,"context_line":"neutron_sb_sync \u003d \"neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb.ovn_db_sync:OvnSbSynchronizer\""},{"line_number":301,"context_line":"evpn_sync \u003d \"neutron.services.evpn.db_sync:EvpnOvnSynchronizer\""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"[project.entry-points.\"neutron.ovn.db_migration\"]"},{"line_number":304,"context_line":"neutron \u003d \"neutron.plugins.ml2.drivers.ovn.db_migration:migrate_neutron_database_to_ovn\""}],"source_content_type":"text/x-toml","patch_set":5,"id":"e637ad3d_cee0e976","line":301,"in_reply_to":"6468668a_d730f4f4","updated":"2026-08-27 14:26:46.000000000","message":"Done","commit_id":"6a4e5bda1839c2cfcc1e80aaa9f2189e2d7fa990"}]}
