)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"adb2b7eca4fb5f2f0e3510118cb7e18c3f81a024","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"140d7d80_c9255751","updated":"2026-07-22 12:56:20.000000000","message":"recheck unrelated TestRouter.test_gateway_chassis_least_loaded_scheduler_anti_affinity","commit_id":"dcd09d477ebd5759c7a492ba0e9926462d521a66"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2b784fcc9b38b383c1fc70278500313b00e63cc9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"be81fa2e_ce90d568","updated":"2026-08-20 16:43:35.000000000","message":"Just two minor comments","commit_id":"cec267113066a60f3127413126debe0c580db7ea"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/maintenance.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"aacff3d7e7b8a9a80ea5721bd9d7e5aab90a207f","unresolved":true,"context_lines":[{"line_number":1426,"context_line":"                network_id \u003d pvlan_network.network_id"},{"line_number":1427,"context_line":"                net_id \u003d network_id.replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":1428,"context_line":"                isolated_pg \u003d self._nb_idl.get_port_group("},{"line_number":1429,"context_line":"                    \u0027%s_%s\u0027 % (pvlan_ovn_driver.ISOLATED_PORT_GROUP_PREFIX,"},{"line_number":1430,"context_line":"                               net_id))"},{"line_number":1431,"context_line":"                promiscuous_pg \u003d self._nb_idl.get_port_group("},{"line_number":1432,"context_line":"                    \u0027%s_%s\u0027 % (pvlan_ovn_driver.PROMISCUOUS_PORT_GROUP_PREFIX,"},{"line_number":1433,"context_line":"                               net_id))"}],"source_content_type":"text/x-python","patch_set":8,"id":"aab2e449_995a6d5c","line":1430,"range":{"start_line":1429,"start_character":19,"end_line":1430,"end_character":38},"updated":"2026-07-31 14:53:51.000000000","message":"There is a method for this: `_get_pg_name`","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"18ecb80bad6ce4b2dc7e0a1c587588ae5fa2099a","unresolved":false,"context_lines":[{"line_number":1426,"context_line":"                network_id \u003d pvlan_network.network_id"},{"line_number":1427,"context_line":"                net_id \u003d network_id.replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":1428,"context_line":"                isolated_pg \u003d self._nb_idl.get_port_group("},{"line_number":1429,"context_line":"                    \u0027%s_%s\u0027 % (pvlan_ovn_driver.ISOLATED_PORT_GROUP_PREFIX,"},{"line_number":1430,"context_line":"                               net_id))"},{"line_number":1431,"context_line":"                promiscuous_pg \u003d self._nb_idl.get_port_group("},{"line_number":1432,"context_line":"                    \u0027%s_%s\u0027 % (pvlan_ovn_driver.PROMISCUOUS_PORT_GROUP_PREFIX,"},{"line_number":1433,"context_line":"                               net_id))"}],"source_content_type":"text/x-python","patch_set":8,"id":"3bd19f45_db5e8b0e","line":1430,"range":{"start_line":1429,"start_character":19,"end_line":1430,"end_character":38},"in_reply_to":"aab2e449_995a6d5c","updated":"2026-08-03 13:47:44.000000000","message":"Done","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"aacff3d7e7b8a9a80ea5721bd9d7e5aab90a207f","unresolved":true,"context_lines":[{"line_number":1434,"context_line":"                if isolated_pg and promiscuous_pg:"},{"line_number":1435,"context_line":"                    # Assume all pvlan PGs are present"},{"line_number":1436,"context_line":"                    continue"},{"line_number":1437,"context_line":"                if not isolated_pg and not promiscuous_pg:"},{"line_number":1438,"context_line":"                    # Assume all pvlan PGs were deleted. Recreate isolated"},{"line_number":1439,"context_line":"                    # and promiscuous PGs first."},{"line_number":1440,"context_line":"                    LOG.debug(\u0027PVLAN port groups missing for network %s, \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"aefd4bc5_a36dc08f","line":1437,"range":{"start_line":1437,"start_character":17,"end_line":1437,"end_character":57},"updated":"2026-07-31 14:53:51.000000000","message":"And what happens if one exists and not the other?? This is not considered here","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6aa3d20b17873e8825813a476e85597f99e54ac7","unresolved":true,"context_lines":[{"line_number":1434,"context_line":"                if isolated_pg and promiscuous_pg:"},{"line_number":1435,"context_line":"                    # Assume all pvlan PGs are present"},{"line_number":1436,"context_line":"                    continue"},{"line_number":1437,"context_line":"                if not isolated_pg and not promiscuous_pg:"},{"line_number":1438,"context_line":"                    # Assume all pvlan PGs were deleted. Recreate isolated"},{"line_number":1439,"context_line":"                    # and promiscuous PGs first."},{"line_number":1440,"context_line":"                    LOG.debug(\u0027PVLAN port groups missing for network %s, \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ba8b5f5_263034d0","line":1437,"range":{"start_line":1437,"start_character":17,"end_line":1437,"end_character":57},"in_reply_to":"606cf73d_a00ae0b8","updated":"2026-08-03 15:08:20.000000000","message":"If any of the PGs is missing, why not re-creating it?\n\nActually could be possible in a regular operation just to have only `isolated_pg` or `promiscuous_pg`?","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"58f12cb05959bb739514071a780799733804ba4f","unresolved":true,"context_lines":[{"line_number":1434,"context_line":"                if isolated_pg and promiscuous_pg:"},{"line_number":1435,"context_line":"                    # Assume all pvlan PGs are present"},{"line_number":1436,"context_line":"                    continue"},{"line_number":1437,"context_line":"                if not isolated_pg and not promiscuous_pg:"},{"line_number":1438,"context_line":"                    # Assume all pvlan PGs were deleted. Recreate isolated"},{"line_number":1439,"context_line":"                    # and promiscuous PGs first."},{"line_number":1440,"context_line":"                    LOG.debug(\u0027PVLAN port groups missing for network %s, \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"ddbaa4f6_3b23b5b2","line":1437,"range":{"start_line":1437,"start_character":17,"end_line":1437,"end_character":57},"in_reply_to":"9ba8b5f5_263034d0","updated":"2026-08-05 09:02:36.000000000","message":"Done. I did not do it until now because I think if you have that inconsistency maybe there was some unintended OVN DB manipulation therefore you would want to run the whole db-sync script.\nI think to have only one of the groups would mean something external interacted and deleted it from the OVN DB.","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"18ecb80bad6ce4b2dc7e0a1c587588ae5fa2099a","unresolved":true,"context_lines":[{"line_number":1434,"context_line":"                if isolated_pg and promiscuous_pg:"},{"line_number":1435,"context_line":"                    # Assume all pvlan PGs are present"},{"line_number":1436,"context_line":"                    continue"},{"line_number":1437,"context_line":"                if not isolated_pg and not promiscuous_pg:"},{"line_number":1438,"context_line":"                    # Assume all pvlan PGs were deleted. Recreate isolated"},{"line_number":1439,"context_line":"                    # and promiscuous PGs first."},{"line_number":1440,"context_line":"                    LOG.debug(\u0027PVLAN port groups missing for network %s, \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"606cf73d_a00ae0b8","line":1437,"range":{"start_line":1437,"start_character":17,"end_line":1437,"end_character":57},"in_reply_to":"aefd4bc5_a36dc08f","updated":"2026-08-03 13:47:44.000000000","message":"It is considered on the else (See the warning) I think in that case we should run OVN-db-sync script because there would be an inconsistency going on. I just did not write the  \"Run ovn-db-sync\" comment on the WARN in L1472 because I still don\u0027t have the pvlan support for that script, which is what I\u0027m working on next.","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"aacff3d7e7b8a9a80ea5721bd9d7e5aab90a207f","unresolved":true,"context_lines":[{"line_number":1448,"context_line":"                    net_ports \u003d ["},{"line_number":1449,"context_line":"                        p for p in ports_obj.Port.get_objects("},{"line_number":1450,"context_line":"                            admin_context, network_id\u003dnetwork_id)"},{"line_number":1451,"context_line":"                        if p.pvlan_type]"},{"line_number":1452,"context_line":"                    with pvlan_driver.nb_ovn.transaction("},{"line_number":1453,"context_line":"                            check_error\u003dTrue) as txn:"},{"line_number":1454,"context_line":"                        for port in net_ports:"}],"source_content_type":"text/x-python","patch_set":8,"id":"88af8d4f_9f695938","line":1451,"range":{"start_line":1451,"start_character":29,"end_line":1451,"end_character":39},"updated":"2026-07-31 14:53:51.000000000","message":"pvlan_type can be used as filter: https://github.com/openstack/neutron-lib/blob/39da7ccba3c079472cdcfcbb50eb2875705eb3ee/neutron_lib/api/definitions/pvlan.py#L48\n\nPlease, don\u0027t retrieve all the ports and the filter them manually. Use the database engine instead.\n\nAlso, why retrieve `Port`? This is very expensive. Retrieve `portvlan` instead. You have all you need: port_id, pvlan_type and pvlan_community","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"18ecb80bad6ce4b2dc7e0a1c587588ae5fa2099a","unresolved":true,"context_lines":[{"line_number":1448,"context_line":"                    net_ports \u003d ["},{"line_number":1449,"context_line":"                        p for p in ports_obj.Port.get_objects("},{"line_number":1450,"context_line":"                            admin_context, network_id\u003dnetwork_id)"},{"line_number":1451,"context_line":"                        if p.pvlan_type]"},{"line_number":1452,"context_line":"                    with pvlan_driver.nb_ovn.transaction("},{"line_number":1453,"context_line":"                            check_error\u003dTrue) as txn:"},{"line_number":1454,"context_line":"                        for port in net_ports:"}],"source_content_type":"text/x-python","patch_set":8,"id":"f9ac4f94_437bdd62","line":1451,"range":{"start_line":1451,"start_character":29,"end_line":1451,"end_character":39},"in_reply_to":"88af8d4f_9f695938","updated":"2026-08-03 13:47:44.000000000","message":"I don\u0027t think we need the \"if p.pvlan_type\" since there is already a filter by network_id. I was checking port instead on pvlanport because I was taking ports from networks with pvlan enabled and I could not filter pvlanport from a network_id.\n\nNote this is all inside the \"for pvlan_network in pvlan_networks\".\nI think I could take this out of the for loop and just check how to create every portpvlan object that exists in the DB in OVN (although I guess I wouldn\u0027t be able to use create_port in that scenario, or I would need to retrieve the full port using the pvlanport id)","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"58f12cb05959bb739514071a780799733804ba4f","unresolved":true,"context_lines":[{"line_number":1448,"context_line":"                    net_ports \u003d ["},{"line_number":1449,"context_line":"                        p for p in ports_obj.Port.get_objects("},{"line_number":1450,"context_line":"                            admin_context, network_id\u003dnetwork_id)"},{"line_number":1451,"context_line":"                        if p.pvlan_type]"},{"line_number":1452,"context_line":"                    with pvlan_driver.nb_ovn.transaction("},{"line_number":1453,"context_line":"                            check_error\u003dTrue) as txn:"},{"line_number":1454,"context_line":"                        for port in net_ports:"}],"source_content_type":"text/x-python","patch_set":8,"id":"bb124cc3_890ca625","line":1451,"range":{"start_line":1451,"start_character":29,"end_line":1451,"end_character":39},"in_reply_to":"db4940b1_2c56bff7","updated":"2026-08-05 09:02:36.000000000","message":"Since we create Port Groups per network, we always need the network_id, which is not present in PortPVLAN, so we always need that parameter. I cannot filter PortPVLAN per network ID inside the loop and I also cannot get out of the loop and know which network each portPVLAN belongs to without retrieving its port object. Let me know if I\u0027m missing something I can try here","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6aa3d20b17873e8825813a476e85597f99e54ac7","unresolved":true,"context_lines":[{"line_number":1448,"context_line":"                    net_ports \u003d ["},{"line_number":1449,"context_line":"                        p for p in ports_obj.Port.get_objects("},{"line_number":1450,"context_line":"                            admin_context, network_id\u003dnetwork_id)"},{"line_number":1451,"context_line":"                        if p.pvlan_type]"},{"line_number":1452,"context_line":"                    with pvlan_driver.nb_ovn.transaction("},{"line_number":1453,"context_line":"                            check_error\u003dTrue) as txn:"},{"line_number":1454,"context_line":"                        for port in net_ports:"}],"source_content_type":"text/x-python","patch_set":8,"id":"db4940b1_2c56bff7","line":1451,"range":{"start_line":1451,"start_character":29,"end_line":1451,"end_character":39},"in_reply_to":"f9ac4f94_437bdd62","updated":"2026-08-03 15:08:20.000000000","message":"Is there a direct translation between a Neutron DB PVLAN object and a set of OVN objects? That could speed up this maintenance method.","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"aacff3d7e7b8a9a80ea5721bd9d7e5aab90a207f","unresolved":true,"context_lines":[{"line_number":1452,"context_line":"                    with pvlan_driver.nb_ovn.transaction("},{"line_number":1453,"context_line":"                            check_error\u003dTrue) as txn:"},{"line_number":1454,"context_line":"                        for port in net_ports:"},{"line_number":1455,"context_line":"                            pvlan_driver._add_port_to_pg("},{"line_number":1456,"context_line":"                                port.id, network_id,"},{"line_number":1457,"context_line":"                                port.pvlan_type, txn,"},{"line_number":1458,"context_line":"                                community\u003dport.pvlan_community)"},{"line_number":1459,"context_line":"                            txn.add(self._nb_idl.pg_add_ports("},{"line_number":1460,"context_line":"                                pvlan_ovn_driver.DROP_PORT_GROUP_NAME,"},{"line_number":1461,"context_line":"                                port.id))"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"                else:"},{"line_number":1464,"context_line":"                    missing \u003d ("},{"line_number":1465,"context_line":"                        \u0027%s_%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":8,"id":"0a812405_4101f5e2","line":1462,"range":{"start_line":1455,"start_character":28,"end_line":1462,"end_character":1},"updated":"2026-07-31 14:53:51.000000000","message":"Isn\u0027t this `PVLANDriver.create_port`? Why not using it?","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"18ecb80bad6ce4b2dc7e0a1c587588ae5fa2099a","unresolved":false,"context_lines":[{"line_number":1452,"context_line":"                    with pvlan_driver.nb_ovn.transaction("},{"line_number":1453,"context_line":"                            check_error\u003dTrue) as txn:"},{"line_number":1454,"context_line":"                        for port in net_ports:"},{"line_number":1455,"context_line":"                            pvlan_driver._add_port_to_pg("},{"line_number":1456,"context_line":"                                port.id, network_id,"},{"line_number":1457,"context_line":"                                port.pvlan_type, txn,"},{"line_number":1458,"context_line":"                                community\u003dport.pvlan_community)"},{"line_number":1459,"context_line":"                            txn.add(self._nb_idl.pg_add_ports("},{"line_number":1460,"context_line":"                                pvlan_ovn_driver.DROP_PORT_GROUP_NAME,"},{"line_number":1461,"context_line":"                                port.id))"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"                else:"},{"line_number":1464,"context_line":"                    missing \u003d ("},{"line_number":1465,"context_line":"                        \u0027%s_%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":8,"id":"8a8ff6d7_228ff94a","line":1462,"range":{"start_line":1455,"start_character":28,"end_line":1462,"end_character":1},"in_reply_to":"0a812405_4101f5e2","updated":"2026-08-03 13:47:44.000000000","message":"Done","commit_id":"60dbe033bf8776d3ebac771887015fff21b8774f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"66fe223b35181c5ca191ccda65c58eedf4ad6b2b","unresolved":true,"context_lines":[{"line_number":1506,"context_line":"                                network_id, txn)"},{"line_number":1507,"context_line":"                        else:"},{"line_number":1508,"context_line":"                            pvlan_driver._create_isolated_port_group("},{"line_number":1509,"context_line":"                                network_id, txn)"},{"line_number":1510,"context_line":""},{"line_number":1511,"context_line":"            raise periodics.NeverAgain()"},{"line_number":1512,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"f5cdb6f3_5bd6dbf8","line":1509,"updated":"2026-08-10 10:18:46.000000000","message":"instead of having this ``if..else..`` block can\u0027t you simplify it a bit to something like:\n\n    with pvlan_driver.nb_ovn.transaction(check_error\u003dTrue) as txn:\n        if not isolated_pg:\n            pvlan_driver._create_isolated_port_group(network_id, txn)\n        if not promiscuous_pg:\n            pvlan_driver._create_promiscuous_port_group(network_id, txn)\n        \n        if not isolated_pg and not promiscuous_pg:   \n            for port in net_ports:\n                pvlan_driver.create_port(admin_context, txn, port)\n            \nFrom quick look it should work in the same way but would be much shorted, no?","commit_id":"22161241560254bcf622fcb1e1c5ecbd562421ac"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"ddc11218d648e115904f5db3b75499ef54bc6e6e","unresolved":true,"context_lines":[{"line_number":1506,"context_line":"                                network_id, txn)"},{"line_number":1507,"context_line":"                        else:"},{"line_number":1508,"context_line":"                            pvlan_driver._create_isolated_port_group("},{"line_number":1509,"context_line":"                                network_id, txn)"},{"line_number":1510,"context_line":""},{"line_number":1511,"context_line":"            raise periodics.NeverAgain()"},{"line_number":1512,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"12aaa181_6557a015","line":1509,"in_reply_to":"f5cdb6f3_5bd6dbf8","updated":"2026-08-11 16:17:18.000000000","message":"true! This is because in previous versions I was not really going to fix the inconsistent state in case one of them was missing, I was going to just give a heads up that OVN DB was in an improper state. I will fix this to match what you say, I think it makes sense","commit_id":"22161241560254bcf622fcb1e1c5ecbd562421ac"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"66fe223b35181c5ca191ccda65c58eedf4ad6b2b","unresolved":true,"context_lines":[{"line_number":1521,"context_line":"        ]"},{"line_number":1522,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1523,"context_line":"            for pg in pgs:"},{"line_number":1524,"context_line":"                txn.add(self._nb_idl.pg_del(pg.name, if_exists\u003dTrue))"},{"line_number":1525,"context_line":""},{"line_number":1526,"context_line":"        raise periodics.NeverAgain()"},{"line_number":1527,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"d694a996_fc67620c","line":1524,"updated":"2026-08-10 10:18:46.000000000","message":"do we really need to try to clean those if there is no pvlan plugin enabled? What if it was never enabled in environment, we will run this task and try to delete those PGs still, right?","commit_id":"22161241560254bcf622fcb1e1c5ecbd562421ac"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f36efbc45e3f45c4850e148965d0a18101fe99e2","unresolved":false,"context_lines":[{"line_number":1521,"context_line":"        ]"},{"line_number":1522,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1523,"context_line":"            for pg in pgs:"},{"line_number":1524,"context_line":"                txn.add(self._nb_idl.pg_del(pg.name, if_exists\u003dTrue))"},{"line_number":1525,"context_line":""},{"line_number":1526,"context_line":"        raise periodics.NeverAgain()"},{"line_number":1527,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"0b30084f_dfe36ca2","line":1524,"in_reply_to":"5397fb7c_fca8d05f","updated":"2026-08-13 08:41:08.000000000","message":"Actually, looking at it second time I think this is ok. If plugin was never enabled then it won\u0027t find any PGs to clean here so it won\u0027t do anything :) Thx for adding that check in Line 1511-1512. This is enough IMO","commit_id":"22161241560254bcf622fcb1e1c5ecbd562421ac"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"ddc11218d648e115904f5db3b75499ef54bc6e6e","unresolved":true,"context_lines":[{"line_number":1521,"context_line":"        ]"},{"line_number":1522,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1523,"context_line":"            for pg in pgs:"},{"line_number":1524,"context_line":"                txn.add(self._nb_idl.pg_del(pg.name, if_exists\u003dTrue))"},{"line_number":1525,"context_line":""},{"line_number":1526,"context_line":"        raise periodics.NeverAgain()"},{"line_number":1527,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5397fb7c_fca8d05f","line":1524,"in_reply_to":"d694a996_fc67620c","updated":"2026-08-11 16:17:18.000000000","message":"It\u0027s good cleaning it since the properties will disappear for the user in Neutron but the behaviour won\u0027t change. Although it is also true that we do not expect users adding and removing service plugins all the time. It will still run if it was never enabled, indeed. Maybe there\u0027s a way of avoiding that?","commit_id":"22161241560254bcf622fcb1e1c5ecbd562421ac"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2b784fcc9b38b383c1fc70278500313b00e63cc9","unresolved":true,"context_lines":[{"line_number":1444,"context_line":"        spacing\u003dovn_const.MAINTENANCE_ONE_RUN_TASK_SPACING,"},{"line_number":1445,"context_line":"        run_immediately\u003dTrue)"},{"line_number":1446,"context_line":"    @log_maintenance_task("},{"line_number":1447,"context_line":"        start_message\u003d\u0027Checking if PVLAN PGs need to be cleaned or created...\u0027)"},{"line_number":1448,"context_line":"    def check_pvlan_plugin_status(self):"},{"line_number":1449,"context_line":"        \"\"\"Remove/Recreate PVLAN OVN resources when disabled or enabled\"\"\""},{"line_number":1450,"context_line":"        pvlan_driver \u003d self._ovn_client.pvlan_driver"}],"source_content_type":"text/x-python","patch_set":12,"id":"357b9a96_4e6e0f48","line":1447,"range":{"start_line":1447,"start_character":23,"end_line":1447,"end_character":77},"updated":"2026-08-20 16:43:35.000000000","message":"To be like the others above should be:\n\n  \"Check if PVLAN PGs need to be cleaned or created.\"","commit_id":"cec267113066a60f3127413126debe0c580db7ea"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"8facbf09424bc4dfa2241de3960d6c267d2ada00","unresolved":false,"context_lines":[{"line_number":1444,"context_line":"        spacing\u003dovn_const.MAINTENANCE_ONE_RUN_TASK_SPACING,"},{"line_number":1445,"context_line":"        run_immediately\u003dTrue)"},{"line_number":1446,"context_line":"    @log_maintenance_task("},{"line_number":1447,"context_line":"        start_message\u003d\u0027Checking if PVLAN PGs need to be cleaned or created...\u0027)"},{"line_number":1448,"context_line":"    def check_pvlan_plugin_status(self):"},{"line_number":1449,"context_line":"        \"\"\"Remove/Recreate PVLAN OVN resources when disabled or enabled\"\"\""},{"line_number":1450,"context_line":"        pvlan_driver \u003d self._ovn_client.pvlan_driver"}],"source_content_type":"text/x-python","patch_set":12,"id":"3406516d_19ae9e4d","line":1447,"range":{"start_line":1447,"start_character":23,"end_line":1447,"end_character":77},"in_reply_to":"357b9a96_4e6e0f48","updated":"2026-08-20 18:17:29.000000000","message":"Done","commit_id":"cec267113066a60f3127413126debe0c580db7ea"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2b784fcc9b38b383c1fc70278500313b00e63cc9","unresolved":true,"context_lines":[{"line_number":1508,"context_line":"            pg for pg in self._nb_idl.tables[\u0027Port_Group\u0027].rows.values()"},{"line_number":1509,"context_line":"            if any(pg.name.startswith(p) for p in pvlan_prefixes)"},{"line_number":1510,"context_line":"        ]"},{"line_number":1511,"context_line":"        if not pgs:"},{"line_number":1512,"context_line":"            raise periodics.NeverAgain()"},{"line_number":1513,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1514,"context_line":"            for pg in pgs:"},{"line_number":1515,"context_line":"                txn.add(self._nb_idl.pg_del(pg.name, if_exists\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":12,"id":"5df9ac4c_78198f20","line":1512,"range":{"start_line":1511,"start_character":8,"end_line":1512,"end_character":40},"updated":"2026-08-20 16:43:35.000000000","message":"nit: this should maybe be \"if pgs\" with the below inside, then we just have a single \"raise\" as the last statement instead of two of them.","commit_id":"cec267113066a60f3127413126debe0c580db7ea"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"8facbf09424bc4dfa2241de3960d6c267d2ada00","unresolved":false,"context_lines":[{"line_number":1508,"context_line":"            pg for pg in self._nb_idl.tables[\u0027Port_Group\u0027].rows.values()"},{"line_number":1509,"context_line":"            if any(pg.name.startswith(p) for p in pvlan_prefixes)"},{"line_number":1510,"context_line":"        ]"},{"line_number":1511,"context_line":"        if not pgs:"},{"line_number":1512,"context_line":"            raise periodics.NeverAgain()"},{"line_number":1513,"context_line":"        with self._nb_idl.transaction(check_error\u003dTrue) as txn:"},{"line_number":1514,"context_line":"            for pg in pgs:"},{"line_number":1515,"context_line":"                txn.add(self._nb_idl.pg_del(pg.name, if_exists\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":12,"id":"80f23982_5b92ccc0","line":1512,"range":{"start_line":1511,"start_character":8,"end_line":1512,"end_character":40},"in_reply_to":"5df9ac4c_78198f20","updated":"2026-08-20 18:17:29.000000000","message":"Done, thanks!","commit_id":"cec267113066a60f3127413126debe0c580db7ea"}]}
