)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"74065a4cde712cf8c9d194c5759ac0ae865b970c","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] [DNM] Create a keepalived-state-change script in bash"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1970944"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Co-Authored-By: Slawek Kaplonski \u003cskaplons@redhat.com\u003e"},{"line_number":12,"context_line":"Co-Authored-By: Rodolfo Alonso Hernandez \u003cralonsoh@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"cad9abdf_5b3eb84d","line":9,"updated":"2022-05-02 12:57:26.000000000","message":"Please also link it to the bug https://bugs.launchpad.net/neutron/+bug/1956958","commit_id":"199beddf8db8fcec71668a7b6f2218bcb974ff0c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ad45ee2d939731e1b3299b5711bd976e8cdc41b7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] [DNM] Create a keepalived-state-change script in bash"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1970944"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Co-Authored-By: Slawek Kaplonski \u003cskaplons@redhat.com\u003e"},{"line_number":12,"context_line":"Co-Authored-By: Rodolfo Alonso Hernandez \u003cralonsoh@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"8e94b243_a4287f65","line":9,"in_reply_to":"cad9abdf_5b3eb84d","updated":"2022-05-03 09:29:46.000000000","message":"Of course","commit_id":"199beddf8db8fcec71668a7b6f2218bcb974ff0c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5e842b9a7e51bb85a6c273a8275821d6eb701489","unresolved":true,"context_lines":[{"line_number":19,"context_line":"to SIGHUP signals."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes-Bug: #1970944"},{"line_number":22,"context_line":"Related-Bug: #1956958"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Co-Authored-By: Slawek Kaplonski \u003cskaplons@redhat.com\u003e"},{"line_number":25,"context_line":"Co-Authored-By: Rodolfo Alonso Hernandez \u003cralonsoh@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"bebbaebf_8d6c6afc","line":22,"updated":"2022-10-17 08:59:56.000000000","message":"It seems that this is also related to https://bugs.launchpad.net/neutron/+bug/1940243","commit_id":"dde1776b4975fb0858a51a38057f225685dc4e03"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"a0c985d06a6d81cd65ae3777eb2b6804fec5553a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"to SIGHUP signals."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes-Bug: #1970944"},{"line_number":22,"context_line":"Related-Bug: #1956958"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Co-Authored-By: Slawek Kaplonski \u003cskaplons@redhat.com\u003e"},{"line_number":25,"context_line":"Co-Authored-By: Rodolfo Alonso Hernandez \u003cralonsoh@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"73112ccf_f3ea8e06","line":22,"in_reply_to":"bebbaebf_8d6c6afc","updated":"2026-06-01 14:18:46.000000000","message":"Done","commit_id":"dde1776b4975fb0858a51a38057f225685dc4e03"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eda26a1e3bcc7a697da73ae9aae6538dcd75c2e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"929173d9_22cca977","updated":"2022-04-29 16:38:19.000000000","message":"All in red, new record.","commit_id":"a4734cb8ef97aa7aaf2a0f784c1f3c3a3e4c02a1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"68622d531e2510a827a24a674cf115c3627352f0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"2cbfcfef_e3356586","updated":"2022-05-05 09:34:24.000000000","message":"It is failing in the same fullstack test, but with different results:\n- https://560792369e6c35b47dec-f2a50e6f05df4b0e5be60c7b98112049.ssl.cf2.rackcdn.com/836140/9/check/neutron-fullstack-with-uwsgi/4207c5b/testr_results.html\n- https://f451ba83741c2451d8bc-c0288c15cf27fe5a39c9948ecafb7329.ssl.cf5.rackcdn.com/836140/9/check/neutron-fullstack-with-uwsgi/e3bb062/testr_results.html\n\nI need to investigate it.","commit_id":"52261c866c3da9b90b4cd2f11ba594ea8b2cb3b2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"18201131aff6c6b01ad2410259f7a3fc0f11cee9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"188aba4e_aadee134","updated":"2022-05-05 09:34:41.000000000","message":"recheck","commit_id":"52261c866c3da9b90b4cd2f11ba594ea8b2cb3b2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6b1a7283fef66f2c17a5c9922834374732ddb754","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"d751096b_5281843a","updated":"2022-05-06 09:41:51.000000000","message":"recheck","commit_id":"52261c866c3da9b90b4cd2f11ba594ea8b2cb3b2"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7045b1ddf4abeb2befdba44a0fc522c84cde228f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"c8e926aa_2abe6270","updated":"2022-05-04 14:45:47.000000000","message":"recheck - fullstack failure seems like potentially related but lets check it once again","commit_id":"52261c866c3da9b90b4cd2f11ba594ea8b2cb3b2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3b856a5368bd8a959d558b2091e69157f51ef2c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"5c74a57c_69df0d18","updated":"2022-05-09 16:51:00.000000000","message":"I\u0027ll investigate https://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_d53/836140/11/check/openstack-tox-py38/d534f38/testr_results.html","commit_id":"6977916bbd1bfc78d373ea73cf4759d755d19548"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"59d544baa90035a4138992d16217093f6409354d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"6c97d555_aa3762ea","updated":"2022-05-06 16:25:50.000000000","message":"recheck","commit_id":"6977916bbd1bfc78d373ea73cf4759d755d19548"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3e9028af06e86bcf6ae18098926d8c4d499f13ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"bddd1d7e_78f73618","updated":"2022-05-09 16:50:20.000000000","message":"recheck","commit_id":"6977916bbd1bfc78d373ea73cf4759d755d19548"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4c2adefe9db62b30f2a57e695448f060df2ebc5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"39b711a0_decd3665","updated":"2022-05-06 16:25:45.000000000","message":"yes! CI is passing. Let\u0027s do another round\n","commit_id":"6977916bbd1bfc78d373ea73cf4759d755d19548"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ee6664954553ab79ee4500aa5e7ab94a9028feff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"29f03f3a_0f170efe","updated":"2022-05-10 20:00:33.000000000","message":"As we discussed during today CI meeting, I think this needs some extra cleaning of the old neutron-keepalived-state-change processes which may be running for existing routers already.","commit_id":"dde1776b4975fb0858a51a38057f225685dc4e03"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2397131a8f9107443391619cbe9c8f5589c6619f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"cd9820fa_8274e510","updated":"2022-05-10 16:24:52.000000000","message":"NOTE: about the concern raised during the CI meeting about this patch and the upgrade process. A system can have a running keepalived-state-change process, spawned before the L3 agent update. The new L3 agent will keep them running. To kill them, the \"ProcessManager\" instance will use the PID stored in the PID file (that is in the same place for both scripts). Then it will send a SIGTERM or SIGKILL signal over this process. The next time the script is spawned, it will be the new one.","commit_id":"dde1776b4975fb0858a51a38057f225685dc4e03"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"faf195662e32d09b06b80b0fb24eb8807a2a9208","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"7889c078_324ff3e7","updated":"2023-10-03 14:44:51.000000000","message":"Still testing, I need to address several comments.","commit_id":"35005d3dee1702ba11997c1b41494825a548b98e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"09cc74f4595ebdad459a806147515ac3291557d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"d3f13e01_4493ab0f","updated":"2023-10-04 01:08:16.000000000","message":"Initially this looked better but I still see some of these failures in the ovs jobs:\n\nDetails: Router 2ba2c31a-9760-4859-b526-664cf0d3a422 is not active on any of the L3 agents","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"99eb62e990b3c53606edb30dc00cccce6079e7b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"633161fb_62ab83c5","updated":"2025-09-24 09:31:12.000000000","message":"Thanks a lot for working on this, as this is a real issue in production for us (ie: these processes are consuming dozens of GB of RAM on our network nodes). I fully support this direction.\n\nMy comments about bash vs dash is probably nitpicking, though the path and name of the script is not: if it\u0027s not done properly by Neutron, downstream distros will have to patch, that\u0027s annoying and easy to avoid.","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"734f4383c86b48d7aca7146d2f136c2014880bdc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"4e4cbd38_e08a43f5","updated":"2023-10-03 21:00:27.000000000","message":"recheck again","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"60328d07c0fc5394a388ec15370969f800995369","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"7659406a_768ae6de","updated":"2023-10-04 07:28:27.000000000","message":"recheck again","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"e0f7ea799177781e7572f666d3c5fccb63a4133c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"4e4e033f_6927aabc","in_reply_to":"d3f13e01_4493ab0f","updated":"2023-10-04 04:17:57.000000000","message":"Yes right couple of similar failures in:-\nhttps://cec0011e9fad147fb7fe-89f33ee168e8c2014b2d25c632c1d92a.ssl.cf2.rackcdn.com/836140/14/check/neutron-tempest-plugin-openvswitch-01/0dc7770/job-output.txt\nhttps://5481f30c7f7864f4d07b-85bb929ac58f1a419407783b8f581cf5.ssl.cf5.rackcdn.com/836140/14/check/neutron-tempest-plugin-openvswitch-iptables_hybrid-01/2d49fdb/job-output.txt","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"27b430dbe4ce43c618a19c75818062ae529bdc0a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"5ae5f3ce_4a94dbcc","updated":"2026-05-13 10:11:55.000000000","message":"recheck","commit_id":"1cd739c8cd075fad06310c3aa0b0291928819721"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8d42ff3114d0e961128adeed924d3f8ab1d50108","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"aa26ae30_0d018b64","updated":"2026-05-19 13:56:08.000000000","message":"check experimental","commit_id":"830a2a2b47816336a144403fac5537dc1e4bdb2c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"cc1f875b541206845c28e677fe6c8758446c3900","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"b6c14704_eb752456","updated":"2026-05-27 15:00:16.000000000","message":"recheck","commit_id":"830a2a2b47816336a144403fac5537dc1e4bdb2c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b127aa89a3eeade6ddc58a892221ee462068ab52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"8fc38d7a_6d8f2af7","updated":"2026-05-19 13:55:59.000000000","message":"recheck again","commit_id":"830a2a2b47816336a144403fac5537dc1e4bdb2c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"23844e0ffb51983e2b380c79ba34dfbeb53286e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":46,"id":"8712cf19_a0607133","updated":"2026-06-18 06:28:33.000000000","message":"recheck","commit_id":"7226b47286e0883931ed5ada7a4c54b860b3eb83"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"e06412dd3ca553d5697cceabce6e7894ce4676eb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":46,"id":"bf23d2e4_a36500c7","updated":"2026-06-18 09:30:40.000000000","message":"recheck","commit_id":"7226b47286e0883931ed5ada7a4c54b860b3eb83"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"df8eb4c4fb7419d393175e485a3617cba8fee140","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":46,"id":"c53adf76_4ea32bf1","updated":"2026-06-17 12:38:24.000000000","message":"recheck","commit_id":"7226b47286e0883931ed5ada7a4c54b860b3eb83"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"5df27d2e56553428b6af38e6327885cde5445ce3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":46,"id":"db2898ec_6e7ec448","updated":"2026-06-17 18:54:29.000000000","message":"recheck","commit_id":"7226b47286e0883931ed5ada7a4c54b860b3eb83"}],"bin/neutron-keepalived-state-change":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5b8025fdf81eb78fdce359aa502788d90344e253","unresolved":true,"context_lines":[{"line_number":145,"context_line":"}"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"ENABLE_CONTRACKD\u003dno"},{"line_number":149,"context_line":"DEBUG\u003dno"},{"line_number":150,"context_line":"for i in $@ ; do"},{"line_number":151,"context_line":"    case \"${1}\" in"}],"source_content_type":"application/x-shellscript","patch_set":46,"id":"c6fcb7a8_610310f8","line":148,"range":{"start_line":148,"start_character":7,"end_line":148,"end_character":16},"updated":"2026-06-18 13:37:47.000000000","message":"CONNTRACK\nWhere this variable is used?\n\nWe are loosing the conntrack support implementation: https://review.opendev.org/c/openstack/neutron/+/938800","commit_id":"7226b47286e0883931ed5ada7a4c54b860b3eb83"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"166510a69df239ac3fd7cba765bbe3985490f322","unresolved":false,"context_lines":[{"line_number":145,"context_line":"}"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"ENABLE_CONTRACKD\u003dno"},{"line_number":149,"context_line":"DEBUG\u003dno"},{"line_number":150,"context_line":"for i in $@ ; do"},{"line_number":151,"context_line":"    case \"${1}\" in"}],"source_content_type":"application/x-shellscript","patch_set":46,"id":"56e6859d_3946666f","line":148,"range":{"start_line":148,"start_character":7,"end_line":148,"end_character":16},"in_reply_to":"c6fcb7a8_610310f8","updated":"2026-06-18 15:12:48.000000000","message":"Indeed, as it wasn\u0027t in your original shell implementation, I missed it. I\u0027ve just added support for it, let me know if you think it\u0027s ok.","commit_id":"7226b47286e0883931ed5ada7a4c54b860b3eb83"}],"etc/neutron/rootwrap.d/rootwrap.filters":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"4da6e2400b5b2c80ae1b7f3a338a7ae807fc56fa","unresolved":true,"context_lines":[{"line_number":50,"context_line":"# L3"},{"line_number":51,"context_line":"radvd: CommandFilter, radvd, root"},{"line_number":52,"context_line":"keepalived: CommandFilter, keepalived, root"},{"line_number":53,"context_line":"keepalived_state_change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":54,"context_line":"neutron_keepalived_state_change: CommandFilter, neutron_keepalived_state_change.sh, root"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# OPEN VSWITCH"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"34358d24_3e24f8dd","line":53,"range":{"start_line":53,"start_character":0,"end_line":53,"end_character":77},"updated":"2022-05-10 01:24:20.000000000","message":"This become a redundant line now.","commit_id":"6977916bbd1bfc78d373ea73cf4759d755d19548"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"97f1d5e77f853a383e9ac9f9d0200ed916428ea0","unresolved":false,"context_lines":[{"line_number":50,"context_line":"# L3"},{"line_number":51,"context_line":"radvd: CommandFilter, radvd, root"},{"line_number":52,"context_line":"keepalived: CommandFilter, keepalived, root"},{"line_number":53,"context_line":"keepalived_state_change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":54,"context_line":"neutron_keepalived_state_change: CommandFilter, neutron_keepalived_state_change.sh, root"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"# OPEN VSWITCH"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"45357be5_2fd6cd15","line":53,"range":{"start_line":53,"start_character":0,"end_line":53,"end_character":77},"in_reply_to":"34358d24_3e24f8dd","updated":"2022-05-10 08:55:52.000000000","message":"Done","commit_id":"6977916bbd1bfc78d373ea73cf4759d755d19548"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"717f3cd8812b792b5962a3922ea32b2d4eb3c522","unresolved":true,"context_lines":[{"line_number":51,"context_line":"radvd_env: EnvFilter, env, root, PROCESS_TAG\u003d, radvd"},{"line_number":52,"context_line":"keepalived: CommandFilter, keepalived, root"},{"line_number":53,"context_line":"keepalived_env: EnvFilter, env, root, PROCESS_TAG\u003d, keepalived"},{"line_number":54,"context_line":"keepalived_state_change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":55,"context_line":"keepalived_state_change_env: EnvFilter, env, root, PROCESS_TAG\u003d, neutron-keepalived-state-change"},{"line_number":56,"context_line":"neutron-keepalived-state-change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":57,"context_line":"conntrackd: CommandFilter, conntrackd, root"},{"line_number":58,"context_line":"conntrackd_env: EnvFilter, env, root, PROCESS_TAG\u003d, conntrackd"}],"source_content_type":"application/octet-stream","patch_set":29,"id":"2467d55b_6d58eb96","line":55,"range":{"start_line":54,"start_character":0,"end_line":55,"end_character":96},"updated":"2026-06-02 09:25:45.000000000","message":"do we still need those two rules?","commit_id":"6286cd0afd47ab5a1b74a720c97b1bd16de073be"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"e015f05c62f0afbcf8c06d7f26d87ae44a9d6e1e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"radvd_env: EnvFilter, env, root, PROCESS_TAG\u003d, radvd"},{"line_number":52,"context_line":"keepalived: CommandFilter, keepalived, root"},{"line_number":53,"context_line":"keepalived_env: EnvFilter, env, root, PROCESS_TAG\u003d, keepalived"},{"line_number":54,"context_line":"keepalived_state_change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":55,"context_line":"keepalived_state_change_env: EnvFilter, env, root, PROCESS_TAG\u003d, neutron-keepalived-state-change"},{"line_number":56,"context_line":"neutron-keepalived-state-change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":57,"context_line":"conntrackd: CommandFilter, conntrackd, root"},{"line_number":58,"context_line":"conntrackd_env: EnvFilter, env, root, PROCESS_TAG\u003d, conntrackd"}],"source_content_type":"application/octet-stream","patch_set":29,"id":"cc4439f7_3483bdb3","line":55,"range":{"start_line":54,"start_character":0,"end_line":55,"end_character":96},"in_reply_to":"2467d55b_6d58eb96","updated":"2026-06-02 14:12:18.000000000","message":"Why not? neutron-l3-agent still needs to spawn the process as root through rootwrap, no? Maybe we should switch to using privsep instead, but IMO that\u0027s for another patch.","commit_id":"6286cd0afd47ab5a1b74a720c97b1bd16de073be"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"68bf43f2f35c2dbac924193565085fbfdb2e11b2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"radvd_env: EnvFilter, env, root, PROCESS_TAG\u003d, radvd"},{"line_number":52,"context_line":"keepalived: CommandFilter, keepalived, root"},{"line_number":53,"context_line":"keepalived_env: EnvFilter, env, root, PROCESS_TAG\u003d, keepalived"},{"line_number":54,"context_line":"keepalived_state_change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":55,"context_line":"keepalived_state_change_env: EnvFilter, env, root, PROCESS_TAG\u003d, neutron-keepalived-state-change"},{"line_number":56,"context_line":"neutron-keepalived-state-change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":57,"context_line":"conntrackd: CommandFilter, conntrackd, root"},{"line_number":58,"context_line":"conntrackd_env: EnvFilter, env, root, PROCESS_TAG\u003d, conntrackd"}],"source_content_type":"application/octet-stream","patch_set":29,"id":"62737db2_322bb9a4","line":55,"range":{"start_line":54,"start_character":0,"end_line":55,"end_character":96},"in_reply_to":"4002ef69_eded0137","updated":"2026-06-02 14:47:39.000000000","message":"Done","commit_id":"6286cd0afd47ab5a1b74a720c97b1bd16de073be"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"82861aa052f00ad08d32cbfa204562e1c8d49895","unresolved":true,"context_lines":[{"line_number":51,"context_line":"radvd_env: EnvFilter, env, root, PROCESS_TAG\u003d, radvd"},{"line_number":52,"context_line":"keepalived: CommandFilter, keepalived, root"},{"line_number":53,"context_line":"keepalived_env: EnvFilter, env, root, PROCESS_TAG\u003d, keepalived"},{"line_number":54,"context_line":"keepalived_state_change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":55,"context_line":"keepalived_state_change_env: EnvFilter, env, root, PROCESS_TAG\u003d, neutron-keepalived-state-change"},{"line_number":56,"context_line":"neutron-keepalived-state-change: CommandFilter, neutron-keepalived-state-change, root"},{"line_number":57,"context_line":"conntrackd: CommandFilter, conntrackd, root"},{"line_number":58,"context_line":"conntrackd_env: EnvFilter, env, root, PROCESS_TAG\u003d, conntrackd"}],"source_content_type":"application/octet-stream","patch_set":29,"id":"4002ef69_eded0137","line":55,"range":{"start_line":54,"start_character":0,"end_line":55,"end_character":96},"in_reply_to":"cc4439f7_3483bdb3","updated":"2026-06-02 14:20:01.000000000","message":"but aren\u0027t those 2 rules used to run old \"neutron-keepalived-state-change\" python script? Actually rule from line 54 is exctly the same as your new rule in line 56 if I\u0027m not mistaken","commit_id":"6286cd0afd47ab5a1b74a720c97b1bd16de073be"}],"neutron/agent/l3/agent.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c72db71fa9a68710382e016d2bca7a006874c5ee","unresolved":true,"context_lines":[{"line_number":1024,"context_line":"                with open(path, \"r\") as f:"},{"line_number":1025,"context_line":"                    pid \u003d f.read().strip()"},{"line_number":1026,"context_line":"            except FileNotFoundError:"},{"line_number":1027,"context_line":"                LOG.warning(f\"Connot find PID file for router {router_id}\")"},{"line_number":1028,"context_line":"                continue"},{"line_number":1029,"context_line":"            except Exception as e:"},{"line_number":1030,"context_line":"                LOG.warning(f\"Error {e} when searching for router \""}],"source_content_type":"text/x-python","patch_set":33,"id":"973e7be5_a86ba8a4","line":1027,"updated":"2026-06-03 07:23:58.000000000","message":"do we need to have it as a warning? Isn\u0027t \"info\" or even \"debug\" level enough here?","commit_id":"5ce2013104f2c8e9b17724d7b1d9372b5f900048"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"7d13e6bda0006beb3a5021d1996cc7e5087e2f29","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"                with open(path, \"r\") as f:"},{"line_number":1025,"context_line":"                    pid \u003d f.read().strip()"},{"line_number":1026,"context_line":"            except FileNotFoundError:"},{"line_number":1027,"context_line":"                LOG.warning(f\"Connot find PID file for router {router_id}\")"},{"line_number":1028,"context_line":"                continue"},{"line_number":1029,"context_line":"            except Exception as e:"},{"line_number":1030,"context_line":"                LOG.warning(f\"Error {e} when searching for router \""}],"source_content_type":"text/x-python","patch_set":33,"id":"38cec9de_3bebf073","line":1027,"in_reply_to":"973e7be5_a86ba8a4","updated":"2026-06-03 09:59:28.000000000","message":"Done","commit_id":"5ce2013104f2c8e9b17724d7b1d9372b5f900048"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c72db71fa9a68710382e016d2bca7a006874c5ee","unresolved":true,"context_lines":[{"line_number":1038,"context_line":"                    cmdline \u003d f.read().replace(b\"\\x00\", b\" \").decode()"},{"line_number":1039,"context_line":"            except FileNotFoundError:"},{"line_number":1040,"context_line":"                LOG.warning(f\"Process {pid} not found (stale PID) \""},{"line_number":1041,"context_line":"                            f\"for router {router_id}.\")"},{"line_number":1042,"context_line":"                continue"},{"line_number":1043,"context_line":"            except Exception as e:"},{"line_number":1044,"context_line":"                LOG.warning(f\"Error {e} when reading cmdline for pid {pid} \""}],"source_content_type":"text/x-python","patch_set":33,"id":"415db8bc_7351cbf3","line":1041,"updated":"2026-06-03 07:23:58.000000000","message":"same here","commit_id":"5ce2013104f2c8e9b17724d7b1d9372b5f900048"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"7d13e6bda0006beb3a5021d1996cc7e5087e2f29","unresolved":false,"context_lines":[{"line_number":1038,"context_line":"                    cmdline \u003d f.read().replace(b\"\\x00\", b\" \").decode()"},{"line_number":1039,"context_line":"            except FileNotFoundError:"},{"line_number":1040,"context_line":"                LOG.warning(f\"Process {pid} not found (stale PID) \""},{"line_number":1041,"context_line":"                            f\"for router {router_id}.\")"},{"line_number":1042,"context_line":"                continue"},{"line_number":1043,"context_line":"            except Exception as e:"},{"line_number":1044,"context_line":"                LOG.warning(f\"Error {e} when reading cmdline for pid {pid} \""}],"source_content_type":"text/x-python","patch_set":33,"id":"dbc90ce9_99a050a0","line":1041,"in_reply_to":"415db8bc_7351cbf3","updated":"2026-06-03 09:59:28.000000000","message":"Done","commit_id":"5ce2013104f2c8e9b17724d7b1d9372b5f900048"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c72db71fa9a68710382e016d2bca7a006874c5ee","unresolved":true,"context_lines":[{"line_number":1053,"context_line":"                try:"},{"line_number":1054,"context_line":"                    os.kill(pid, signal.SIGKILL)"},{"line_number":1055,"context_line":"                except ProcessLookupError:"},{"line_number":1056,"context_line":"                    LOG.warning(f\"Process {pid} already gone.\")"},{"line_number":1057,"context_line":"                except PermissionError as e:"},{"line_number":1058,"context_line":"                    LOG.error(f\"No permission to kill {pid}, error: {e}.\")"},{"line_number":1059,"context_line":"                except Exception as e:"}],"source_content_type":"text/x-python","patch_set":33,"id":"4a970831_413d371f","line":1056,"updated":"2026-06-03 07:23:58.000000000","message":"ditto","commit_id":"5ce2013104f2c8e9b17724d7b1d9372b5f900048"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"7d13e6bda0006beb3a5021d1996cc7e5087e2f29","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"                try:"},{"line_number":1054,"context_line":"                    os.kill(pid, signal.SIGKILL)"},{"line_number":1055,"context_line":"                except ProcessLookupError:"},{"line_number":1056,"context_line":"                    LOG.warning(f\"Process {pid} already gone.\")"},{"line_number":1057,"context_line":"                except PermissionError as e:"},{"line_number":1058,"context_line":"                    LOG.error(f\"No permission to kill {pid}, error: {e}.\")"},{"line_number":1059,"context_line":"                except Exception as e:"}],"source_content_type":"text/x-python","patch_set":33,"id":"56caf424_e0e3b6a2","line":1056,"in_reply_to":"4a970831_413d371f","updated":"2026-06-03 09:59:28.000000000","message":"Done","commit_id":"5ce2013104f2c8e9b17724d7b1d9372b5f900048"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"daebb4b491f753adf40d1f8ec0e77db80e68f967","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import functools"},{"line_number":17,"context_line":"import time"},{"line_number":18,"context_line":"import threading"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import netaddr"},{"line_number":21,"context_line":"from neutron_lib.agent import constants as agent_consts"}],"source_content_type":"text/x-python","patch_set":40,"id":"639ab16c_a6853aad","line":18,"updated":"2026-06-15 18:52:27.000000000","message":"pep8: H306: imports not in alphabetical order (time, threading)","commit_id":"bb0e3b3aff7056f69e8de470f06a4b64a133ec44"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b793e722c19e0fe7f117a4dd260c40f635a53a04","unresolved":true,"context_lines":[{"line_number":855,"context_line":"        except l3_exc.AbortSyncRouters:"},{"line_number":856,"context_line":"            self.fullsync \u003d True"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        if self.legacy_state_change_check:"},{"line_number":859,"context_line":"            time.sleep(5)  # Let queue processor catch up"},{"line_number":860,"context_line":"            self._check_legacy_state_change_processes()"},{"line_number":861,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"413b9314_63740cf2","line":858,"updated":"2026-06-16 12:53:31.000000000","message":"you don\u0027t need to have if here if you already have if in L951. Or if you want to keep it here, remove it from L951 :)","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"344c27615bfaf3136f424c73b20b4e65f5666181","unresolved":false,"context_lines":[{"line_number":855,"context_line":"        except l3_exc.AbortSyncRouters:"},{"line_number":856,"context_line":"            self.fullsync \u003d True"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        if self.legacy_state_change_check:"},{"line_number":859,"context_line":"            time.sleep(5)  # Let queue processor catch up"},{"line_number":860,"context_line":"            self._check_legacy_state_change_processes()"},{"line_number":861,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"650b9c68_d541fb7e","line":858,"in_reply_to":"413b9314_63740cf2","updated":"2026-06-16 13:12:14.000000000","message":"Done","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b793e722c19e0fe7f117a4dd260c40f635a53a04","unresolved":true,"context_lines":[{"line_number":945,"context_line":"            for router in self.router_info.values():"},{"line_number":946,"context_line":"                router.delete()"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    def _check_legacy_state_change_processes(self):"},{"line_number":949,"context_line":"        # Check if some routers are still running the legacy Python version of"},{"line_number":950,"context_line":"        # neutron-keepalived-state-change."},{"line_number":951,"context_line":"        if not self.legacy_state_change_check:"}],"source_content_type":"text/x-python","patch_set":42,"id":"3d7e4234_a483d708","line":948,"updated":"2026-06-16 12:53:31.000000000","message":"can you add TODO to remove this in few cycles from now? I don\u0027t think we will need to keep it here forever","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"344c27615bfaf3136f424c73b20b4e65f5666181","unresolved":false,"context_lines":[{"line_number":945,"context_line":"            for router in self.router_info.values():"},{"line_number":946,"context_line":"                router.delete()"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    def _check_legacy_state_change_processes(self):"},{"line_number":949,"context_line":"        # Check if some routers are still running the legacy Python version of"},{"line_number":950,"context_line":"        # neutron-keepalived-state-change."},{"line_number":951,"context_line":"        if not self.legacy_state_change_check:"}],"source_content_type":"text/x-python","patch_set":42,"id":"cfd12be6_a8f189a6","line":948,"in_reply_to":"3d7e4234_a483d708","updated":"2026-06-16 13:12:14.000000000","message":"Done","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b793e722c19e0fe7f117a4dd260c40f635a53a04","unresolved":true,"context_lines":[{"line_number":958,"context_line":""},{"line_number":959,"context_line":"        LOG.info(\"Scanning for legacy Python keepalived state change \""},{"line_number":960,"context_line":"                 \"processes to clean up.\")"},{"line_number":961,"context_line":"        LOG.debug(\"Current curr_router_ids: %s\", router_ids)"},{"line_number":962,"context_line":"        for router_id in router_ids:"},{"line_number":963,"context_line":"            LOG.debug(\"Checking neutron-keepalived-state-change for \""},{"line_number":964,"context_line":"                      \"router %s.\", router_id)"}],"source_content_type":"text/x-python","patch_set":42,"id":"07e39cc8_f10ef637","line":961,"range":{"start_line":961,"start_character":19,"end_line":961,"end_character":42},"updated":"2026-06-16 12:53:31.000000000","message":"\"Current routers: %s\" would be enought IMO","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"344c27615bfaf3136f424c73b20b4e65f5666181","unresolved":false,"context_lines":[{"line_number":958,"context_line":""},{"line_number":959,"context_line":"        LOG.info(\"Scanning for legacy Python keepalived state change \""},{"line_number":960,"context_line":"                 \"processes to clean up.\")"},{"line_number":961,"context_line":"        LOG.debug(\"Current curr_router_ids: %s\", router_ids)"},{"line_number":962,"context_line":"        for router_id in router_ids:"},{"line_number":963,"context_line":"            LOG.debug(\"Checking neutron-keepalived-state-change for \""},{"line_number":964,"context_line":"                      \"router %s.\", router_id)"}],"source_content_type":"text/x-python","patch_set":42,"id":"b0a28c42_68800f5f","line":961,"range":{"start_line":961,"start_character":19,"end_line":961,"end_character":42},"in_reply_to":"07e39cc8_f10ef637","updated":"2026-06-16 13:12:14.000000000","message":"I removed it entirely.","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b793e722c19e0fe7f117a4dd260c40f635a53a04","unresolved":true,"context_lines":[{"line_number":968,"context_line":"                ri \u003d self.router_info[router_id]"},{"line_number":969,"context_line":"                if not isinstance(ri, ha_router.HaRouter):"},{"line_number":970,"context_line":"                    LOG.info(\"Found not an instance of \""},{"line_number":971,"context_line":"                             \"router %s.\", router_id)"},{"line_number":972,"context_line":"                    continue"},{"line_number":973,"context_line":"            except Exception as e:"},{"line_number":974,"context_line":"                LOG.warning(\"Error while getting self.router_info[router_id]: \""}],"source_content_type":"text/x-python","patch_set":42,"id":"f3cc3fb3_daf6bbb9","line":971,"updated":"2026-06-16 12:53:31.000000000","message":"this message sounds a bit unclear for me. Can you maybe rephrase it somehow?","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"344c27615bfaf3136f424c73b20b4e65f5666181","unresolved":false,"context_lines":[{"line_number":968,"context_line":"                ri \u003d self.router_info[router_id]"},{"line_number":969,"context_line":"                if not isinstance(ri, ha_router.HaRouter):"},{"line_number":970,"context_line":"                    LOG.info(\"Found not an instance of \""},{"line_number":971,"context_line":"                             \"router %s.\", router_id)"},{"line_number":972,"context_line":"                    continue"},{"line_number":973,"context_line":"            except Exception as e:"},{"line_number":974,"context_line":"                LOG.warning(\"Error while getting self.router_info[router_id]: \""}],"source_content_type":"text/x-python","patch_set":42,"id":"7b1db05b_c783662a","line":971,"in_reply_to":"f3cc3fb3_daf6bbb9","updated":"2026-06-16 13:12:14.000000000","message":"Done","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b793e722c19e0fe7f117a4dd260c40f635a53a04","unresolved":true,"context_lines":[{"line_number":971,"context_line":"                             \"router %s.\", router_id)"},{"line_number":972,"context_line":"                    continue"},{"line_number":973,"context_line":"            except Exception as e:"},{"line_number":974,"context_line":"                LOG.warning(\"Error while getting self.router_info[router_id]: \""},{"line_number":975,"context_line":"                            \"%s.\", e)"},{"line_number":976,"context_line":"                continue"},{"line_number":977,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"97465c86_099b2d71","line":974,"range":{"start_line":974,"start_character":49,"end_line":974,"end_character":76},"updated":"2026-06-16 12:53:31.000000000","message":"I think you should avoid logging internal variables names in the log messages. Maybe better would be something like \"Error while getting details of the router %s\"","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"344c27615bfaf3136f424c73b20b4e65f5666181","unresolved":false,"context_lines":[{"line_number":971,"context_line":"                             \"router %s.\", router_id)"},{"line_number":972,"context_line":"                    continue"},{"line_number":973,"context_line":"            except Exception as e:"},{"line_number":974,"context_line":"                LOG.warning(\"Error while getting self.router_info[router_id]: \""},{"line_number":975,"context_line":"                            \"%s.\", e)"},{"line_number":976,"context_line":"                continue"},{"line_number":977,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"b1f6f013_21ea22c5","line":974,"range":{"start_line":974,"start_character":49,"end_line":974,"end_character":76},"in_reply_to":"97465c86_099b2d71","updated":"2026-06-16 13:12:14.000000000","message":"Done","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b793e722c19e0fe7f117a4dd260c40f635a53a04","unresolved":true,"context_lines":[{"line_number":997,"context_line":"                LOG.warning(\"Error while reading PID file: %s.\", e)"},{"line_number":998,"context_line":"                continue"},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"            LOG.debug(\"PID for router %s: %s.\", router_id, pid)"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":"            # We cannot use something like:"},{"line_number":1003,"context_line":"            # cmdline \u003d pm.default_cmd_callback(pm.get_pid_file_name())"}],"source_content_type":"text/x-python","patch_set":42,"id":"7c797497_74c11e06","line":1000,"updated":"2026-06-16 12:53:31.000000000","message":"it is PID of the keepalived-state-change process, not PID of router","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"344c27615bfaf3136f424c73b20b4e65f5666181","unresolved":false,"context_lines":[{"line_number":997,"context_line":"                LOG.warning(\"Error while reading PID file: %s.\", e)"},{"line_number":998,"context_line":"                continue"},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"            LOG.debug(\"PID for router %s: %s.\", router_id, pid)"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":"            # We cannot use something like:"},{"line_number":1003,"context_line":"            # cmdline \u003d pm.default_cmd_callback(pm.get_pid_file_name())"}],"source_content_type":"text/x-python","patch_set":42,"id":"e6d1399f_10cb9b19","line":1000,"in_reply_to":"7c797497_74c11e06","updated":"2026-06-16 13:12:14.000000000","message":"Done","commit_id":"c20a4ae736c3785384a3b068c28876f984ae9da3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8b451bdd6416bc739369d5f16e7ca2aa3a3e44ba","unresolved":false,"context_lines":[{"line_number":944,"context_line":"            for router in self.router_info.values():"},{"line_number":945,"context_line":"                router.delete()"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"    # TODO: Let\u0027s remove this in 2028.1, which is enough"},{"line_number":948,"context_line":"    # time to have all Python legacy processes killed."},{"line_number":949,"context_line":"    def _check_legacy_state_change_processes(self):"},{"line_number":950,"context_line":"        # Check if some routers are still running the legacy Python version of"}],"source_content_type":"text/x-python","patch_set":44,"id":"6e7dfbaf_2c88b799","line":947,"updated":"2026-06-16 16:48:56.000000000","message":"pep8: H101: Use TODO(NAME)","commit_id":"b4b1762d51a6c6002bd4f4d72983b45af9a41c9d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5b8025fdf81eb78fdce359aa502788d90344e253","unresolved":true,"context_lines":[{"line_number":855,"context_line":"        except l3_exc.AbortSyncRouters:"},{"line_number":856,"context_line":"            self.fullsync \u003d True"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        time.sleep(5)  # Let queue processor catch up"},{"line_number":859,"context_line":"        self._check_legacy_state_change_processes()"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    def fetch_and_sync_all_routers(self, context, ns_manager):"}],"source_content_type":"text/x-python","patch_set":46,"id":"53bbee71_c61f77aa","line":858,"range":{"start_line":858,"start_character":8,"end_line":858,"end_character":53},"updated":"2026-06-18 13:37:47.000000000","message":"This hardcoded time is difficult to justify. Isn\u0027t an active method to wait for this time?","commit_id":"7226b47286e0883931ed5ada7a4c54b860b3eb83"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"166510a69df239ac3fd7cba765bbe3985490f322","unresolved":false,"context_lines":[{"line_number":855,"context_line":"        except l3_exc.AbortSyncRouters:"},{"line_number":856,"context_line":"            self.fullsync \u003d True"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        time.sleep(5)  # Let queue processor catch up"},{"line_number":859,"context_line":"        self._check_legacy_state_change_processes()"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    def fetch_and_sync_all_routers(self, context, ns_manager):"}],"source_content_type":"text/x-python","patch_set":46,"id":"9eca7859_4a6a3243","line":858,"range":{"start_line":858,"start_character":8,"end_line":858,"end_character":53},"in_reply_to":"53bbee71_c61f77aa","updated":"2026-06-18 15:12:48.000000000","message":"I\u0027m not even sure if this time.sleep() is needed. As much as I understand the current implementation, at the time of calling _check_legacy_state_change_processes() the router should be already in sync. This was extra precaution, but let\u0027s remove the sleep and see if it works.","commit_id":"7226b47286e0883931ed5ada7a4c54b860b3eb83"}],"neutron/agent/l3/ha_router.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ee6664954553ab79ee4500aa5e7ab94a9028feff","unresolved":true,"context_lines":[{"line_number":440,"context_line":"        LOG.debug(\"Router %(router_id)s %(process)s pid %(pid)d\","},{"line_number":441,"context_line":"                  {\"router_id\": self.router_id,"},{"line_number":442,"context_line":"                   \"process\": KEEPALIVED_STATE_CHANGE_MONITOR_SERVICE_NAME,"},{"line_number":443,"context_line":"                   \"pid\": pm.pid})"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def destroy_state_change_monitor(self, process_monitor):"},{"line_number":446,"context_line":"        if not self.ha_port:"}],"source_content_type":"text/x-python","patch_set":12,"id":"0cf292d1_22787fa4","line":443,"updated":"2022-05-10 20:00:33.000000000","message":"I\u0027m not sure if this is related by in the functional test logs I see errors like:\n\n2022-05-10 09:13:58.298 67918 DEBUG neutron.agent.l3.ha_router [req-a263daa3-e748-4661-af54-117dc1e3c9a2 - - - - -] Error formatting log line msg\u003d\u0027Router *(router_id)s *(process)s pid *(pid)d\u0027 err\u003dTypeError(\u0027*d format: a number is required, not NoneType\u0027) spawn_state_change_monitor /home/zuul/src/opendev.org/openstack/neutron/neutron/agent/l3/ha_router.py:440\n\nSee for example: https://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_3d5/836140/12/check/neutron-functional-with-uwsgi/3d5ddc0/controller/logs/dsvm-functional-logs/neutron.tests.functional.agent.l3.extensions.qos.test_fip_qos_extension.LinuxBridgeL3AgentFipQosExtensionTestCase.test_ha_router_fip_qos.txt\n\nCan You check if that\u0027s related?","commit_id":"dde1776b4975fb0858a51a38057f225685dc4e03"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"a0c985d06a6d81cd65ae3777eb2b6804fec5553a","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        LOG.debug(\"Router %(router_id)s %(process)s pid %(pid)d\","},{"line_number":441,"context_line":"                  {\"router_id\": self.router_id,"},{"line_number":442,"context_line":"                   \"process\": KEEPALIVED_STATE_CHANGE_MONITOR_SERVICE_NAME,"},{"line_number":443,"context_line":"                   \"pid\": pm.pid})"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def destroy_state_change_monitor(self, process_monitor):"},{"line_number":446,"context_line":"        if not self.ha_port:"}],"source_content_type":"text/x-python","patch_set":12,"id":"17774f1b_034e1017","line":443,"in_reply_to":"08794b6e_9e86da96","updated":"2026-06-01 14:18:46.000000000","message":"Hi. I checked to remove / add routers from l3 agent, grepped my logs, and couldn\u0027t see what you\u0027re mentioning. Also, the PID is currently correct. Maybe you may have a look a the last logs, in the last version of my patch?","commit_id":"dde1776b4975fb0858a51a38057f225685dc4e03"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"0c349d7238b047e9e1e26b3f0c128dfff0512e17","unresolved":true,"context_lines":[{"line_number":440,"context_line":"        LOG.debug(\"Router %(router_id)s %(process)s pid %(pid)d\","},{"line_number":441,"context_line":"                  {\"router_id\": self.router_id,"},{"line_number":442,"context_line":"                   \"process\": KEEPALIVED_STATE_CHANGE_MONITOR_SERVICE_NAME,"},{"line_number":443,"context_line":"                   \"pid\": pm.pid})"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def destroy_state_change_monitor(self, process_monitor):"},{"line_number":446,"context_line":"        if not self.ha_port:"}],"source_content_type":"text/x-python","patch_set":12,"id":"08794b6e_9e86da96","line":443,"in_reply_to":"0cf292d1_22787fa4","updated":"2022-05-16 16:00:13.000000000","message":"In my local env pm.pid was None","commit_id":"dde1776b4975fb0858a51a38057f225685dc4e03"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"717f3cd8812b792b5962a3922ea32b2d4eb3c522","unresolved":true,"context_lines":[{"line_number":473,"context_line":""},{"line_number":474,"context_line":"            if self.agent_conf.debug:"},{"line_number":475,"context_line":"                cmd.append(\u0027--debug\u0027)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"            return cmd"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        return callback"}],"source_content_type":"text/x-python","patch_set":29,"id":"5b7464d8_b874437f","side":"PARENT","line":476,"updated":"2026-06-02 09:25:45.000000000","message":"nit: unrelated change","commit_id":"9c365e62d1be31f1cf37a023316ac379b97d2407"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"e015f05c62f0afbcf8c06d7f26d87ae44a9d6e1e","unresolved":false,"context_lines":[{"line_number":473,"context_line":""},{"line_number":474,"context_line":"            if self.agent_conf.debug:"},{"line_number":475,"context_line":"                cmd.append(\u0027--debug\u0027)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"            return cmd"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        return callback"}],"source_content_type":"text/x-python","patch_set":29,"id":"d6358f28_10ac6344","side":"PARENT","line":476,"in_reply_to":"5b7464d8_b874437f","updated":"2026-06-02 14:12:18.000000000","message":"I don\u0027t think this is unrelated: the script does have a --debug option that I would like to support.","commit_id":"9c365e62d1be31f1cf37a023316ac379b97d2407"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"68bf43f2f35c2dbac924193565085fbfdb2e11b2","unresolved":false,"context_lines":[{"line_number":473,"context_line":""},{"line_number":474,"context_line":"            if self.agent_conf.debug:"},{"line_number":475,"context_line":"                cmd.append(\u0027--debug\u0027)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"            return cmd"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        return callback"}],"source_content_type":"text/x-python","patch_set":29,"id":"b62e04b5_a6b9df59","side":"PARENT","line":476,"in_reply_to":"65ee8c06_b3e0e2a2","updated":"2026-06-02 14:47:39.000000000","message":"Done","commit_id":"9c365e62d1be31f1cf37a023316ac379b97d2407"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"82861aa052f00ad08d32cbfa204562e1c8d49895","unresolved":true,"context_lines":[{"line_number":473,"context_line":""},{"line_number":474,"context_line":"            if self.agent_conf.debug:"},{"line_number":475,"context_line":"                cmd.append(\u0027--debug\u0027)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"            return cmd"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        return callback"}],"source_content_type":"text/x-python","patch_set":29,"id":"65ee8c06_b3e0e2a2","side":"PARENT","line":476,"in_reply_to":"d6358f28_10ac6344","updated":"2026-06-02 14:20:01.000000000","message":"I was only refering to the empty line removed by your patch :)","commit_id":"9c365e62d1be31f1cf37a023316ac379b97d2407"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5b8025fdf81eb78fdce359aa502788d90344e253","unresolved":true,"context_lines":[{"line_number":484,"context_line":"                \u0027--monitor_cidr\u0027, ha_cidr,"},{"line_number":485,"context_line":"                \u0027--pid_file\u0027, pid_file,"},{"line_number":486,"context_line":"                \u0027--state_path\u0027, self.agent_conf.state_path,"},{"line_number":487,"context_line":"                \u0027--user\u0027, os.geteuid(),"},{"line_number":488,"context_line":"                \u0027--group\u0027, os.getegid()]"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"            if self.agent_conf.ha_conntrackd_enabled:"},{"line_number":491,"context_line":"                cmd.append(\u0027--enable_conntrackd\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"026ece7e_605b4538","line":488,"range":{"start_line":487,"start_character":16,"end_line":488,"end_character":40},"updated":"2026-06-18 13:37:47.000000000","message":"This 2 values should be cast to `str`","commit_id":"7226b47286e0883931ed5ada7a4c54b860b3eb83"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"166510a69df239ac3fd7cba765bbe3985490f322","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                \u0027--monitor_cidr\u0027, ha_cidr,"},{"line_number":485,"context_line":"                \u0027--pid_file\u0027, pid_file,"},{"line_number":486,"context_line":"                \u0027--state_path\u0027, self.agent_conf.state_path,"},{"line_number":487,"context_line":"                \u0027--user\u0027, os.geteuid(),"},{"line_number":488,"context_line":"                \u0027--group\u0027, os.getegid()]"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"            if self.agent_conf.ha_conntrackd_enabled:"},{"line_number":491,"context_line":"                cmd.append(\u0027--enable_conntrackd\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"d7c105dd_03bdfb30","line":488,"range":{"start_line":487,"start_character":16,"end_line":488,"end_character":40},"in_reply_to":"026ece7e_605b4538","updated":"2026-06-18 15:12:48.000000000","message":"Done","commit_id":"7226b47286e0883931ed5ada7a4c54b860b3eb83"}],"neutron/agent/l3/neutron_keepalived_state_change.sh":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1aa9b916e21d369208eb838d42dfa5c736de1e9a","unresolved":true,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        if [[ \"$MONITOR_CIDR\" \u003d\u003d \"$event_cidr\" ]] \u0026\u0026 [[ \"$MONITOR_INTERFACE\" \u003d\u003d \"$event_interface\" ]]; then"},{"line_number":83,"context_line":"            write_log \"Wrote router $ROUTER_ID state $state\""},{"line_number":84,"context_line":"            write_state_file $state"},{"line_number":85,"context_line":"            notify_agent $state"},{"line_number":86,"context_line":"        fi"},{"line_number":87,"context_line":"    done"}],"source_content_type":"text/x-sh","patch_set":10,"id":"edec19d6_5807ac94","line":84,"range":{"start_line":84,"start_character":12,"end_line":84,"end_character":35},"updated":"2022-05-06 10:52:33.000000000","message":"I was not writing the state file. This is why \"test_keepalived_multiple_sighups_does_not_forfeit_primary\" was failing","commit_id":"ab924bd88109ef6ec646a882d262af2c09c6555e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2cf86091d9ae2443b1569f872abcf17b40d24867","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        if [[ \"$MONITOR_CIDR\" \u003d\u003d \"$event_cidr\" ]] \u0026\u0026 [[ \"$MONITOR_INTERFACE\" \u003d\u003d \"$event_interface\" ]]; then"},{"line_number":83,"context_line":"            write_log \"Wrote router $ROUTER_ID state $state\""},{"line_number":84,"context_line":"            write_state_file $state"},{"line_number":85,"context_line":"            notify_agent $state"},{"line_number":86,"context_line":"        fi"},{"line_number":87,"context_line":"    done"}],"source_content_type":"text/x-sh","patch_set":10,"id":"2c20f750_a1384a0a","line":84,"range":{"start_line":84,"start_character":12,"end_line":84,"end_character":35},"in_reply_to":"edec19d6_5807ac94","updated":"2022-05-06 15:49:18.000000000","message":"Done","commit_id":"ab924bd88109ef6ec646a882d262af2c09c6555e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ee6664954553ab79ee4500aa5e7ab94a9028feff","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env bash"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-sh","patch_set":12,"id":"293a8acd_65316143","line":1,"updated":"2022-05-10 20:00:33.000000000","message":"I wonder if it wouldn\u0027t be better to put this file in the tools/ directory instead of keeping it in the dir with python code","commit_id":"dde1776b4975fb0858a51a38057f225685dc4e03"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"99eb62e990b3c53606edb30dc00cccce6079e7b2","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env bash"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-sh","patch_set":12,"id":"f3fa0b11_18e402f5","line":1,"in_reply_to":"293a8acd_65316143","updated":"2025-09-24 09:31:12.000000000","message":"Indeed, please don\u0027t bury scripts inside the Python namespace, and also, avoid having the \".sh\" extension. Distros typically will push the script in /usr/bin, and remove the extension. Neutron shouldn\u0027t be calling the script with its full path, unless we decide to host it under /usr/share/neutron/scripts (or something like this).","commit_id":"dde1776b4975fb0858a51a38057f225685dc4e03"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"5873168aa156eff3d5dbb8313c7270a2c4e8b0cc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env bash"},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-sh","patch_set":12,"id":"bf2f6621_2de7a321","line":1,"in_reply_to":"f3fa0b11_18e402f5","updated":"2026-05-12 22:27:22.000000000","message":"Done","commit_id":"dde1776b4975fb0858a51a38057f225685dc4e03"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"99eb62e990b3c53606edb30dc00cccce6079e7b2","unresolved":true,"context_lines":[{"line_number":11,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"# under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"function write_log {"},{"line_number":15,"context_line":"    local message\u003d$1"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    msg\u003d\"$(date) - $message\""}],"source_content_type":"text/x-sh","patch_set":14,"id":"7122ffab_34229469","line":14,"updated":"2025-09-24 09:31:12.000000000","message":"Please avoid writing \"function\", as this is unecessary a bashism (just in case someone wants to convert this script for dash).","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"5873168aa156eff3d5dbb8313c7270a2c4e8b0cc","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"# under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"function write_log {"},{"line_number":15,"context_line":"    local message\u003d$1"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    msg\u003d\"$(date) - $message\""}],"source_content_type":"text/x-sh","patch_set":14,"id":"8533b7c7_930188b1","line":14,"in_reply_to":"7122ffab_34229469","updated":"2026-05-12 22:27:22.000000000","message":"Done","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"37fc91c4076de3fe8970bd2819a44841f8f401bb","unresolved":true,"context_lines":[{"line_number":15,"context_line":"    local message\u003d$1"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    msg\u003d\"$(date) - $message\""},{"line_number":18,"context_line":"    echo -e \"$msg\" | tee --append \"$LOG_FILE\" \u003e /dev/null"},{"line_number":19,"context_line":"}"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-sh","patch_set":14,"id":"82a17dfd_1eb7219e","line":18,"updated":"2025-09-24 09:46:10.000000000","message":"If you simply write this on top of the script:\n\nexec \u003e\u003e ${LOG_FILE} 2\u003e\u00261\n\nthen you don\u0027t need to use tee, and you can simply use echo.\n\nI wouldn\u0027t recommend writing to stdout if you\u0027re already writing to log files, as this will be 2 outputs in the system: one in journald, and one in the log file.\n\nI would also recommend attempting to read the log_dir from /etc/neutron/neutron.conf and also the environment (maybe getting the info from calling Python process, passed as arguments to this script?). If so, we could even output to syslog if the package is configured for it, using /usr/bin/logger (from the bsdutils package, which is Priority: required, meaning it\u0027s always there at least in Debian/Ubuntu).","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"5873168aa156eff3d5dbb8313c7270a2c4e8b0cc","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    local message\u003d$1"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    msg\u003d\"$(date) - $message\""},{"line_number":18,"context_line":"    echo -e \"$msg\" | tee --append \"$LOG_FILE\" \u003e /dev/null"},{"line_number":19,"context_line":"}"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-sh","patch_set":14,"id":"aa387597_c83fbd30","line":18,"in_reply_to":"82a17dfd_1eb7219e","updated":"2026-05-12 22:27:22.000000000","message":"Done","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"99eb62e990b3c53606edb30dc00cccce6079e7b2","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    local is_init\u003d\"True\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    ip netns exec \"$NAMESPACE\" ip -o monitor address | while read -t 1 event || true ; do"},{"line_number":53,"context_line":"        if [[ \"$is_init\" \u003d\u003d \"True\" ]]; then"},{"line_number":54,"context_line":"            is_init\u003d\"False\""},{"line_number":55,"context_line":"            write_pid $BASHPID"},{"line_number":56,"context_line":"            trap terminate_script SIGTERM"}],"source_content_type":"text/x-sh","patch_set":14,"id":"fa332811_e1772da8","line":53,"range":{"start_line":53,"start_character":11,"end_line":53,"end_character":13},"updated":"2025-09-24 09:31:12.000000000","message":"Same here: double [ is unnecessary bashism, especially if you\u0027re escaping variables with comma the way you\u0027re doing here.","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"5873168aa156eff3d5dbb8313c7270a2c4e8b0cc","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    local is_init\u003d\"True\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    ip netns exec \"$NAMESPACE\" ip -o monitor address | while read -t 1 event || true ; do"},{"line_number":53,"context_line":"        if [[ \"$is_init\" \u003d\u003d \"True\" ]]; then"},{"line_number":54,"context_line":"            is_init\u003d\"False\""},{"line_number":55,"context_line":"            write_pid $BASHPID"},{"line_number":56,"context_line":"            trap terminate_script SIGTERM"}],"source_content_type":"text/x-sh","patch_set":14,"id":"79a41c40_257e71cc","line":53,"range":{"start_line":53,"start_character":11,"end_line":53,"end_character":13},"in_reply_to":"fa332811_e1772da8","updated":"2026-05-12 22:27:22.000000000","message":"Done","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"99eb62e990b3c53606edb30dc00cccce6079e7b2","unresolved":true,"context_lines":[{"line_number":66,"context_line":"            continue"},{"line_number":67,"context_line":"        fi"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        event_array\u003d(${event// / })"},{"line_number":70,"context_line":"        if [[ \"${event_array[0]}\" \u003d\u003d \"Deleted\" ]]; then"},{"line_number":71,"context_line":"            event_cidr\u003d${event_array[4]}"},{"line_number":72,"context_line":"            event_interface\u003d$(remove_interface_suffix \"${event_array[2]}\")"}],"source_content_type":"text/x-sh","patch_set":14,"id":"8cab71a3_f4107276","line":69,"updated":"2025-09-24 09:31:12.000000000","message":"If it was possible to avoid arrays (it often is), it\u0027d be possible to use dash instead of bash for this script. Dash is lighter (1/3rd of the footprint) and faster (10 times faster to spawn), for not a lot of effort. That\u0027s the only place were there\u0027s an array, as much as I can see.","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"5873168aa156eff3d5dbb8313c7270a2c4e8b0cc","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            continue"},{"line_number":67,"context_line":"        fi"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        event_array\u003d(${event// / })"},{"line_number":70,"context_line":"        if [[ \"${event_array[0]}\" \u003d\u003d \"Deleted\" ]]; then"},{"line_number":71,"context_line":"            event_cidr\u003d${event_array[4]}"},{"line_number":72,"context_line":"            event_interface\u003d$(remove_interface_suffix \"${event_array[2]}\")"}],"source_content_type":"text/x-sh","patch_set":14,"id":"a822efa4_88de5136","line":69,"in_reply_to":"8cab71a3_f4107276","updated":"2026-05-12 22:27:22.000000000","message":"Done","commit_id":"5e83f282bfa293451caca9ceb6fe3679ab62081c"}],"neutron/agent/l3_agent.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"9b8e9431352a7baa23477ae11e8c0403a1f0690d","unresolved":true,"context_lines":[{"line_number":59,"context_line":"def kill_legacy_python_state_change_processes():"},{"line_number":60,"context_line":"    base \u003d \"/var/lib/neutron/external/pids\""},{"line_number":61,"context_line":"    LOG.info(\"Scanning for legacy Python keepalived state change \""},{"line_number":62,"context_line":"             \"processes to clean up.\")"},{"line_number":63,"context_line":"    for filename in os.listdir(base):"},{"line_number":64,"context_line":"        if not filename.endswith("},{"line_number":65,"context_line":"            \".monitor.pid.neutron-keepalived-state-change-monitor\""}],"source_content_type":"text/x-python","patch_set":39,"id":"02c525ca_df41c140","line":62,"updated":"2026-06-10 08:54:40.000000000","message":"there are similar helper methods for contrack: https://opendev.org/openstack/neutron/src/branch/master/neutron/agent/linux/conntrackd.py\n\nPerhaps you can check and reuse them","commit_id":"16de28163373b8e127f44f069c636dbd26b4a5c5"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"6277ba5981c545cd1e23395f5a1b975e77a2ab8e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"def kill_legacy_python_state_change_processes():"},{"line_number":60,"context_line":"    base \u003d \"/var/lib/neutron/external/pids\""},{"line_number":61,"context_line":"    LOG.info(\"Scanning for legacy Python keepalived state change \""},{"line_number":62,"context_line":"             \"processes to clean up.\")"},{"line_number":63,"context_line":"    for filename in os.listdir(base):"},{"line_number":64,"context_line":"        if not filename.endswith("},{"line_number":65,"context_line":"            \".monitor.pid.neutron-keepalived-state-change-monitor\""}],"source_content_type":"text/x-python","patch_set":39,"id":"3a658ae2_9a3078b0","line":62,"in_reply_to":"02c525ca_df41c140","updated":"2026-06-15 18:52:26.000000000","message":"My last patch is much nicer, and does things within the L3Agent object, without the need to do this, as I\u0027m using Neutron internals instead.","commit_id":"16de28163373b8e127f44f069c636dbd26b4a5c5"}],"neutron/tests/functional/agent/l3/test_keepalived_state_change.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ad45ee2d939731e1b3299b5711bd976e8cdc41b7","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_utils import uuidutils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron.agent.common import async_process"},{"line_number":21,"context_line":"from neutron.agent.l3 import ha"},{"line_number":22,"context_line":"from neutron.agent.l3 import ha_router"},{"line_number":23,"context_line":"from neutron.agent.linux import external_process"}],"source_content_type":"text/x-python","patch_set":5,"id":"c17ffd18_fd161110","line":20,"in_reply_to":"70a5f492_1f2a38b0","updated":"2022-05-03 09:29:46.000000000","message":"\u003e pep8: F401 \u0027neutron.agent.common.async_process\u0027 imported but unused\n\nPlease fix.","commit_id":"199beddf8db8fcec71668a7b6f2218bcb974ff0c"}],"setup.cfg":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"4da6e2400b5b2c80ae1b7f3a338a7ae807fc56fa","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    neutron-db-manage \u003d neutron.db.migration.cli:main"},{"line_number":41,"context_line":"    neutron-debug \u003d neutron.debug.shell:main"},{"line_number":42,"context_line":"    neutron-dhcp-agent \u003d neutron.cmd.eventlet.agents.dhcp:main"},{"line_number":43,"context_line":"    neutron-keepalived-state-change \u003d neutron.cmd.keepalived_state_change:main"},{"line_number":44,"context_line":"    neutron-ipset-cleanup \u003d neutron.cmd.ipset_cleanup:main"},{"line_number":45,"context_line":"    neutron-l3-agent \u003d neutron.cmd.eventlet.agents.l3:main"},{"line_number":46,"context_line":"    neutron-linuxbridge-agent \u003d neutron.cmd.eventlet.plugins.linuxbridge_neutron_agent:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":11,"id":"18da1f70_7e592974","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":78},"updated":"2022-05-10 01:24:20.000000000","message":"This line should be deleted.","commit_id":"6977916bbd1bfc78d373ea73cf4759d755d19548"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"97f1d5e77f853a383e9ac9f9d0200ed916428ea0","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    neutron-db-manage \u003d neutron.db.migration.cli:main"},{"line_number":41,"context_line":"    neutron-debug \u003d neutron.debug.shell:main"},{"line_number":42,"context_line":"    neutron-dhcp-agent \u003d neutron.cmd.eventlet.agents.dhcp:main"},{"line_number":43,"context_line":"    neutron-keepalived-state-change \u003d neutron.cmd.keepalived_state_change:main"},{"line_number":44,"context_line":"    neutron-ipset-cleanup \u003d neutron.cmd.ipset_cleanup:main"},{"line_number":45,"context_line":"    neutron-l3-agent \u003d neutron.cmd.eventlet.agents.l3:main"},{"line_number":46,"context_line":"    neutron-linuxbridge-agent \u003d neutron.cmd.eventlet.plugins.linuxbridge_neutron_agent:main"}],"source_content_type":"text/x-ttcn-cfg","patch_set":11,"id":"e17b78a9_10c9391b","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":78},"in_reply_to":"18da1f70_7e592974","updated":"2022-05-10 08:55:52.000000000","message":"Done","commit_id":"6977916bbd1bfc78d373ea73cf4759d755d19548"}]}
