)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4a96737c5d77b254119a15fcc2f3799e12bc7ab0","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Yusuf Güngör \u003cyusufyusufyusuf@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-06-26 13:38:25 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix Severe Packet Loss During Live Migration Due to Premature Route Advertisement in Neutron BGP Dynamic Routing"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-bug: #2100752"},{"line_number":10,"context_line":"Change-Id: I310b5511f3068c824bc2d0aedb2b3cebcf8f9401"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fc212be7_f8f512b3","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":112},"updated":"2025-06-27 07:32:02.000000000","message":"nit: please add line breaks to the commit msg header for easy of reading and review","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"e7108f6fb230bd3fd0171d549abdfc27a4e4d499","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Yusuf Güngör \u003cyusufyusufyusuf@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-06-26 13:38:25 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix Severe Packet Loss During Live Migration Due to Premature Route Advertisement in Neutron BGP Dynamic Routing"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-bug: #2100752"},{"line_number":10,"context_line":"Change-Id: I310b5511f3068c824bc2d0aedb2b3cebcf8f9401"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3b91478d_85dab1b8","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":112},"in_reply_to":"fc212be7_f8f512b3","updated":"2025-06-27 08:10:37.000000000","message":"Done","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0211a1bd3a89e0fafb13d6ee8e1d73ff1983fa6d","unresolved":true,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2025-06-27 07:36:33 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix Severe Packet Loss During Live Migration Due to Premature Route"},{"line_number":8,"context_line":"Advertisement in Neutron BGP Dynamic Routing"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Closes-bug: #2100752"},{"line_number":11,"context_line":"Change-Id: I310b5511f3068c824bc2d0aedb2b3cebcf8f9401"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"d2a7d47d_e590e491","line":8,"updated":"2025-07-01 11:04:47.000000000","message":"sorry, the previous advice on this was incomplete. the commit message header should be 50 chars at most, followed by an empty line, followed by a more verbose description of the patch. also use upper case only for the first word in a sentence (and acronyms). finally mentioning the repo name in the commit message seem redundant. something like this might work better:\n\n```\nFix packet loss during live migration with DVR\n\nWhen live migrating an instance while DVR is enabled, the route to the target host would be advertised too early, leading to packet loss.","commit_id":"7217c1c455fa9647320d30e3370dcd955992ed44"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"11cc14f2a2dd215d42e929b75b04ea67857dc982","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2025-06-27 07:36:33 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix Severe Packet Loss During Live Migration Due to Premature Route"},{"line_number":8,"context_line":"Advertisement in Neutron BGP Dynamic Routing"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Closes-bug: #2100752"},{"line_number":11,"context_line":"Change-Id: I310b5511f3068c824bc2d0aedb2b3cebcf8f9401"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"a854c578_ed442f95","line":8,"in_reply_to":"d2a7d47d_e590e491","updated":"2025-07-03 11:34:41.000000000","message":"Done","commit_id":"7217c1c455fa9647320d30e3370dcd955992ed44"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":33197,"name":"Mesut Muhammet Şahin","email":"mmessah@gmail.com"},"change_message_id":"b488640ff3a932c728761d8cda539dde44844485","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"36d83c56_cc65155e","updated":"2025-06-26 15:50:34.000000000","message":"LGTM","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4a96737c5d77b254119a15fcc2f3799e12bc7ab0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"d3ced2e2_3576f0f8","updated":"2025-06-27 07:32:02.000000000","message":"Thanks for your fix, could you please check if you can add some test coverage for it?","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"e7108f6fb230bd3fd0171d549abdfc27a4e4d499","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e13e9d8f_760da0e7","in_reply_to":"36d83c56_cc65155e","updated":"2025-06-27 08:10:37.000000000","message":"Done","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0211a1bd3a89e0fafb13d6ee8e1d73ff1983fa6d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c49c8403_62cf74b4","updated":"2025-07-01 11:04:47.000000000","message":"For me it is not clear how to actually verify this change. Maybe some neutron cores have more knowledge?\n\nVoting -1 only for the commit message and reno formatting.","commit_id":"7217c1c455fa9647320d30e3370dcd955992ed44"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"f29145b7199a20db09c38b890118932cf60f0251","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"154cc0df_3a0beca8","updated":"2025-07-30 13:06:46.000000000","message":"Hi @miguel@mlavalle.com have you initiated a thread in the mailing list about this issue to see if somebody offers help? Thanks.\t\n\nhttps://meetings.opendev.org/irclogs/%23openstack-neutron/%23openstack-neutron.2025-07-22.log.html","commit_id":"850ec74971c532a4199c426adf42890646951b8f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"ffee9a54099f3f46f81c3d50c0cda57a3f31906d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"deb4d3ba_24663ec5","in_reply_to":"154cc0df_3a0beca8","updated":"2025-07-30 21:40:21.000000000","message":"Hi Yusuf,\n\nLets think through what needs to be done to merge this fix. In my opinion:\n\n1) We need a tempest test that performs an instance migration and tests connectivity before and after the migration. This test doesn\u0027t have to replicate the conditions of your environment. All we are trying to do it to test is that after your change, instance migrations can be reliably performed. This test would reside here https://github.com/openstack/neutron-tempest-plugin/blob/351046ec3b82825ac4663cf28e33960c58bb6106/neutron_tempest_plugin/neutron_dynamic_routing/scenario/test_simple_bgp.py. The test can be adapted from https://github.com/openstack/tempest/blob/6158cc5cdc922dfdd67236766f0fdb8b36ff3703/tempest/api/compute/admin/test_live_migration.py#L148 and should be executed in the check and periodic-weekly queues, like this https://zuul.opendev.org/t/openstack/builds?job_name\u003dneutron-tempest-plugin-dynamic-routing\u0026project\u003dopenstack%2Fneutron-dynamic-routing\u0026skip\u003d0\n\n2) Some unit tests for the two methods you are touching with this change\n\nIf the above two requirements are met, I would be willing to +2 this change","commit_id":"850ec74971c532a4199c426adf42890646951b8f"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"03c854d52918646282a3973145d4bc2dd9cc4a83","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"ec2d7ae5_84be7627","in_reply_to":"deb4d3ba_24663ec5","updated":"2025-07-31 08:34:28.000000000","message":"+1 for tempest test with migration","commit_id":"850ec74971c532a4199c426adf42890646951b8f"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"58bea04cf831041d6c8f09ce570ca5e1fecd2267","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c9dfb1f4_c5870cb7","in_reply_to":"ec2d7ae5_84be7627","updated":"2025-08-01 12:24:52.000000000","message":"Hi @miguel@mlavalle.com @katonalala@gmail.com I won\u0027t have time to work on this for a while, so hopefully someone from the community can write these tests.","commit_id":"850ec74971c532a4199c426adf42890646951b8f"}],"neutron_dynamic_routing/db/bgp_db.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4a96737c5d77b254119a15fcc2f3799e12bc7ab0","unresolved":true,"context_lines":[{"line_number":731,"context_line":"            IpAllocation.subnet_id,"},{"line_number":732,"context_line":"            AddressScope.id.label(\u0027address_scope_id\u0027))"},{"line_number":733,"context_line":"        fixed_ip_query \u003d fixed_ip_query.filter("},{"line_number":734,"context_line":"            ML2PortBinding.status \u003d\u003d lib_consts.ACTIVE,"},{"line_number":735,"context_line":"            Port.id \u003d\u003d ML2PortBinding.port_id,"},{"line_number":736,"context_line":"            IpAllocation.port_id \u003d\u003d Port.id,"},{"line_number":737,"context_line":"            Port.device_owner.startswith("}],"source_content_type":"text/x-python","patch_set":4,"id":"53d540b9_42f2bdb7","line":734,"updated":"2025-06-27 07:32:02.000000000","message":"Could you please check if you can add test to cover this change, first I would go for this area: https://opendev.org/openstack/neutron-dynamic-routing/src/branch/master/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py#L1485-L1551","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"e7108f6fb230bd3fd0171d549abdfc27a4e4d499","unresolved":true,"context_lines":[{"line_number":731,"context_line":"            IpAllocation.subnet_id,"},{"line_number":732,"context_line":"            AddressScope.id.label(\u0027address_scope_id\u0027))"},{"line_number":733,"context_line":"        fixed_ip_query \u003d fixed_ip_query.filter("},{"line_number":734,"context_line":"            ML2PortBinding.status \u003d\u003d lib_consts.ACTIVE,"},{"line_number":735,"context_line":"            Port.id \u003d\u003d ML2PortBinding.port_id,"},{"line_number":736,"context_line":"            IpAllocation.port_id \u003d\u003d Port.id,"},{"line_number":737,"context_line":"            Port.device_owner.startswith("}],"source_content_type":"text/x-python","patch_set":4,"id":"92f3aa46_937f88d6","line":734,"in_reply_to":"53d540b9_42f2bdb7","updated":"2025-06-27 08:10:37.000000000","message":"Thanks, i have checked. A new test can be written for this but there is no existing test for other query filters like lib_consts.DEVICE_OWNER_COMPUTE_PREFIX. I think we should not create a new test for this","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"6d09e5949b4a57b9f2d6c5ffe7810e2f1ac7cabb","unresolved":true,"context_lines":[{"line_number":731,"context_line":"            IpAllocation.subnet_id,"},{"line_number":732,"context_line":"            AddressScope.id.label(\u0027address_scope_id\u0027))"},{"line_number":733,"context_line":"        fixed_ip_query \u003d fixed_ip_query.filter("},{"line_number":734,"context_line":"            ML2PortBinding.status \u003d\u003d lib_consts.ACTIVE,"},{"line_number":735,"context_line":"            Port.id \u003d\u003d ML2PortBinding.port_id,"},{"line_number":736,"context_line":"            IpAllocation.port_id \u003d\u003d Port.id,"},{"line_number":737,"context_line":"            Port.device_owner.startswith("}],"source_content_type":"text/x-python","patch_set":4,"id":"0813d2d2_d221ddd1","line":734,"in_reply_to":"72e5e5dc_ca34b711","updated":"2025-07-03 17:35:44.000000000","message":"ok, I agree that implementing such a test doesn\u0027t sound feasible, however I also don\u0027t have either time nor resources to perform such a test myself, so I\u0027ll defer to other reviewers","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0211a1bd3a89e0fafb13d6ee8e1d73ff1983fa6d","unresolved":true,"context_lines":[{"line_number":731,"context_line":"            IpAllocation.subnet_id,"},{"line_number":732,"context_line":"            AddressScope.id.label(\u0027address_scope_id\u0027))"},{"line_number":733,"context_line":"        fixed_ip_query \u003d fixed_ip_query.filter("},{"line_number":734,"context_line":"            ML2PortBinding.status \u003d\u003d lib_consts.ACTIVE,"},{"line_number":735,"context_line":"            Port.id \u003d\u003d ML2PortBinding.port_id,"},{"line_number":736,"context_line":"            IpAllocation.port_id \u003d\u003d Port.id,"},{"line_number":737,"context_line":"            Port.device_owner.startswith("}],"source_content_type":"text/x-python","patch_set":4,"id":"d073f9b4_bf25a2dd","line":734,"in_reply_to":"92f3aa46_937f88d6","updated":"2025-07-01 11:04:47.000000000","message":"Well the problem for me is that I don\u0027t know enough about the port binding data to judge whether this fix is correct, or whether it might lead to regressions in certain situations. a unit test won\u0027t help with that, a full scenario test that actually performs the live migration and verifies the lack of packet loss might. I agree that that is a lot to ask for, when the patch in question looks so tiny, but how else could we be sure that this is actually the right thing to do?","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"11cc14f2a2dd215d42e929b75b04ea67857dc982","unresolved":true,"context_lines":[{"line_number":731,"context_line":"            IpAllocation.subnet_id,"},{"line_number":732,"context_line":"            AddressScope.id.label(\u0027address_scope_id\u0027))"},{"line_number":733,"context_line":"        fixed_ip_query \u003d fixed_ip_query.filter("},{"line_number":734,"context_line":"            ML2PortBinding.status \u003d\u003d lib_consts.ACTIVE,"},{"line_number":735,"context_line":"            Port.id \u003d\u003d ML2PortBinding.port_id,"},{"line_number":736,"context_line":"            IpAllocation.port_id \u003d\u003d Port.id,"},{"line_number":737,"context_line":"            Port.device_owner.startswith("}],"source_content_type":"text/x-python","patch_set":4,"id":"72e5e5dc_ca34b711","line":734,"in_reply_to":"d073f9b4_bf25a2dd","updated":"2025-07-03 11:34:41.000000000","message":"Hi Jens, thank you for giving your valuable time to review this patch and writing comments. \n\nI agree with you about the unit test. \n\nBut a full scenario test also not possible. \n\nBefore patch the problem cannot be repeated on small memory instances or not busy memory instances. Running a scenario test will be:\n - Create a huge memory flavor like 128 gb mem.\n - Create 128 gb memory instance\n - Install the stress package to vm (depends on the instance image)\n - Run a stress test on that instance\n - Live migrate and count the ping loss\n\nI think this kind of test is not feasible.\n\nAlso in our hundreds of tests we have seen that the ping loss might vary from 1 to 4 even patch. The speed of the port unplug-plug between source-destination hosts, bgp announcement speed also affects this.\n\nSo how can we specify the acceptable ping loss for that test?\n\nI mean, the ping loss also depends multiple conditions which makes the test very complicated.\n\nHere the added code is only a new filter when querying the ml2_port_bindings table from database to find the ip addresses to advertise over BGP. \n\nThere exist a record on this table for every port and host match. \n\nWhen live migrating an instance, for the existing port, a duplicate record added to this table with host is migration destination host and status is INACTIVE.\n\nBefore \"ML2PortBinding.status \u003d\u003d lib_consts.ACTIVE\" filter, the code query the table and gets the duplicated port record and advertises the same ip address twice with the incorrect host ip address as next-hop ip. This can be easily seen with \"openstack bgp speaker list advertised routes \u003cbgp-speaker\u003e\" command output.\n\nShould we advertise a port with not ACTIVE status? I think we should not.\n\nYou can test the patch and then be sure it is right thing to do as below 😄\n\n- Create a test instance with huge memory (128 or 256 gb memory is better)\n- Run memory stress test to make migration takes too much time.\n- Watch the ml2_port_bindings table for the port_id of migrating instance. See the new record for the existing port id which INACTIVE state.\n- Watch the \"openstack port show \u003cport_id_of_instance\u003e\" to see the port migrating_to value which indicates the migration is on going.\n- Wathc the \"openstack bgp speaker list advertised routes \u003cbgp-speaker\u003e\" to see the same ip address is advertised twice with incorrect and not ready destination host as next-hop.\n\n\nMake this test with and without patch and it can easily seen that this patch works as expected. You can also ping the instance while migrating.\n\nWe also made hundreds of tests about this patch and have not seen any anomally.","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"}],"neutron_dynamic_routing/services/bgp/bgp_plugin.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4a96737c5d77b254119a15fcc2f3799e12bc7ab0","unresolved":true,"context_lines":[{"line_number":394,"context_line":"        updated_port \u003d payload.latest_state"},{"line_number":395,"context_line":"        if not updated_port.get(\u0027fixed_ips\u0027):"},{"line_number":396,"context_line":"            return"},{"line_number":397,"context_line":"        if \"migrating_to\" in updated_port.get(portbindings.PROFILE):"},{"line_number":398,"context_line":"            return"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        original_host \u003d original_port.get(portbindings.HOST_ID)"}],"source_content_type":"text/x-python","patch_set":4,"id":"6bc906cb_419a4945","line":397,"range":{"start_line":397,"start_character":12,"end_line":397,"end_character":24},"updated":"2025-06-27 07:32:02.000000000","message":"No action: seems we have only one constant like thing for this (https://opendev.org/openstack/neutron/src/branch/master/neutron/common/ovn/constants.py#L61 ), peahps we can have something in neutron-lib later","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"e7108f6fb230bd3fd0171d549abdfc27a4e4d499","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        updated_port \u003d payload.latest_state"},{"line_number":395,"context_line":"        if not updated_port.get(\u0027fixed_ips\u0027):"},{"line_number":396,"context_line":"            return"},{"line_number":397,"context_line":"        if \"migrating_to\" in updated_port.get(portbindings.PROFILE):"},{"line_number":398,"context_line":"            return"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        original_host \u003d original_port.get(portbindings.HOST_ID)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f5e2c90_5cc36d31","line":397,"range":{"start_line":397,"start_character":12,"end_line":397,"end_character":24},"in_reply_to":"6bc906cb_419a4945","updated":"2025-06-27 08:10:37.000000000","message":"Acknowledged","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4a96737c5d77b254119a15fcc2f3799e12bc7ab0","unresolved":true,"context_lines":[{"line_number":396,"context_line":"            return"},{"line_number":397,"context_line":"        if \"migrating_to\" in updated_port.get(portbindings.PROFILE):"},{"line_number":398,"context_line":"            return"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        original_host \u003d original_port.get(portbindings.HOST_ID)"},{"line_number":401,"context_line":"        updated_host \u003d updated_port.get(portbindings.HOST_ID)"},{"line_number":402,"context_line":"        device_owner \u003d updated_port.get(\u0027device_owner\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"2c4f7aca_25c4232c","line":399,"updated":"2025-06-27 07:32:02.000000000","message":"Could you please check if you can unit test for this new condition (https://opendev.org/openstack/neutron-dynamic-routing/src/branch/master/neutron_dynamic_routing/tests/unit/services/bgp/test_bgp_plugin.py)","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"11cc14f2a2dd215d42e929b75b04ea67857dc982","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            return"},{"line_number":397,"context_line":"        if \"migrating_to\" in updated_port.get(portbindings.PROFILE):"},{"line_number":398,"context_line":"            return"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        original_host \u003d original_port.get(portbindings.HOST_ID)"},{"line_number":401,"context_line":"        updated_host \u003d updated_port.get(portbindings.HOST_ID)"},{"line_number":402,"context_line":"        device_owner \u003d updated_port.get(\u0027device_owner\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"cde68f19_c37bd658","line":399,"in_reply_to":"0c6d1e93_232cd6cc","updated":"2025-07-03 11:34:41.000000000","message":"Acknowledged","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"e7108f6fb230bd3fd0171d549abdfc27a4e4d499","unresolved":true,"context_lines":[{"line_number":396,"context_line":"            return"},{"line_number":397,"context_line":"        if \"migrating_to\" in updated_port.get(portbindings.PROFILE):"},{"line_number":398,"context_line":"            return"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        original_host \u003d original_port.get(portbindings.HOST_ID)"},{"line_number":401,"context_line":"        updated_host \u003d updated_port.get(portbindings.HOST_ID)"},{"line_number":402,"context_line":"        device_owner \u003d updated_port.get(\u0027device_owner\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"a3325593_fde7b0e9","line":399,"in_reply_to":"2c4f7aca_25c4232c","updated":"2025-06-27 08:10:37.000000000","message":"there is no existing tests for port_callback function. i think it is not required.","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0211a1bd3a89e0fafb13d6ee8e1d73ff1983fa6d","unresolved":true,"context_lines":[{"line_number":396,"context_line":"            return"},{"line_number":397,"context_line":"        if \"migrating_to\" in updated_port.get(portbindings.PROFILE):"},{"line_number":398,"context_line":"            return"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        original_host \u003d original_port.get(portbindings.HOST_ID)"},{"line_number":401,"context_line":"        updated_host \u003d updated_port.get(portbindings.HOST_ID)"},{"line_number":402,"context_line":"        device_owner \u003d updated_port.get(\u0027device_owner\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"0c6d1e93_232cd6cc","line":399,"in_reply_to":"a3325593_fde7b0e9","updated":"2025-07-01 11:04:47.000000000","message":"the same comment as I made to neutron_dynamic_routing/db/bgp_db.py applies here I think","commit_id":"6f89c00984c6d7c4ead3b76867cdc2bf1c3572b1"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0211a1bd3a89e0fafb13d6ee8e1d73ff1983fa6d","unresolved":true,"context_lines":[{"line_number":394,"context_line":"        updated_port \u003d payload.latest_state"},{"line_number":395,"context_line":"        if not updated_port.get(\u0027fixed_ips\u0027):"},{"line_number":396,"context_line":"            return"},{"line_number":397,"context_line":"        if \"migrating_to\" in updated_port.get(portbindings.PROFILE):"},{"line_number":398,"context_line":"            return"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        original_host \u003d original_port.get(portbindings.HOST_ID)"}],"source_content_type":"text/x-python","patch_set":7,"id":"0f3ad864_0ceb934c","line":397,"updated":"2025-07-01 11:04:47.000000000","message":"```suggestion\n        if \u0027migrating_to\u0027 in updated_port.get(portbindings.PROFILE):\n```\nalso I\u0027m not sure whether the returned value always is a list, maybe this needs an additional check?","commit_id":"7217c1c455fa9647320d30e3370dcd955992ed44"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"11cc14f2a2dd215d42e929b75b04ea67857dc982","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        updated_port \u003d payload.latest_state"},{"line_number":395,"context_line":"        if not updated_port.get(\u0027fixed_ips\u0027):"},{"line_number":396,"context_line":"            return"},{"line_number":397,"context_line":"        if \"migrating_to\" in updated_port.get(portbindings.PROFILE):"},{"line_number":398,"context_line":"            return"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        original_host \u003d original_port.get(portbindings.HOST_ID)"}],"source_content_type":"text/x-python","patch_set":7,"id":"e7a47e08_585525cc","line":397,"in_reply_to":"0f3ad864_0ceb934c","updated":"2025-07-03 11:34:41.000000000","message":"You are right, added checks.","commit_id":"7217c1c455fa9647320d30e3370dcd955992ed44"}],"releasenotes/notes/fix-dvr-long-running-live-migration-issue-a2acf572ca9a8244.yaml":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0211a1bd3a89e0fafb13d6ee8e1d73ff1983fa6d","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes a packet loss issue during live migration when using Neutron\u0027s BGP"},{"line_number":5,"context_line":"    Dynamic Routing with a DVR (Distributed Virtual Routing) setup. The"},{"line_number":6,"context_line":"    `neutron-bgp-dragent` would prematurely advertise a new route to a migrating"},{"line_number":7,"context_line":"    instance\u0027s new location before the instance was fully operational on the"},{"line_number":8,"context_line":"    destination compute node. This race condition forwarded traffic to an"},{"line_number":9,"context_line":"    unready next-hop, causing significant packet loss and service disruptions"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"c09ab6d9_398c099b","line":6,"range":{"start_line":6,"start_character":3,"end_line":6,"end_character":25},"updated":"2025-07-01 11:04:47.000000000","message":"```suggestion\n    ``neutron-bgp-dragent`` would prematurely advertise a new route to a migrating\n```","commit_id":"7217c1c455fa9647320d30e3370dcd955992ed44"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"11cc14f2a2dd215d42e929b75b04ea67857dc982","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes a packet loss issue during live migration when using Neutron\u0027s BGP"},{"line_number":5,"context_line":"    Dynamic Routing with a DVR (Distributed Virtual Routing) setup. The"},{"line_number":6,"context_line":"    `neutron-bgp-dragent` would prematurely advertise a new route to a migrating"},{"line_number":7,"context_line":"    instance\u0027s new location before the instance was fully operational on the"},{"line_number":8,"context_line":"    destination compute node. This race condition forwarded traffic to an"},{"line_number":9,"context_line":"    unready next-hop, causing significant packet loss and service disruptions"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"398893b0_dd56403e","line":6,"range":{"start_line":6,"start_character":3,"end_line":6,"end_character":25},"in_reply_to":"c09ab6d9_398c099b","updated":"2025-07-03 11:34:41.000000000","message":"Done","commit_id":"7217c1c455fa9647320d30e3370dcd955992ed44"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0211a1bd3a89e0fafb13d6ee8e1d73ff1983fa6d","unresolved":true,"context_lines":[{"line_number":10,"context_line":"    for high-availability applications. The fix ensures the BGP route advertisement"},{"line_number":11,"context_line":"    is correctly timed with the instance\u0027s readiness, preventing premature"},{"line_number":12,"context_line":"    next-hop updates."},{"line_number":13,"context_line":"    See bug `2100752 \u003chttps://bugs.launchpad.net/neutron/+bug/2100752\u003e`_."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"1c54edd0_6f2dff2c","line":13,"updated":"2025-07-01 11:04:47.000000000","message":"please add a newline at the end of the file","commit_id":"7217c1c455fa9647320d30e3370dcd955992ed44"},{"author":{"_account_id":36045,"name":"Yusuf Güngör","email":"yusufyusufyusuf@gmail.com"},"change_message_id":"11cc14f2a2dd215d42e929b75b04ea67857dc982","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    for high-availability applications. The fix ensures the BGP route advertisement"},{"line_number":11,"context_line":"    is correctly timed with the instance\u0027s readiness, preventing premature"},{"line_number":12,"context_line":"    next-hop updates."},{"line_number":13,"context_line":"    See bug `2100752 \u003chttps://bugs.launchpad.net/neutron/+bug/2100752\u003e`_."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"39064497_6f861fa7","line":13,"in_reply_to":"1c54edd0_6f2dff2c","updated":"2025-07-03 11:34:41.000000000","message":"Done","commit_id":"7217c1c455fa9647320d30e3370dcd955992ed44"}]}
