)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8efec2cb04b28706915a36ec1bc9195f17adbbe","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Marcin Wilk \u003cmarcin.wilk@canonical.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-07-09 17:01:23 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Denote highest priority chassis after crash and BFD failover"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When the highest priority chassis crashes, BFD detects the problem"},{"line_number":10,"context_line":"quickly and fails over active gateway ports to the second highest"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"031abec0_0b24e01b","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":6},"updated":"2026-07-16 16:17:31.000000000","message":"s/Demote","commit_id":"f25ae40710a9c708e0e7d7d76b92fdec37b5d2e0"},{"author":{"_account_id":30534,"name":"Marcin Wilk","email":"marcin.wilk@canonical.com","username":"wilkmar"},"change_message_id":"d5554107803378da334a5cc83364e09061d2be3b","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Marcin Wilk \u003cmarcin.wilk@canonical.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-07-09 17:01:23 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Denote highest priority chassis after crash and BFD failover"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When the highest priority chassis crashes, BFD detects the problem"},{"line_number":10,"context_line":"quickly and fails over active gateway ports to the second highest"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"0cad1715_6706372c","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":6},"in_reply_to":"031abec0_0b24e01b","updated":"2026-07-17 06:53:39.000000000","message":"Acknowledged","commit_id":"f25ae40710a9c708e0e7d7d76b92fdec37b5d2e0"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":30534,"name":"Marcin Wilk","email":"marcin.wilk@canonical.com","username":"wilkmar"},"change_message_id":"a31d4be7a2ae7ec274bd435c5a38fe351f45cf69","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"548ae2d3_62f9cc6e","updated":"2026-05-25 18:04:48.000000000","message":"Hello, I\u0027d appreciate it if you could share your thoughts/comments about this patch.","commit_id":"58ba0e5f5700037826d455152d656dd795b5421e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4ac0e25c1301082bfee119edc5c922881d74b820","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a6ddf899_a04e9ec7","in_reply_to":"548ae2d3_62f9cc6e","updated":"2026-06-04 09:55:01.000000000","message":"I\u0027ve asked this question privately in my company team. We\u0027ll discuss about it. In any case, it could be nice to propose this change in the Neutron Drivers meeting (https://meetings.opendev.org/#Neutron_drivers_Meeting).\n\nI\u0027ll add a topic for this friday","commit_id":"58ba0e5f5700037826d455152d656dd795b5421e"},{"author":{"_account_id":30534,"name":"Marcin Wilk","email":"marcin.wilk@canonical.com","username":"wilkmar"},"change_message_id":"07d8c90b27732f35b65cbeab87070325257b538b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bbb88c29_a7947c7d","in_reply_to":"a6ddf899_a04e9ec7","updated":"2026-06-04 10:18:03.000000000","message":"Thank you. I will attend the meeting tomorrow.","commit_id":"58ba0e5f5700037826d455152d656dd795b5421e"},{"author":{"_account_id":30534,"name":"Marcin Wilk","email":"marcin.wilk@canonical.com","username":"wilkmar"},"change_message_id":"1775bb4e101e0fef9976774870ec4de4f0c36d10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a6a4e755_8beb77d7","updated":"2026-07-07 05:53:21.000000000","message":"recheck neutron-tempest-plugin-ovn timed out","commit_id":"1cce594de49233e57bcc148438734e1324bbf90a"},{"author":{"_account_id":30534,"name":"Marcin Wilk","email":"marcin.wilk@canonical.com","username":"wilkmar"},"change_message_id":"049562548deb5fa5812f2d086ff1c3d9cb078845","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"fd540b34_79f705fb","updated":"2026-07-09 05:32:16.000000000","message":"recheck after the neutron-tempest-plugin-ovn bug lp2069718 has been fixed","commit_id":"4d63bc29feae024af919e54622f67f98a7ae8449"},{"author":{"_account_id":30534,"name":"Marcin Wilk","email":"marcin.wilk@canonical.com","username":"wilkmar"},"change_message_id":"412bdaa3a2039e5e2d84dc91d688b467062dab7d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c27da78a_e508eafe","updated":"2026-07-10 09:15:22.000000000","message":"@ralonsoh@redhat.com @haleyb.dev@gmail.com\nI updated the patch and added a new config knob to make this an optional functionality, as it was discussed on the neutron drivers weekly the other day.\nI tested the changes on master branch (the new HC/HCG path) on devstack and the legacy path (gateway_chassis) on charmed Flamingo.\nPlease have a look and share your comments/suggestions. Thank you.","commit_id":"f25ae40710a9c708e0e7d7d76b92fdec37b5d2e0"},{"author":{"_account_id":30534,"name":"Marcin Wilk","email":"marcin.wilk@canonical.com","username":"wilkmar"},"change_message_id":"ade6f9116ca16f3220ed43942e3ec1472abc8e37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a61f5bd2_6848afac","updated":"2026-08-11 13:13:31.000000000","message":"@twilson@redhat.com, pls check my response.","commit_id":"f25ae40710a9c708e0e7d7d76b92fdec37b5d2e0"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8efec2cb04b28706915a36ec1bc9195f17adbbe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ec5476e4_28c35538","updated":"2026-07-16 16:17:31.000000000","message":"Looks good, just nits, just want to get other\u0027s opinions.","commit_id":"f25ae40710a9c708e0e7d7d76b92fdec37b5d2e0"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"7b17d11bb42acb43c8d10e50a93bdf2853f8c08a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c802c236_1be05a45","updated":"2026-08-06 15:39:03.000000000","message":"One question I have is that the exam","commit_id":"f25ae40710a9c708e0e7d7d76b92fdec37b5d2e0"},{"author":{"_account_id":30534,"name":"Marcin Wilk","email":"marcin.wilk@canonical.com","username":"wilkmar"},"change_message_id":"f46eb626321b0a4dde536f1ffc9c6bb7e14041ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"275a55d7_e92ce24a","updated":"2026-07-10 06:48:30.000000000","message":"recheck random live-migration timeout","commit_id":"f25ae40710a9c708e0e7d7d76b92fdec37b5d2e0"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovsdb_monitor.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"7b17d11bb42acb43c8d10e50a93bdf2853f8c08a","unresolved":true,"context_lines":[{"line_number":539,"context_line":"                     {\u0027router\u0027: router, \u0027host\u0027: host})"},{"line_number":540,"context_line":"            old_chassis \u003d getattr(old, \u0027chassis\u0027, None)"},{"line_number":541,"context_line":"            had_prev_chassis \u003d bool(old_chassis)"},{"line_number":542,"context_line":"            LOG.debug(\"BFD failover: port %s new_chassis\u003d%s \""},{"line_number":543,"context_line":"                      \"had_prev_chassis\u003d%s\","},{"line_number":544,"context_line":"                      row.logical_port, chassis[0].name, had_prev_chassis)"},{"line_number":545,"context_line":"            if (had_prev_chassis and"}],"source_content_type":"text/x-python","patch_set":4,"id":"bbde540c_b171c7c0","line":542,"updated":"2026-08-06 15:39:03.000000000","message":"I\u0027m a bit new to the scheduling code, so I have a question: Is BFD failover the only time we would match this event? It seems like it would happen any time the PB.chassis on a chassisredirect port changed. Wouldn\u0027t that also happen if, say, the HA_Chassis priority was changed via some other method, or a new chassis added with a higher priority? In this case, we\u0027d be demoting a chassis to the bottom and re-numbering despite it never crashing. Do we have enough information in neutron to really know why this happened? This feels a bit like something that should be an OVN feature, since it natively has access to all of this information.","commit_id":"f25ae40710a9c708e0e7d7d76b92fdec37b5d2e0"},{"author":{"_account_id":30534,"name":"Marcin Wilk","email":"marcin.wilk@canonical.com","username":"wilkmar"},"change_message_id":"ade6f9116ca16f3220ed43942e3ec1472abc8e37","unresolved":true,"context_lines":[{"line_number":539,"context_line":"                     {\u0027router\u0027: router, \u0027host\u0027: host})"},{"line_number":540,"context_line":"            old_chassis \u003d getattr(old, \u0027chassis\u0027, None)"},{"line_number":541,"context_line":"            had_prev_chassis \u003d bool(old_chassis)"},{"line_number":542,"context_line":"            LOG.debug(\"BFD failover: port %s new_chassis\u003d%s \""},{"line_number":543,"context_line":"                      \"had_prev_chassis\u003d%s\","},{"line_number":544,"context_line":"                      row.logical_port, chassis[0].name, had_prev_chassis)"},{"line_number":545,"context_line":"            if (had_prev_chassis and"}],"source_content_type":"text/x-python","patch_set":4,"id":"d1cc3028_7525ea71","line":542,"in_reply_to":"bbde540c_b171c7c0","updated":"2026-08-11 13:13:31.000000000","message":"@twilson@redhat.com thank you very much for looking into this and your invaluable comments.\nThe short answer is yes - there are other situations that would match this event and trigger priority demotion on a chassis that did not crash. Unfortunately, I overlooked those.\nAfter some extra research:\n1. I think adding a new chassis with a priority other than lowest is currently not possible. The scheduler refuses to promote a new chassis over the active one (to avoid traffic interruptions)\n2. out-of-band OVN DB manipulation is not supported as per the doc [1]. However 3.\n3. the OVN L3 router tool [2] allows an operator to completely reshuffle priorities (even on the active chassis). I completely lost it from my radar when working on this patch. But is a real example where your concerns apply.\n4. There are other situations that will also trigger demoting on a chassis that didn\u0027t crash, like:\n    a) removing a chassis from one AZ (updating ovn-cms-options.availability-zones value) - I tested this on devstack master branch,\n    b) removing a physnet / changing bridge-mappings on the active primary\nIndeed, neutron doesn\u0027t have enough information to precisely determine whether we are dealing with a failure or a legitimate chassis failover. \nAs you noticed, that information does not exist in the OVN SB either. It\u0027s an OVN feature to propagate the BFD state (from ovn-controller) of a geneve tunnel to the SN database.\nHaving said that, if accepted and implemented in OVN, it most likely won\u0027t be backported to the older/supported branches.\n\nOne possible option that comes to my mind is adding an extra check to the current patch that evaluates agent.is_alive state. This would allow for demoting only when the agent is dead. The potential downsides are:\n1. is_alive needs the agent_down_time to elapse, so an instantaneous chassis crash detection is not possible (default agent_down_time is 75s + some extra time for polling interval)\n2. because of 1., short network outages will still cause GW port bouncing (if the network outage is shorter than agent_down_time BFD would fail back the port)\n3. if there is an outage/hw failure on the data plane side only (ie NIC dedicated for the data plane) and the admin/oam connection remains active, the agent will never be considered as down -\u003e demoting will not happen -\u003e bouncing will happen when the data plane connection is active again\n\nThis approach would be sufficient for general HW failures/kernel crashes etc. However, before starting the implementation, I\u0027d like to get your comments (and other Neutron maintainers), if possible.\nThanks again for your support!\n\n[1] https://docs.openstack.org/neutron/latest/admin/ovn/l3_scheduler.html#re-schedule-logical-router-port-if-a-chassis-is-removed\n[2] https://bugs.launchpad.net/neutron/+bug/2103521","commit_id":"f25ae40710a9c708e0e7d7d76b92fdec37b5d2e0"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8efec2cb04b28706915a36ec1bc9195f17adbbe","unresolved":true,"context_lines":[{"line_number":361,"context_line":"                      lrp_name)"},{"line_number":362,"context_line":"            return"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        gw_chassis \u003d getattr(lrp, \u0027gateway_chassis\u0027, None)"},{"line_number":365,"context_line":"        if gw_chassis:"},{"line_number":366,"context_line":"            if not any(gc.chassis_name \u003d\u003d crashed_chassis_name"},{"line_number":367,"context_line":"                       for gc in gw_chassis):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5925d7e4_9dfc7c74","line":364,"updated":"2026-07-16 16:17:31.000000000","message":"nit: if you have to respin, could un-indent all the code below as you did above:\n\nif not gw_chassis:\n    LOG.debug(\"BFD failover: LRP %s has no gateway_chassis entries, \"\n              \"skipping\", lrp_name)\n    return","commit_id":"f25ae40710a9c708e0e7d7d76b92fdec37b5d2e0"},{"author":{"_account_id":30534,"name":"Marcin Wilk","email":"marcin.wilk@canonical.com","username":"wilkmar"},"change_message_id":"d5554107803378da334a5cc83364e09061d2be3b","unresolved":true,"context_lines":[{"line_number":361,"context_line":"                      lrp_name)"},{"line_number":362,"context_line":"            return"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        gw_chassis \u003d getattr(lrp, \u0027gateway_chassis\u0027, None)"},{"line_number":365,"context_line":"        if gw_chassis:"},{"line_number":366,"context_line":"            if not any(gc.chassis_name \u003d\u003d crashed_chassis_name"},{"line_number":367,"context_line":"                       for gc in gw_chassis):"}],"source_content_type":"text/x-python","patch_set":4,"id":"0261b460_0f86a2f2","line":364,"in_reply_to":"5925d7e4_9dfc7c74","updated":"2026-07-17 06:53:39.000000000","message":"Acknowledged","commit_id":"f25ae40710a9c708e0e7d7d76b92fdec37b5d2e0"}]}
