)]}'
{"/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"}],"/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":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"}],"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"}],"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":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"}],"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/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"}]}
