)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"112ecadb9cbc05c3c6dfa79b61c521927b1a494f","unresolved":true,"context_lines":[{"line_number":13,"context_line":"self._local_vlan_hints so we can also restore the tunnel bridge openflow"},{"line_number":14,"context_line":"rules correctly."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Without this, we can end-up in a situation where the openflows rules on"},{"line_number":17,"context_line":"tunnel bridge are created too late after the cleanup_stale_flows."},{"line_number":18,"context_line":"If some openflow rules are missing, for ex in table\u003d22, then the"},{"line_number":19,"context_line":"flooding in tunnels would be broken."},{"line_number":20,"context_line":"If flooding is broken, multicast VRRP packets used by keepalived could"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"b0ccacfe_b9fc129c","line":17,"range":{"start_line":16,"start_character":0,"end_line":17,"end_character":65},"updated":"2022-12-12 08:32:51.000000000","message":"You do not really explain how we can endup in this situation?","commit_id":"30f6a0507991f315512c3d8351d49497e59b8473"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"abda4f0b8d5ed762a5ef1f152628bb9a1f3ef890","unresolved":false,"context_lines":[{"line_number":13,"context_line":"self._local_vlan_hints so we can also restore the tunnel bridge openflow"},{"line_number":14,"context_line":"rules correctly."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Without this, we can end-up in a situation where the openflows rules on"},{"line_number":17,"context_line":"tunnel bridge are created too late after the cleanup_stale_flows."},{"line_number":18,"context_line":"If some openflow rules are missing, for ex in table\u003d22, then the"},{"line_number":19,"context_line":"flooding in tunnels would be broken."},{"line_number":20,"context_line":"If flooding is broken, multicast VRRP packets used by keepalived could"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"f5ab020c_e4d72cd5","line":17,"range":{"start_line":16,"start_character":0,"end_line":17,"end_character":65},"in_reply_to":"a9461a41_9d22b14c","updated":"2022-12-12 09:55:12.000000000","message":"++","commit_id":"30f6a0507991f315512c3d8351d49497e59b8473"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b380c745b5e64ca131af29c2e52f9a6659937265","unresolved":false,"context_lines":[{"line_number":13,"context_line":"self._local_vlan_hints so we can also restore the tunnel bridge openflow"},{"line_number":14,"context_line":"rules correctly."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Without this, we can end-up in a situation where the openflows rules on"},{"line_number":17,"context_line":"tunnel bridge are created too late after the cleanup_stale_flows."},{"line_number":18,"context_line":"If some openflow rules are missing, for ex in table\u003d22, then the"},{"line_number":19,"context_line":"flooding in tunnels would be broken."},{"line_number":20,"context_line":"If flooding is broken, multicast VRRP packets used by keepalived could"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"a9461a41_9d22b14c","line":17,"range":{"start_line":16,"start_character":0,"end_line":17,"end_character":65},"in_reply_to":"b0ccacfe_b9fc129c","updated":"2022-12-12 09:20:04.000000000","message":"Done","commit_id":"30f6a0507991f315512c3d8351d49497e59b8473"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1f13ff16cce0f8d40fd8af612a7b0880984dcf89","unresolved":true,"context_lines":[{"line_number":34,"context_line":"Then when the vlan will be configured (in provision_local_vlan), we will"},{"line_number":35,"context_line":"configure the tunnel outputs correctly."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Related-Bug: #1978088"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Change-Id: Ifecd7fa875c930959c4e53672237a4ff74b292c3"},{"line_number":40,"context_line":"Signed-off-by: Arnaud Morin \u003carnaud.morin@ovhcloud.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7c21ceff_669bccb1","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":7},"updated":"2022-12-14 15:49:48.000000000","message":"Isn\u0027t this patch fixing the bug?","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"5016f903269bbc98c891a589dab0e69941997d8e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"Then when the vlan will be configured (in provision_local_vlan), we will"},{"line_number":35,"context_line":"configure the tunnel outputs correctly."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Related-Bug: #1978088"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Change-Id: Ifecd7fa875c930959c4e53672237a4ff74b292c3"},{"line_number":40,"context_line":"Signed-off-by: Arnaud Morin \u003carnaud.morin@ovhcloud.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1f46165f_d00fbfd5","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":7},"in_reply_to":"7c21ceff_669bccb1","updated":"2022-12-15 15:01:21.000000000","message":"Not completely, the bug was also about table\u003d21 (with arp responder) which I am not fixing here.","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9f61936258144921a604afecdb162b21b11a6680","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"16e05058_20477897","updated":"2022-10-05 07:54:16.000000000","message":"Please, check this patch. The OVS agent is throwing an exception: https://paste.opendev.org/show/b1UzuJYu9bLDwwoM75pP/","commit_id":"fa06a40ec014a57b9e50704a54a92e2a785ef5e6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"d4c76da60908c9a82553fcb238463180c1a9b546","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"57ed38a7_58bddede","updated":"2022-10-05 07:46:47.000000000","message":"recheck","commit_id":"fa06a40ec014a57b9e50704a54a92e2a785ef5e6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a6733205c2523052169e897bfe84b7b312c05817","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"04dab644_7daeecf0","updated":"2022-10-12 01:39:55.000000000","message":"Cloud you add a fullstack test case to verify flood flows are added after ovs-agent restart, similar cases can be found here: https://github.com/openstack/neutron/blob/master/neutron/tests/fullstack/test_connectivity.py#L183\n\nSo the test case workflow can be:\n1. start neutron-server\n2. start 3 fullstack test-ovs-agents\n3. create fake-VM on each agents\n4. restart one agent\n5. mock all agents\u0027 function ``add_fdb_flow`` to skip the neutron-server side notifications\n6. verify if the flood flows are added","commit_id":"d105134fae03a559fcda663da00041e7f1e90147"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f421ce403b74c4418e6d4451d7db9c59a12cda44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3bc9c1cb_3fdae056","updated":"2022-10-12 01:36:38.000000000","message":"How about add a fullstack test case for agent restart to verify if the flooding flows was added as excepted, similar cases can be found here:\n\n","commit_id":"d105134fae03a559fcda663da00041e7f1e90147"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"250fd71101fa0357d3ca541d260b639e59fcf37d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"202963ef_eac29047","in_reply_to":"04dab644_7daeecf0","updated":"2022-10-18 14:52:33.000000000","message":"I\u0027ll try to work on that part","commit_id":"d105134fae03a559fcda663da00041e7f1e90147"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"27dfe29e7af67058525d41d9fcba9f33634c362b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2af55756_0ec53ff7","in_reply_to":"202963ef_eac29047","updated":"2022-12-06 17:29:26.000000000","message":"I did almost all of this in the next patchset (that I will fixup into this one later).\nthe only missing piece is the mock for add_fdb_flow.\nI did try multiple things but I can\u0027t figure out how to effectively mock this during my tests.\nThe other mocks that I found in fullstack are global mocks, not related to only one test.\nDo you have any hint on how to achieve this?","commit_id":"d105134fae03a559fcda663da00041e7f1e90147"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"047ec308c47384dda541f79508e55ddfaed3f047","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"49fc606c_1c9357fb","in_reply_to":"2af55756_0ec53ff7","updated":"2022-12-07 14:45:44.000000000","message":"It seems we can mock the ovs_neutron_agent in neutron/tests/fullstack/agents/ovs_agent.py, but it will be a global permanent mock during the whole test.\n\nI only want to mock in the middle of the run.","commit_id":"d105134fae03a559fcda663da00041e7f1e90147"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"6eebd700afbcdbe1426ec52b4e906cb42706d556","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4d20fed2_7bf204c6","in_reply_to":"49fc606c_1c9357fb","updated":"2022-12-08 13:35:35.000000000","message":"Done","commit_id":"d105134fae03a559fcda663da00041e7f1e90147"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2ff189e3805567e9f43d890b3ddc46b504ad43a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"583c8c2e_652e337e","updated":"2022-12-07 08:35:31.000000000","message":"Thanks, a couple of comments principally related to tests.","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"6eebd700afbcdbe1426ec52b4e906cb42706d556","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"562d32d1_79f2fef4","updated":"2022-12-08 13:35:35.000000000","message":"I did wrote unit tests for all changes as requested.\nThe fullstack test is in the next patchset in the relation chain","commit_id":"ba8013bf6b6855752d31f7de24154acb09f5e146"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"112ecadb9cbc05c3c6dfa79b61c521927b1a494f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"2318fe80_87d95f92","updated":"2022-12-12 08:32:51.000000000","message":"Some details are missing regarding the situation in commit message. But I feel like proactively doing this add could have benefit. Thank you","commit_id":"30f6a0507991f315512c3d8351d49497e59b8473"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b380c745b5e64ca131af29c2e52f9a6659937265","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"805e7d75_1f7725a5","in_reply_to":"2318fe80_87d95f92","updated":"2022-12-12 09:20:04.000000000","message":"done, I also merged back the fullstack test in this commit.","commit_id":"30f6a0507991f315512c3d8351d49497e59b8473"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8401aebdd65e9e37bdc1b8a2a9d5e816372fbb9d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"0ad5cfb9_747d4f7e","updated":"2022-12-14 15:50:55.000000000","message":"Apart from those comments, the fix looks valid.","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"372a7daccd4436da67bd42cb425fdee990f7f230","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"1618ce57_b00c29e7","updated":"2023-01-03 16:48:57.000000000","message":"This will fail again, sorry for noise","commit_id":"fd16f88ef85dabe4a4a8239026b1ed32e14e2d57"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ed853401dd67da098302f4d140ddc8b41af371e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"556ca948_9860c3c1","updated":"2023-03-22 02:59:43.000000000","message":"Can this cover such situation:\nThis ovs-agent is down for a bit long time, during the downtime, some port/network changed/added/deleted. Then the ovs-agent is started, some local_vlans are allocated to new networks. But since this patch loads stale flows\u0027 local_vlan to the LVM, so this may cause some inconsistent configrations for flows. So, could this situation happen?","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"92e8efdac6323283347a628861f387cac64f6a1b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"fcc4a930_c2d950a5","updated":"2023-01-06 08:50:20.000000000","message":"Can we just simply skip the flows deletion for table\u003d21 and table\u003d22 on br-tun? Add a config option for such behavior when some clouds want to do so.","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"6d853a9631df15e41b37f05ebd9e8d887f187a88","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7ae43c86_cb72bdb1","updated":"2023-03-21 16:26:05.000000000","message":"I know that this patch sounds a small thing for most deployments, but for large-scale deployments, this is a huge improvement.\n\nI just dont want this is to forgot or closed.","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"6a44c472f8b9cd885d4ad96b70a0b0c7af163bc5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"46b4974a_8395d7bb","in_reply_to":"556ca948_9860c3c1","updated":"2023-05-04 08:50:29.000000000","message":"I dont think it can since if the agent is down, no local_vlans can be allocated to new networks.\nAlso, the first thing the neutron agent is doing after starting is to use the hints to keep allocation for already existing networks.\nIf some of them were deleted during that period, they are going to be removed by the agent and from the hints.","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"c7840a505bbffab88a90b2c12b58acee193d33a1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"6dde9fcc_9243acf2","in_reply_to":"fcc4a930_c2d950a5","updated":"2023-03-10 15:30:08.000000000","message":"This patch does not prevent a next patch with config option IIHO.\nI\u0027d like this one to be merged first as it solve a current issue at large scale.","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"f4736719d9dad663d336fd05524975ae1c232e55","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"d458e6ec_b8ef7047","updated":"2023-05-22 10:33:03.000000000","message":"recheck neutron-ovs-tempest-dvr-ha-multinode-full","commit_id":"c1d620b494b1aae30fc0b4fe772c574d55894752"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8a6febec0309f52de744e66cf4a37fae400560ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"bfa23b99_39d021ee","updated":"2024-03-13 03:03:14.000000000","message":"Sorry I\u0027m so slow to respond, didn\u0027t notice this one.","commit_id":"1ee663beb88b890aac207ca3e455f2fb5b55f6e0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a289c0f5f9826c78d18ffafabf8b7aeb0a4624fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"01cade32_1f031513","updated":"2024-04-08 11:40:00.000000000","message":"nit: I am thinking on release-note for this, to highlight for end users that it is fixed in Dalmatian","commit_id":"4e82e1dd626337bb32aa6d1997d9d7111307700b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b91bb12fd74c64f75ceb5153da76a696ae0680b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"0b12deb5_0731224c","updated":"2024-07-09 11:29:41.000000000","message":"Thanks","commit_id":"d7190100d379c97bffd565e5bd602fb5360cfb71"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"8d9af48585e628f920ff429900a403d2d880e409","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"3a005d24_b3233133","updated":"2024-10-04 16:43:04.000000000","message":"recheck","commit_id":"644bebda41d6d091bc168cf02615f4f8e14857da"},{"author":{"_account_id":16707,"name":"Mohankumar","email":"nmohankumar1011@gmail.com","username":"mohankumar_n"},"change_message_id":"6dc4122b06a0239b48fcde41ac701026396a4076","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"fe01a75a_32c953c0","updated":"2025-10-08 15:46:19.000000000","message":"LGTM","commit_id":"56747f29adc749dd5095218166bd77ef39511b84"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_tun.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ce01598052e99e4439923c80324528a2dbd258a9","unresolved":true,"context_lines":[{"line_number":182,"context_line":"            # os_ken offer us a match method to compare flows"},{"line_number":183,"context_line":"            matches \u003d dict(flow.match.items())"},{"line_number":184,"context_line":"            if matches.get(\u0027vlan_vid\u0027):"},{"line_number":185,"context_line":"                if matches[\u0027vlan_vid\u0027] \u0026 0x0fff \u003d\u003d vlan:"},{"line_number":186,"context_line":"                    # extract output actions from this flow"},{"line_number":187,"context_line":"                    for inst in flow.instructions:"},{"line_number":188,"context_line":"                        for action in inst.actions:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1d3d9_3aaa81f9","line":185,"updated":"2022-10-11 14:44:32.000000000","message":"nit: can maybe those 2 \"if\" be merged into one:\n\n    if matches.get(\u0027vlan_vid\u0027) and matches[\u0027vlan_vid] \u0026 0x0fff \u003d\u003d vlan:","commit_id":"d105134fae03a559fcda663da00041e7f1e90147"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"d2600c3ec3f7099d2ae815e93153dc53e030dcd4","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            # os_ken offer us a match method to compare flows"},{"line_number":183,"context_line":"            matches \u003d dict(flow.match.items())"},{"line_number":184,"context_line":"            if matches.get(\u0027vlan_vid\u0027):"},{"line_number":185,"context_line":"                if matches[\u0027vlan_vid\u0027] \u0026 0x0fff \u003d\u003d vlan:"},{"line_number":186,"context_line":"                    # extract output actions from this flow"},{"line_number":187,"context_line":"                    for inst in flow.instructions:"},{"line_number":188,"context_line":"                        for action in inst.actions:"}],"source_content_type":"text/x-python","patch_set":2,"id":"969c6509_6cb445e2","line":185,"in_reply_to":"5fc1d3d9_3aaa81f9","updated":"2022-10-18 14:52:12.000000000","message":"Done","commit_id":"d105134fae03a559fcda663da00041e7f1e90147"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2ff189e3805567e9f43d890b3ddc46b504ad43a2","unresolved":true,"context_lines":[{"line_number":173,"context_line":"        match \u003d self._flood_to_tun_match(ofp, ofpp, vlan)"},{"line_number":174,"context_line":"        self.uninstall_flows(table_id\u003dconstants.FLOOD_TO_TUN, match\u003dmatch)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def get_flood_to_tun_ofports(self, vlan):"},{"line_number":177,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":178,"context_line":"        ofports \u003d set()"},{"line_number":179,"context_line":"        # NOTE(amorin) walk through flows on br-tun"}],"source_content_type":"text/x-python","patch_set":3,"id":"c3e31790_73fcc6f9","line":176,"updated":"2022-12-07 08:35:31.000000000","message":"Tests are missing for this right?","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"6eebd700afbcdbe1426ec52b4e906cb42706d556","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        match \u003d self._flood_to_tun_match(ofp, ofpp, vlan)"},{"line_number":174,"context_line":"        self.uninstall_flows(table_id\u003dconstants.FLOOD_TO_TUN, match\u003dmatch)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def get_flood_to_tun_ofports(self, vlan):"},{"line_number":177,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":178,"context_line":"        ofports \u003d set()"},{"line_number":179,"context_line":"        # NOTE(amorin) walk through flows on br-tun"}],"source_content_type":"text/x-python","patch_set":3,"id":"1bc973e6_22208cd5","line":176,"in_reply_to":"bf77792b_0674cf78","updated":"2022-12-08 13:35:35.000000000","message":"Done","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"0663808b33614cd6d8d03fffdde6fc5883dc1cde","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        match \u003d self._flood_to_tun_match(ofp, ofpp, vlan)"},{"line_number":174,"context_line":"        self.uninstall_flows(table_id\u003dconstants.FLOOD_TO_TUN, match\u003dmatch)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def get_flood_to_tun_ofports(self, vlan):"},{"line_number":177,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":178,"context_line":"        ofports \u003d set()"},{"line_number":179,"context_line":"        # NOTE(amorin) walk through flows on br-tun"}],"source_content_type":"text/x-python","patch_set":3,"id":"2fef626b_fc0fabfc","line":176,"in_reply_to":"c3e31790_73fcc6f9","updated":"2022-12-07 14:43:34.000000000","message":"I am trying to build a fullstack test for this, but I dont know how to mock the add_fdb_flow","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"0663808b33614cd6d8d03fffdde6fc5883dc1cde","unresolved":true,"context_lines":[{"line_number":173,"context_line":"        match \u003d self._flood_to_tun_match(ofp, ofpp, vlan)"},{"line_number":174,"context_line":"        self.uninstall_flows(table_id\u003dconstants.FLOOD_TO_TUN, match\u003dmatch)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def get_flood_to_tun_ofports(self, vlan):"},{"line_number":177,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":178,"context_line":"        ofports \u003d set()"},{"line_number":179,"context_line":"        # NOTE(amorin) walk through flows on br-tun"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf77792b_0674cf78","line":176,"in_reply_to":"c3e31790_73fcc6f9","updated":"2022-12-07 14:43:34.000000000","message":"I am trying to build a fullstack test for this, but I dont know how to mock the add_fdb_flow","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2ff189e3805567e9f43d890b3ddc46b504ad43a2","unresolved":true,"context_lines":[{"line_number":176,"context_line":"    def get_flood_to_tun_ofports(self, vlan):"},{"line_number":177,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":178,"context_line":"        ofports \u003d set()"},{"line_number":179,"context_line":"        # NOTE(amorin) walk through flows on br-tun"},{"line_number":180,"context_line":"        # and extract the output actions if vlan matches"},{"line_number":181,"context_line":"        for flow in self.dump_flows(constants.FLOOD_TO_TUN):"},{"line_number":182,"context_line":"            # os_ken offer us a match method to compare flows"}],"source_content_type":"text/x-python","patch_set":3,"id":"4b50538c_7397a75c","line":179,"updated":"2022-12-07 08:35:31.000000000","message":"s/NOTE(amorin)//","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"0663808b33614cd6d8d03fffdde6fc5883dc1cde","unresolved":true,"context_lines":[{"line_number":176,"context_line":"    def get_flood_to_tun_ofports(self, vlan):"},{"line_number":177,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":178,"context_line":"        ofports \u003d set()"},{"line_number":179,"context_line":"        # NOTE(amorin) walk through flows on br-tun"},{"line_number":180,"context_line":"        # and extract the output actions if vlan matches"},{"line_number":181,"context_line":"        for flow in self.dump_flows(constants.FLOOD_TO_TUN):"},{"line_number":182,"context_line":"            # os_ken offer us a match method to compare flows"}],"source_content_type":"text/x-python","patch_set":3,"id":"0be4fec3_ee0499c9","line":179,"in_reply_to":"4b50538c_7397a75c","updated":"2022-12-07 14:43:34.000000000","message":"Ack","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"0663808b33614cd6d8d03fffdde6fc5883dc1cde","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    def get_flood_to_tun_ofports(self, vlan):"},{"line_number":177,"context_line":"        (_dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":178,"context_line":"        ofports \u003d set()"},{"line_number":179,"context_line":"        # NOTE(amorin) walk through flows on br-tun"},{"line_number":180,"context_line":"        # and extract the output actions if vlan matches"},{"line_number":181,"context_line":"        for flow in self.dump_flows(constants.FLOOD_TO_TUN):"},{"line_number":182,"context_line":"            # os_ken offer us a match method to compare flows"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f63fca7_c0d90b60","line":179,"in_reply_to":"4b50538c_7397a75c","updated":"2022-12-07 14:43:34.000000000","message":"Ack","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1f13ff16cce0f8d40fd8af612a7b0880984dcf89","unresolved":true,"context_lines":[{"line_number":178,"context_line":"        ofports \u003d set()"},{"line_number":179,"context_line":"        # Walk through flows on br-tun and extract the output actions if"},{"line_number":180,"context_line":"        # vlan matches"},{"line_number":181,"context_line":"        for flow in self.dump_flows(constants.FLOOD_TO_TUN):"},{"line_number":182,"context_line":"            # os_ken offer us a match method to compare flows"},{"line_number":183,"context_line":"            matches \u003d dict(flow.match.items())"},{"line_number":184,"context_line":"            if matches.get(\u0027vlan_vid\u0027) and \\"}],"source_content_type":"text/x-python","patch_set":9,"id":"ea6f2e33_2b384a64","line":181,"range":{"start_line":181,"start_character":36,"end_line":181,"end_character":58},"updated":"2022-12-14 15:49:48.000000000","message":"nit: use the kwarg name\n\n  tablle_id\u003dconstants.FLOOD_TO_TUN","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"5016f903269bbc98c891a589dab0e69941997d8e","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        ofports \u003d set()"},{"line_number":179,"context_line":"        # Walk through flows on br-tun and extract the output actions if"},{"line_number":180,"context_line":"        # vlan matches"},{"line_number":181,"context_line":"        for flow in self.dump_flows(constants.FLOOD_TO_TUN):"},{"line_number":182,"context_line":"            # os_ken offer us a match method to compare flows"},{"line_number":183,"context_line":"            matches \u003d dict(flow.match.items())"},{"line_number":184,"context_line":"            if matches.get(\u0027vlan_vid\u0027) and \\"}],"source_content_type":"text/x-python","patch_set":9,"id":"7c39b52f_10916a60","line":181,"range":{"start_line":181,"start_character":36,"end_line":181,"end_character":58},"in_reply_to":"ea6f2e33_2b384a64","updated":"2022-12-15 15:01:21.000000000","message":"Done","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1f13ff16cce0f8d40fd8af612a7b0880984dcf89","unresolved":true,"context_lines":[{"line_number":182,"context_line":"            # os_ken offer us a match method to compare flows"},{"line_number":183,"context_line":"            matches \u003d dict(flow.match.items())"},{"line_number":184,"context_line":"            if matches.get(\u0027vlan_vid\u0027) and \\"},{"line_number":185,"context_line":"                    matches[\u0027vlan_vid\u0027] \u0026 0x0fff \u003d\u003d vlan:"},{"line_number":186,"context_line":"                # extract output actions from this flow"},{"line_number":187,"context_line":"                for inst in flow.instructions:"},{"line_number":188,"context_line":"                    for action in inst.actions:"}],"source_content_type":"text/x-python","patch_set":9,"id":"0daa7a05_f777c079","line":185,"range":{"start_line":185,"start_character":20,"end_line":185,"end_character":56},"updated":"2022-12-14 15:49:48.000000000","message":"We usually do the opposite (check the OVS code):\n matches[\u0027vlan_vid\u0027] \u003d\u003d vlan | ofp.OFPVID_PRESENT","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"5016f903269bbc98c891a589dab0e69941997d8e","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            # os_ken offer us a match method to compare flows"},{"line_number":183,"context_line":"            matches \u003d dict(flow.match.items())"},{"line_number":184,"context_line":"            if matches.get(\u0027vlan_vid\u0027) and \\"},{"line_number":185,"context_line":"                    matches[\u0027vlan_vid\u0027] \u0026 0x0fff \u003d\u003d vlan:"},{"line_number":186,"context_line":"                # extract output actions from this flow"},{"line_number":187,"context_line":"                for inst in flow.instructions:"},{"line_number":188,"context_line":"                    for action in inst.actions:"}],"source_content_type":"text/x-python","patch_set":9,"id":"f22a67ea_c6a51fcd","line":185,"range":{"start_line":185,"start_character":20,"end_line":185,"end_character":56},"in_reply_to":"0daa7a05_f777c079","updated":"2022-12-15 15:01:21.000000000","message":"Done","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c7b8844d7b87e8871363e834fbab61debb1c393d","unresolved":true,"context_lines":[{"line_number":181,"context_line":"        for flow in self.dump_flows(table_id\u003dconstants.FLOOD_TO_TUN):"},{"line_number":182,"context_line":"            # os_ken offer us a match method to compare flows"},{"line_number":183,"context_line":"            matches \u003d dict(flow.match.items())"},{"line_number":184,"context_line":"            if matches.get(\u0027vlan_vid\u0027) and \\"},{"line_number":185,"context_line":"                    matches[\u0027vlan_vid\u0027] \u003d\u003d vlan | ofp.OFPVID_PRESENT:"},{"line_number":186,"context_line":"                # extract output actions from this flow"},{"line_number":187,"context_line":"                for inst in flow.instructions:"}],"source_content_type":"text/x-python","patch_set":16,"id":"1c2a5c6a_327124de","line":184,"range":{"start_line":184,"start_character":43,"end_line":184,"end_character":44},"updated":"2023-03-21 19:12:48.000000000","message":"nit: in the neutron tree we try to use () to line wrap and not \\","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"6a44c472f8b9cd885d4ad96b70a0b0c7af163bc5","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        for flow in self.dump_flows(table_id\u003dconstants.FLOOD_TO_TUN):"},{"line_number":182,"context_line":"            # os_ken offer us a match method to compare flows"},{"line_number":183,"context_line":"            matches \u003d dict(flow.match.items())"},{"line_number":184,"context_line":"            if matches.get(\u0027vlan_vid\u0027) and \\"},{"line_number":185,"context_line":"                    matches[\u0027vlan_vid\u0027] \u003d\u003d vlan | ofp.OFPVID_PRESENT:"},{"line_number":186,"context_line":"                # extract output actions from this flow"},{"line_number":187,"context_line":"                for inst in flow.instructions:"}],"source_content_type":"text/x-python","patch_set":16,"id":"2531e9b0_3cfb3607","line":184,"range":{"start_line":184,"start_character":43,"end_line":184,"end_character":44},"in_reply_to":"1c2a5c6a_327124de","updated":"2023-05-04 08:50:29.000000000","message":"Done","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ce01598052e99e4439923c80324528a2dbd258a9","unresolved":true,"context_lines":[{"line_number":482,"context_line":"                    # See LP #1978088"},{"line_number":483,"context_line":"                    tun_ofports \u003d self.tun_br.get_flood_to_tun_ofports("},{"line_number":484,"context_line":"                        local_vlan)"},{"line_number":485,"context_line":"                    self._local_vlan_hints[key] \u003d local_vlan"},{"line_number":486,"context_line":"                    self._local_vlan_hints[key] \u003d \\"},{"line_number":487,"context_line":"                        {\u0027vlan\u0027: local_vlan, \u0027tun_ofports\u0027: tun_ofports}"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"581f1003_39b1a704","line":485,"updated":"2022-10-11 14:44:32.000000000","message":"why this line is still here? Shouldn\u0027t it be removed now?","commit_id":"d105134fae03a559fcda663da00041e7f1e90147"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"27dfe29e7af67058525d41d9fcba9f33634c362b","unresolved":false,"context_lines":[{"line_number":482,"context_line":"                    # See LP #1978088"},{"line_number":483,"context_line":"                    tun_ofports \u003d self.tun_br.get_flood_to_tun_ofports("},{"line_number":484,"context_line":"                        local_vlan)"},{"line_number":485,"context_line":"                    self._local_vlan_hints[key] \u003d local_vlan"},{"line_number":486,"context_line":"                    self._local_vlan_hints[key] \u003d \\"},{"line_number":487,"context_line":"                        {\u0027vlan\u0027: local_vlan, \u0027tun_ofports\u0027: tun_ofports}"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"e272f277_7ac6865a","line":485,"in_reply_to":"1791ef7e_72ca9a2e","updated":"2022-12-06 17:29:26.000000000","message":"Done","commit_id":"d105134fae03a559fcda663da00041e7f1e90147"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"d2600c3ec3f7099d2ae815e93153dc53e030dcd4","unresolved":true,"context_lines":[{"line_number":482,"context_line":"                    # See LP #1978088"},{"line_number":483,"context_line":"                    tun_ofports \u003d self.tun_br.get_flood_to_tun_ofports("},{"line_number":484,"context_line":"                        local_vlan)"},{"line_number":485,"context_line":"                    self._local_vlan_hints[key] \u003d local_vlan"},{"line_number":486,"context_line":"                    self._local_vlan_hints[key] \u003d \\"},{"line_number":487,"context_line":"                        {\u0027vlan\u0027: local_vlan, \u0027tun_ofports\u0027: tun_ofports}"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1791ef7e_72ca9a2e","line":485,"in_reply_to":"581f1003_39b1a704","updated":"2022-10-18 14:52:12.000000000","message":"damn, right","commit_id":"d105134fae03a559fcda663da00041e7f1e90147"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2ff189e3805567e9f43d890b3ddc46b504ad43a2","unresolved":true,"context_lines":[{"line_number":478,"context_line":"                if (key not in self._local_vlan_hints and"},{"line_number":479,"context_line":"                        local_vlan !\u003d ovs_const.DEAD_VLAN_TAG):"},{"line_number":480,"context_line":"                    self.available_local_vlans.remove(local_vlan)"},{"line_number":481,"context_line":"                    # NOTE(amorin): restore the br-tun flood output ports"},{"line_number":482,"context_line":"                    # See LP #1978088"},{"line_number":483,"context_line":"                    tun_ofports \u003d self.tun_br.get_flood_to_tun_ofports("},{"line_number":484,"context_line":"                        local_vlan)"}],"source_content_type":"text/x-python","patch_set":3,"id":"d072cc10_e227578a","line":481,"updated":"2022-12-07 08:35:31.000000000","message":"Good point to refer the bug but I don\u0027t think you have to put \"NOTE(amorin)\". A simple comment should be enough as it is not expected any action from you.","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"0663808b33614cd6d8d03fffdde6fc5883dc1cde","unresolved":false,"context_lines":[{"line_number":478,"context_line":"                if (key not in self._local_vlan_hints and"},{"line_number":479,"context_line":"                        local_vlan !\u003d ovs_const.DEAD_VLAN_TAG):"},{"line_number":480,"context_line":"                    self.available_local_vlans.remove(local_vlan)"},{"line_number":481,"context_line":"                    # NOTE(amorin): restore the br-tun flood output ports"},{"line_number":482,"context_line":"                    # See LP #1978088"},{"line_number":483,"context_line":"                    tun_ofports \u003d self.tun_br.get_flood_to_tun_ofports("},{"line_number":484,"context_line":"                        local_vlan)"}],"source_content_type":"text/x-python","patch_set":3,"id":"af987903_b504aab5","line":481,"in_reply_to":"d072cc10_e227578a","updated":"2022-12-07 14:43:34.000000000","message":"Ack","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2ff189e3805567e9f43d890b3ddc46b504ad43a2","unresolved":true,"context_lines":[{"line_number":482,"context_line":"                    # See LP #1978088"},{"line_number":483,"context_line":"                    tun_ofports \u003d self.tun_br.get_flood_to_tun_ofports("},{"line_number":484,"context_line":"                        local_vlan)"},{"line_number":485,"context_line":"                    self._local_vlan_hints[key] \u003d \\"},{"line_number":486,"context_line":"                        {\u0027vlan\u0027: local_vlan, \u0027tun_ofports\u0027: tun_ofports}"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _dispose_local_vlan_hints(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"d54afbaa_03b0a437","line":485,"updated":"2022-12-07 08:35:31.000000000","message":"I think we do prefer avoid using backslash.","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"0663808b33614cd6d8d03fffdde6fc5883dc1cde","unresolved":false,"context_lines":[{"line_number":482,"context_line":"                    # See LP #1978088"},{"line_number":483,"context_line":"                    tun_ofports \u003d self.tun_br.get_flood_to_tun_ofports("},{"line_number":484,"context_line":"                        local_vlan)"},{"line_number":485,"context_line":"                    self._local_vlan_hints[key] \u003d \\"},{"line_number":486,"context_line":"                        {\u0027vlan\u0027: local_vlan, \u0027tun_ofports\u0027: tun_ofports}"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _dispose_local_vlan_hints(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"74e45d61_e159c119","line":485,"in_reply_to":"d54afbaa_03b0a437","updated":"2022-12-07 14:43:34.000000000","message":"Ack","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"112ecadb9cbc05c3c6dfa79b61c521927b1a494f","unresolved":true,"context_lines":[{"line_number":998,"context_line":"        try:"},{"line_number":999,"context_line":"            lvm \u003d self.vlan_manager.get(net_uuid, segmentation_id)"},{"line_number":1000,"context_line":"        except vlanmanager.MappingNotFound:"},{"line_number":1001,"context_line":"            # TODO(sahid): This local_vlan_hints should have its own"},{"line_number":1002,"context_line":"            # datastructure and model to be manipulated."},{"line_number":1003,"context_line":"            key \u003d \"%s/%s\" % (net_uuid, segmentation_id)"},{"line_number":1004,"context_line":"            data \u003d self._local_vlan_hints.pop(key,"},{"line_number":1005,"context_line":"                {\u0027vlan\u0027: None, \u0027tun_ofports\u0027: set()})"}],"source_content_type":"text/x-python","patch_set":7,"id":"0cd2ca39_164527e6","line":1002,"range":{"start_line":1001,"start_character":12,"end_line":1002,"end_character":56},"updated":"2022-12-12 08:32:51.000000000","message":"It could have been the time to address this ;-)","commit_id":"30f6a0507991f315512c3d8351d49497e59b8473"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b380c745b5e64ca131af29c2e52f9a6659937265","unresolved":false,"context_lines":[{"line_number":998,"context_line":"        try:"},{"line_number":999,"context_line":"            lvm \u003d self.vlan_manager.get(net_uuid, segmentation_id)"},{"line_number":1000,"context_line":"        except vlanmanager.MappingNotFound:"},{"line_number":1001,"context_line":"            # TODO(sahid): This local_vlan_hints should have its own"},{"line_number":1002,"context_line":"            # datastructure and model to be manipulated."},{"line_number":1003,"context_line":"            key \u003d \"%s/%s\" % (net_uuid, segmentation_id)"},{"line_number":1004,"context_line":"            data \u003d self._local_vlan_hints.pop(key,"},{"line_number":1005,"context_line":"                {\u0027vlan\u0027: None, \u0027tun_ofports\u0027: set()})"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ced29c1_0a8ebd07","line":1002,"range":{"start_line":1001,"start_character":12,"end_line":1002,"end_character":56},"in_reply_to":"0cd2ca39_164527e6","updated":"2022-12-12 09:20:04.000000000","message":"Ack, I think this should be done in another patchset","commit_id":"30f6a0507991f315512c3d8351d49497e59b8473"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"abda4f0b8d5ed762a5ef1f152628bb9a1f3ef890","unresolved":false,"context_lines":[{"line_number":998,"context_line":"        try:"},{"line_number":999,"context_line":"            lvm \u003d self.vlan_manager.get(net_uuid, segmentation_id)"},{"line_number":1000,"context_line":"        except vlanmanager.MappingNotFound:"},{"line_number":1001,"context_line":"            # TODO(sahid): This local_vlan_hints should have its own"},{"line_number":1002,"context_line":"            # datastructure and model to be manipulated."},{"line_number":1003,"context_line":"            key \u003d \"%s/%s\" % (net_uuid, segmentation_id)"},{"line_number":1004,"context_line":"            data \u003d self._local_vlan_hints.pop(key,"},{"line_number":1005,"context_line":"                {\u0027vlan\u0027: None, \u0027tun_ofports\u0027: set()})"}],"source_content_type":"text/x-python","patch_set":7,"id":"b353ad49_88d60d88","line":1002,"range":{"start_line":1001,"start_character":12,"end_line":1002,"end_character":56},"in_reply_to":"3ced29c1_0a8ebd07","updated":"2022-12-12 09:55:12.000000000","message":"Totally.","commit_id":"30f6a0507991f315512c3d8351d49497e59b8473"}],"neutron/plugins/ml2/drivers/openvswitch/agent/vlanmanager.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2ff189e3805567e9f43d890b3ddc46b504ad43a2","unresolved":true,"context_lines":[{"line_number":93,"context_line":"        for item in self.mapping.items():"},{"line_number":94,"context_line":"            yield item"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def add(self, net_id, vlan, network_type, physical_network,"},{"line_number":97,"context_line":"            segmentation_id, vif_ports\u003dNone, tun_ofports\u003dset()):"},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            if self.get(net_id, segmentation_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"abd83292_46e72fb8","line":96,"updated":"2022-12-07 08:35:31.000000000","message":"Any chance that you add test?","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"0da83f3ed91a82deca18ff5b69044255a39a2658","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        for item in self.mapping.items():"},{"line_number":94,"context_line":"            yield item"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def add(self, net_id, vlan, network_type, physical_network,"},{"line_number":97,"context_line":"            segmentation_id, vif_ports\u003dNone, tun_ofports\u003dset()):"},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            if self.get(net_id, segmentation_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3c889f0d_396c84d2","line":96,"in_reply_to":"0550c92b_e62e501f","updated":"2022-12-08 15:21:39.000000000","message":"Done","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"862aacc59ba5a0fd0305a643e8f3671c49581fa4","unresolved":true,"context_lines":[{"line_number":93,"context_line":"        for item in self.mapping.items():"},{"line_number":94,"context_line":"            yield item"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def add(self, net_id, vlan, network_type, physical_network,"},{"line_number":97,"context_line":"            segmentation_id, vif_ports\u003dNone, tun_ofports\u003dset()):"},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            if self.get(net_id, segmentation_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"78e88e00_813f8860","line":96,"in_reply_to":"596f58c1_228816c4","updated":"2022-12-08 07:36:51.000000000","message":"No, please use test assertions as well","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"6eebd700afbcdbe1426ec52b4e906cb42706d556","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        for item in self.mapping.items():"},{"line_number":94,"context_line":"            yield item"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def add(self, net_id, vlan, network_type, physical_network,"},{"line_number":97,"context_line":"            segmentation_id, vif_ports\u003dNone, tun_ofports\u003dset()):"},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            if self.get(net_id, segmentation_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f13b894_bc4f1023","line":96,"in_reply_to":"78e88e00_813f8860","updated":"2022-12-08 13:35:35.000000000","message":"Done","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"84c0444f846e10e41e3cff565be2e3d4adc6154a","unresolved":true,"context_lines":[{"line_number":93,"context_line":"        for item in self.mapping.items():"},{"line_number":94,"context_line":"            yield item"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def add(self, net_id, vlan, network_type, physical_network,"},{"line_number":97,"context_line":"            segmentation_id, vif_ports\u003dNone, tun_ofports\u003dset()):"},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            if self.get(net_id, segmentation_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"0550c92b_e62e501f","line":96,"in_reply_to":"7f13b894_bc4f1023","updated":"2022-12-08 14:22:07.000000000","message":"My mistake, I should have been more specific. We have specific test cases for vlanmanger:\n\n https://github.com/openstack/neutron/blob/master/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_vlanmanager.py\n\nIf you could add an assertion which confirms that setting parameter tun_ofports will be reflected to the vlanmapping stored, that would be great.\n\nThanks","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"0663808b33614cd6d8d03fffdde6fc5883dc1cde","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        for item in self.mapping.items():"},{"line_number":94,"context_line":"            yield item"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def add(self, net_id, vlan, network_type, physical_network,"},{"line_number":97,"context_line":"            segmentation_id, vif_ports\u003dNone, tun_ofports\u003dset()):"},{"line_number":98,"context_line":"        try:"},{"line_number":99,"context_line":"            if self.get(net_id, segmentation_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"596f58c1_228816c4","line":96,"in_reply_to":"abd83292_46e72fb8","updated":"2022-12-07 14:43:34.000000000","message":"I was thinking the the fullstack test would be enough","commit_id":"077437ea58233311eed5a5872b5b0a77aa61ab84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b9662ebb7f6838208d764777aa7147cf1a8fa4e5","unresolved":true,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class LocalVLANMapping(object):"},{"line_number":43,"context_line":"    def __init__(self, vlan, network_type, physical_network, segmentation_id,"},{"line_number":44,"context_line":"                 vif_ports\u003dNone, tun_ofports\u003dset()):"},{"line_number":45,"context_line":"        self.vlan \u003d vlan"},{"line_number":46,"context_line":"        self.network_type \u003d network_type"},{"line_number":47,"context_line":"        self.physical_network \u003d physical_network"}],"source_content_type":"text/x-python","patch_set":19,"id":"3eb5f63e_3bb2e609","line":44,"updated":"2024-04-04 23:13:04.000000000","message":"From what I can tell, the way to fix this is have the default above \u003dNone, then put this as the first line:\n\ntun_ofports \u003d tun_ofports or set()\n\nSame below","commit_id":"4e82e1dd626337bb32aa6d1997d9d7111307700b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a289c0f5f9826c78d18ffafabf8b7aeb0a4624fd","unresolved":true,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class LocalVLANMapping(object):"},{"line_number":43,"context_line":"    def __init__(self, vlan, network_type, physical_network, segmentation_id,"},{"line_number":44,"context_line":"                 vif_ports\u003dNone, tun_ofports\u003dset()):"},{"line_number":45,"context_line":"        self.vlan \u003d vlan"},{"line_number":46,"context_line":"        self.network_type \u003d network_type"},{"line_number":47,"context_line":"        self.physical_network \u003d physical_network"}],"source_content_type":"text/x-python","patch_set":19,"id":"952eb7a4_436a69fa","line":44,"in_reply_to":"3eb5f63e_3bb2e609","updated":"2024-04-08 11:40:00.000000000","message":"+1","commit_id":"4e82e1dd626337bb32aa6d1997d9d7111307700b"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"bc0b2e720045695b90ddc9e7403f19044cbad9f2","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class LocalVLANMapping(object):"},{"line_number":43,"context_line":"    def __init__(self, vlan, network_type, physical_network, segmentation_id,"},{"line_number":44,"context_line":"                 vif_ports\u003dNone, tun_ofports\u003dset()):"},{"line_number":45,"context_line":"        self.vlan \u003d vlan"},{"line_number":46,"context_line":"        self.network_type \u003d network_type"},{"line_number":47,"context_line":"        self.physical_network \u003d physical_network"}],"source_content_type":"text/x-python","patch_set":19,"id":"4d0ac4d7_8a4d2f84","line":44,"in_reply_to":"952eb7a4_436a69fa","updated":"2024-05-30 15:34:08.000000000","message":"Done","commit_id":"4e82e1dd626337bb32aa6d1997d9d7111307700b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"72755ee730518338fd23eb2b5affd5ec1d25fa7b","unresolved":true,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def add(self, net_id, vlan, network_type, physical_network,"},{"line_number":97,"context_line":"            segmentation_id, vif_ports\u003dNone, tun_ofports\u003dNone):"},{"line_number":98,"context_line":"        tun_ofports \u003d tun_ofports or set()"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            if self.get(net_id, segmentation_id):"},{"line_number":101,"context_line":"                raise MappingAlreadyExists("}],"source_content_type":"text/x-python","patch_set":20,"id":"7cbd7027_33f364a3","line":98,"updated":"2024-08-07 19:17:09.000000000","message":"I don\u0027t think this needs to be done, we can just pass it as-is to the class as we do with vif_ports.","commit_id":"d7190100d379c97bffd565e5bd602fb5360cfb71"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b3d10254233ba734499a00278a4b6df382ed1fe9","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def add(self, net_id, vlan, network_type, physical_network,"},{"line_number":97,"context_line":"            segmentation_id, vif_ports\u003dNone, tun_ofports\u003dNone):"},{"line_number":98,"context_line":"        tun_ofports \u003d tun_ofports or set()"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            if self.get(net_id, segmentation_id):"},{"line_number":101,"context_line":"                raise MappingAlreadyExists("}],"source_content_type":"text/x-python","patch_set":20,"id":"5b894fd7_93df87aa","line":98,"in_reply_to":"7cbd7027_33f364a3","updated":"2024-08-16 14:45:12.000000000","message":"Done","commit_id":"d7190100d379c97bffd565e5bd602fb5360cfb71"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"cc2e7a17d342ee1ef1586f3e2557e59cfeed464e","unresolved":true,"context_lines":[{"line_number":98,"context_line":"                raise MappingAlreadyExists("},{"line_number":99,"context_line":"                    net_id\u003dnet_id, seg_id\u003dsegmentation_id)"},{"line_number":100,"context_line":"        except MappingNotFound:"},{"line_number":101,"context_line":"            pass"},{"line_number":102,"context_line":"        self.mapping[net_id][segmentation_id] \u003d LocalVLANMapping("},{"line_number":103,"context_line":"            vlan, network_type, physical_network, segmentation_id, vif_ports,"},{"line_number":104,"context_line":"            tun_ofports)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def get_net_and_segmentation_id(self, vif_id, net_uuid\u003dNone):"},{"line_number":107,"context_line":"        # TODO(sahid): We should improve algorithm if net_uuid is passed."}],"source_content_type":"text/x-python","patch_set":23,"id":"bc61c24c_99321aad","line":104,"range":{"start_line":101,"start_character":16,"end_line":104,"end_character":24},"updated":"2025-09-15 12:01:50.000000000","message":"As I see (just quickly checked the failures in the tests) you have to check where the VlanManager is used in ovs_neutron_agent.py","commit_id":"10bc33faaddb8b574204a9b7626ae32412d25d26"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"3b299a82bffdaefd96c17a529dbd4bd46436c945","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                raise MappingAlreadyExists("},{"line_number":99,"context_line":"                    net_id\u003dnet_id, seg_id\u003dsegmentation_id)"},{"line_number":100,"context_line":"        except MappingNotFound:"},{"line_number":101,"context_line":"            pass"},{"line_number":102,"context_line":"        self.mapping[net_id][segmentation_id] \u003d LocalVLANMapping("},{"line_number":103,"context_line":"            vlan, network_type, physical_network, segmentation_id, vif_ports,"},{"line_number":104,"context_line":"            tun_ofports)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def get_net_and_segmentation_id(self, vif_id, net_uuid\u003dNone):"},{"line_number":107,"context_line":"        # TODO(sahid): We should improve algorithm if net_uuid is passed."}],"source_content_type":"text/x-python","patch_set":23,"id":"41a2c994_932c69bf","line":104,"range":{"start_line":101,"start_character":16,"end_line":104,"end_character":24},"in_reply_to":"bc61c24c_99321aad","updated":"2025-09-19 19:56:39.000000000","message":"Done","commit_id":"10bc33faaddb8b574204a9b7626ae32412d25d26"}],"neutron/tests/common/agents/l2_extensions.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1f13ff16cce0f8d40fd8af612a7b0880984dcf89","unresolved":true,"context_lines":[{"line_number":175,"context_line":"                return int(after_mod.partition(\u0027,\u0027)[0])"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"def extract_tun_ofports(flows):"},{"line_number":179,"context_line":"    if flows:"},{"line_number":180,"context_line":"        flow_list \u003d flows.splitlines()"},{"line_number":181,"context_line":"        for flow in flow_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"45ee27d0_955afe46","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":16},"updated":"2022-12-14 15:49:48.000000000","message":"Why \"tun\"? Aren\u0027t those methods valid for other bridges OF rules?","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"5016f903269bbc98c891a589dab0e69941997d8e","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                return int(after_mod.partition(\u0027,\u0027)[0])"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"def extract_tun_ofports(flows):"},{"line_number":179,"context_line":"    if flows:"},{"line_number":180,"context_line":"        flow_list \u003d flows.splitlines()"},{"line_number":181,"context_line":"        for flow in flow_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"cb84cc80_d10af0b2","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":16},"in_reply_to":"45ee27d0_955afe46","updated":"2022-12-15 15:01:21.000000000","message":"Done","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1f13ff16cce0f8d40fd8af612a7b0880984dcf89","unresolved":true,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"def extract_br_tun_cookie(bridge):"},{"line_number":192,"context_line":"    flows \u003d bridge.dump_flows_for(table\u003d\u002722\u0027)"},{"line_number":193,"context_line":"    if flows:"},{"line_number":194,"context_line":"        flow_list \u003d flows.splitlines()"},{"line_number":195,"context_line":"        for flow in flow_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"d4b72594_f9c9297f","line":192,"range":{"start_line":192,"start_character":19,"end_line":192,"end_character":33},"updated":"2022-12-14 15:49:48.000000000","message":"Please, do not use the ovs-ofctl method, use the native one:\n  dump_flows(table_id\u003dNone)","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"dc3e28516eed44900fb4066465c6c7cd74a71dd8","unresolved":true,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"def extract_br_tun_cookie(bridge):"},{"line_number":192,"context_line":"    flows \u003d bridge.dump_flows_for(table\u003d\u002722\u0027)"},{"line_number":193,"context_line":"    if flows:"},{"line_number":194,"context_line":"        flow_list \u003d flows.splitlines()"},{"line_number":195,"context_line":"        for flow in flow_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"583f96b6_79169d44","line":192,"range":{"start_line":192,"start_character":41,"end_line":192,"end_character":43},"updated":"2022-12-14 15:15:17.000000000","message":"Should this use ovs_constants.FLOOD_TO_TUN ?","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"13a3140d5a7edead202a629dcbadaa5261aba3c0","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"def extract_br_tun_cookie(bridge):"},{"line_number":192,"context_line":"    flows \u003d bridge.dump_flows_for(table\u003d\u002722\u0027)"},{"line_number":193,"context_line":"    if flows:"},{"line_number":194,"context_line":"        flow_list \u003d flows.splitlines()"},{"line_number":195,"context_line":"        for flow in flow_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7d21731f_94ae67cf","line":192,"range":{"start_line":192,"start_character":19,"end_line":192,"end_character":33},"in_reply_to":"2ed07fef_4c4c99ee","updated":"2022-12-16 14:59:59.000000000","message":"I switched to dump_flows_for_table, which seems to be perfect fit for this.","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"5016f903269bbc98c891a589dab0e69941997d8e","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"def extract_br_tun_cookie(bridge):"},{"line_number":192,"context_line":"    flows \u003d bridge.dump_flows_for(table\u003d\u002722\u0027)"},{"line_number":193,"context_line":"    if flows:"},{"line_number":194,"context_line":"        flow_list \u003d flows.splitlines()"},{"line_number":195,"context_line":"        for flow in flow_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"deb3ab9c_2679053a","line":192,"range":{"start_line":192,"start_character":41,"end_line":192,"end_character":43},"in_reply_to":"583f96b6_79169d44","updated":"2022-12-15 15:01:21.000000000","message":"Done","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"5016f903269bbc98c891a589dab0e69941997d8e","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"def extract_br_tun_cookie(bridge):"},{"line_number":192,"context_line":"    flows \u003d bridge.dump_flows_for(table\u003d\u002722\u0027)"},{"line_number":193,"context_line":"    if flows:"},{"line_number":194,"context_line":"        flow_list \u003d flows.splitlines()"},{"line_number":195,"context_line":"        for flow in flow_list:"}],"source_content_type":"text/x-python","patch_set":9,"id":"2ed07fef_4c4c99ee","line":192,"range":{"start_line":192,"start_character":19,"end_line":192,"end_character":33},"in_reply_to":"d4b72594_f9c9297f","updated":"2022-12-15 15:01:21.000000000","message":"There is not dump_flows on class OVSBridge.\nMost of other functions in this l2_extensions are using dump_flows_for.","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"}],"neutron/tests/fullstack/agents/ovs_agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"dc3e28516eed44900fb4066465c6c7cd74a71dd8","unresolved":true,"context_lines":[{"line_number":58,"context_line":"    original_add_fdb_flow \u003d ovs_neutron_agent.OVSNeutronAgent.add_fdb_flow"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def new_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport):"},{"line_number":61,"context_line":"        if Path(\u0027/tmp/mock_add_fdb_flow\u0027).is_file():"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        original_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"d1f55c90_d984e9fe","line":61,"updated":"2022-12-14 15:15:17.000000000","message":"Is it possible to use the fixtures library for this? Using a global common location could cause issues I would think. Unless there is a better way...","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"34ee94532b88b7cd53d63ea0e31bd1edf3df55b0","unresolved":true,"context_lines":[{"line_number":58,"context_line":"    original_add_fdb_flow \u003d ovs_neutron_agent.OVSNeutronAgent.add_fdb_flow"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def new_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport):"},{"line_number":61,"context_line":"        if Path(\u0027/tmp/mock_add_fdb_flow\u0027).is_file():"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        original_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"b2a977fc_27a670e9","line":61,"in_reply_to":"6385768d_0d49851e","updated":"2022-12-16 10:05:13.000000000","message":"Right, from the OVS agent you cant access to the testing env.\n\nIn any case, some recommendations:\n1) For the file (that should be always in /tmp/, as is now), use a constant (used in  [1] too.\n2) Do not use a class directly, import the module (pathlib) and instantiate the variable from there: var \u003d pathlib.Path(CONSTANT)\n3) In [1], the unlink operation should be done inside a cleanup method (always checking that the file has been created)\n\n[1]https://review.opendev.org/c/openstack/neutron/+/860270/11/neutron/tests/fullstack/test_restore_flow.py#56","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"5016f903269bbc98c891a589dab0e69941997d8e","unresolved":true,"context_lines":[{"line_number":58,"context_line":"    original_add_fdb_flow \u003d ovs_neutron_agent.OVSNeutronAgent.add_fdb_flow"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def new_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport):"},{"line_number":61,"context_line":"        if Path(\u0027/tmp/mock_add_fdb_flow\u0027).is_file():"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        original_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ea46d65f_785dbf74","line":61,"in_reply_to":"8fa2cd0a_abceb09d","updated":"2022-12-15 15:01:21.000000000","message":"Can you show me how to achieve that?\nThe problem is that the mocking here is done way before we enter the agent code.\nI cant use useFixture() as I am not in the same processes","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"0d1f3fff5018b573def578c0441d6cc7cbb40b7c","unresolved":true,"context_lines":[{"line_number":58,"context_line":"    original_add_fdb_flow \u003d ovs_neutron_agent.OVSNeutronAgent.add_fdb_flow"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def new_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport):"},{"line_number":61,"context_line":"        if Path(\u0027/tmp/mock_add_fdb_flow\u0027).is_file():"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        original_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"6385768d_0d49851e","line":61,"in_reply_to":"9314a508_e3e533ce","updated":"2022-12-16 09:53:50.000000000","message":"Hum, the issue is that when we are in this monkeypatch function, we do not have access to the environment, or I dont know how to retrieve it.\n\nHere is the the code flow used by the fullstack test:\n\nThe test is starting at:\nclass TestRestoreFlow\nThis is creating an \"env \u003d environment.Environment\" in setUp()\nWhich is then creating 3 hosts (in this test case).\nThen calling \"def setup_host_with_ovs_agent\" for each host.\nAnd each host is creating a self.ovs_agent fixture using \"process.OVSAgentFixture\".\nAnd this is finally executing ovs_agent.py (in ./neutron/tests/fullstack/resources/process.py line 210).\n\n\nThis last step is forking a new process. And this is where I am stuck, I dont know how to give this process information to enable the mocking of add_fdb_flow.\n\n\nHope this flow will help us find a good solution.\n\nOr maybe I am totally wrong in the process of testing this?","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"13a3140d5a7edead202a629dcbadaa5261aba3c0","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    original_add_fdb_flow \u003d ovs_neutron_agent.OVSNeutronAgent.add_fdb_flow"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def new_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport):"},{"line_number":61,"context_line":"        if Path(\u0027/tmp/mock_add_fdb_flow\u0027).is_file():"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        original_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"500bc30f_c2981b24","line":61,"in_reply_to":"b2a977fc_27a670e9","updated":"2022-12-16 14:59:59.000000000","message":"1 - the file is in tmp\n2 - introducing fullstack/constants.py\n3 - importing pathlib instead of Path\n4 - cleanUp added, with check that the file is created","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1f13ff16cce0f8d40fd8af612a7b0880984dcf89","unresolved":true,"context_lines":[{"line_number":58,"context_line":"    original_add_fdb_flow \u003d ovs_neutron_agent.OVSNeutronAgent.add_fdb_flow"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def new_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport):"},{"line_number":61,"context_line":"        if Path(\u0027/tmp/mock_add_fdb_flow\u0027).is_file():"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        original_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"8fa2cd0a_abceb09d","line":61,"in_reply_to":"d1f55c90_d984e9fe","updated":"2022-12-14 15:49:48.000000000","message":"Agree, something similar to TempDir","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2996803086f95cb94b296fe5a306fd6d1857df99","unresolved":true,"context_lines":[{"line_number":58,"context_line":"    original_add_fdb_flow \u003d ovs_neutron_agent.OVSNeutronAgent.add_fdb_flow"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def new_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport):"},{"line_number":61,"context_line":"        if Path(\u0027/tmp/mock_add_fdb_flow\u0027).is_file():"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        original_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9314a508_e3e533ce","line":61,"in_reply_to":"ea46d65f_785dbf74","updated":"2022-12-15 15:10:39.000000000","message":"Just brainstorming, but would think doing something in the environment setup to create a temp dir or file, that way it should be available in both places, right?","commit_id":"9c324afb5087c4f05e7e0f1de757c2d7364201c6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ed853401dd67da098302f4d140ddc8b41af371e1","unresolved":true,"context_lines":[{"line_number":30,"context_line":"from neutron.tests.fullstack import constants as fs_constants"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from oslo_log import log as logging"},{"line_number":34,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3febfbf6_1087ab34","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":35},"updated":"2023-03-22 02:59:43.000000000","message":"This should go to line 21.","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"6a44c472f8b9cd885d4ad96b70a0b0c7af163bc5","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from neutron.tests.fullstack import constants as fs_constants"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from oslo_log import log as logging"},{"line_number":34,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"a259602b_4d523c80","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":35},"in_reply_to":"3febfbf6_1087ab34","updated":"2023-05-04 08:50:29.000000000","message":"I dont even think this is useful, I was using it for debug purpose.\n\nThis is now removed","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c7b8844d7b87e8871363e834fbab61debb1c393d","unresolved":true,"context_lines":[{"line_number":59,"context_line":"    original_add_fdb_flow \u003d ovs_neutron_agent.OVSNeutronAgent.add_fdb_flow"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def new_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport):"},{"line_number":62,"context_line":"        if pathlib.Path(fs_constants.MOCK_FDB_TEMP_FILE).is_file():"},{"line_number":63,"context_line":"            return"},{"line_number":64,"context_line":"        original_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport)"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"cbf41d9b_e20d3d77","line":62,"updated":"2023-03-21 19:12:48.000000000","message":"I\u0027d rather not introduce another library dependency, we already use tempfile, see https://review.opendev.org/c/openstack/neutron/+/877140 as an example, other examples in-tree like ../../resources/config.py","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"c9435abe9ce18035ffaa7050e923e8edafc504f4","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    original_add_fdb_flow \u003d ovs_neutron_agent.OVSNeutronAgent.add_fdb_flow"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def new_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport):"},{"line_number":62,"context_line":"        if pathlib.Path(fs_constants.MOCK_FDB_TEMP_FILE).is_file():"},{"line_number":63,"context_line":"            return"},{"line_number":64,"context_line":"        original_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport)"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"0f86c88f_3020681f","line":62,"in_reply_to":"19a7252b_51f8c86d","updated":"2024-03-20 15:49:37.000000000","message":"Done","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8a6febec0309f52de744e66cf4a37fae400560ad","unresolved":true,"context_lines":[{"line_number":59,"context_line":"    original_add_fdb_flow \u003d ovs_neutron_agent.OVSNeutronAgent.add_fdb_flow"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def new_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport):"},{"line_number":62,"context_line":"        if pathlib.Path(fs_constants.MOCK_FDB_TEMP_FILE).is_file():"},{"line_number":63,"context_line":"            return"},{"line_number":64,"context_line":"        original_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport)"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"19a7252b_51f8c86d","line":62,"in_reply_to":"79395417_fd74bce9","updated":"2024-03-13 03:03:14.000000000","message":"I would just use os.path.exists() just since we don\u0027t use pathlib anywhere","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"6a44c472f8b9cd885d4ad96b70a0b0c7af163bc5","unresolved":true,"context_lines":[{"line_number":59,"context_line":"    original_add_fdb_flow \u003d ovs_neutron_agent.OVSNeutronAgent.add_fdb_flow"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def new_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport):"},{"line_number":62,"context_line":"        if pathlib.Path(fs_constants.MOCK_FDB_TEMP_FILE).is_file():"},{"line_number":63,"context_line":"            return"},{"line_number":64,"context_line":"        original_add_fdb_flow(self, br, port_info, remote_ip, lvm, ofport)"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"79395417_fd74bce9","line":62,"in_reply_to":"cbf41d9b_e20d3d77","updated":"2023-05-04 08:50:29.000000000","message":"Hello,\nI can use tempfile as requested to create the file if it seems better to you, but anyway I need the check the existence of this file.\nI can do it using os or pathlib, which are both part of python tree anyway.\nWhat is your recommendation regarding this?","commit_id":"a13f14e13be51e5fa2b33097290526473c4c412f"}],"neutron/tests/fullstack/resources/environment.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"cc2e7a17d342ee1ef1586f3e2557e59cfeed464e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"a7b226df_bb5483e3","updated":"2025-09-15 12:01:50.000000000","message":"nit: we disabled fullstack tests","commit_id":"10bc33faaddb8b574204a9b7626ae32412d25d26"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"3b299a82bffdaefd96c17a529dbd4bd46436c945","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"e3e6d1f9_3e90f926","in_reply_to":"a7b226df_bb5483e3","updated":"2025-09-19 19:56:39.000000000","message":"Acknowledged","commit_id":"10bc33faaddb8b574204a9b7626ae32412d25d26"}],"neutron/tests/fullstack/test_restore_flow.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a53e3216051447ad3a01f4db8cf884c55f7854e7","unresolved":true,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Now check br-tun openflow rules."},{"line_number":82,"context_line":"        # Some flows with new cookie are supposed to be there."},{"line_number":83,"context_line":"        l2_extensions.wait_for_br_tun_flow_added(host.br_tun, {2, 3})"}],"source_content_type":"text/x-python","patch_set":13,"id":"9b605e3d_210ef179","line":83,"range":{"start_line":83,"start_character":62,"end_line":83,"end_character":68},"updated":"2022-12-19 17:24:06.000000000","message":"nit: that could work for this test but it is better to compare with a value retrieved from the initial state, not a hardcoded value\n\nnit2: shouldn\u0027t you retrieve the flows in table\u003d22 with action output?","commit_id":"8528ba105191e89ca8b0359fe3cee53565f22c8b"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"d97815c09b52398a7ee2f6ec6c1113098ca06b13","unresolved":true,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Now check br-tun openflow rules."},{"line_number":82,"context_line":"        # Some flows with new cookie are supposed to be there."},{"line_number":83,"context_line":"        l2_extensions.wait_for_br_tun_flow_added(host.br_tun, {2, 3})"}],"source_content_type":"text/x-python","patch_set":13,"id":"af59a01d_4b2cfeb0","line":83,"range":{"start_line":83,"start_character":62,"end_line":83,"end_character":68},"in_reply_to":"9b605e3d_210ef179","updated":"2023-01-03 13:42:19.000000000","message":"About the hardcoded values, that sounds better, will do it.\n\nAbout the flows in table 22 with action output, this is the purpose of l2_extensions.wait_for_br_tun_flow_added, which is then using extract_ofports (with output filtering)","commit_id":"8528ba105191e89ca8b0359fe3cee53565f22c8b"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"2e6bbb66741afca4f31ee9ea8fc763b7dfe8d871","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Now check br-tun openflow rules."},{"line_number":82,"context_line":"        # Some flows with new cookie are supposed to be there."},{"line_number":83,"context_line":"        l2_extensions.wait_for_br_tun_flow_added(host.br_tun, {2, 3})"}],"source_content_type":"text/x-python","patch_set":13,"id":"6ae6bdf3_7bb9d097","line":83,"range":{"start_line":83,"start_character":62,"end_line":83,"end_character":68},"in_reply_to":"af59a01d_4b2cfeb0","updated":"2023-01-03 13:53:12.000000000","message":"Done","commit_id":"8528ba105191e89ca8b0359fe3cee53565f22c8b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a289c0f5f9826c78d18ffafabf8b7aeb0a4624fd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":19,"id":"db1523a3_c0e835be","updated":"2024-04-08 11:40:00.000000000","message":"+1 for higher level test","commit_id":"4e82e1dd626337bb32aa6d1997d9d7111307700b"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"bc0b2e720045695b90ddc9e7403f19044cbad9f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"a090924d_9ba6711b","in_reply_to":"db1523a3_c0e835be","updated":"2024-05-30 15:34:08.000000000","message":"What do you mean? Should I do higher level tests or is the fullstack test already high enough?\nActually I don\u0027t believe there is any other higher test framework available?","commit_id":"4e82e1dd626337bb32aa6d1997d9d7111307700b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"75f526bc588dd98b38eda0f915ddf981e4470d34","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"4e3baa07_d9300d39","updated":"2025-09-15 12:03:28.000000000","message":"as fullstack tests are disabled, could you please check if you can implement this test in the functional test suite?","commit_id":"10bc33faaddb8b574204a9b7626ae32412d25d26"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"3b299a82bffdaefd96c17a529dbd4bd46436c945","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"a886eed7_c9347d57","in_reply_to":"4e3baa07_d9300d39","updated":"2025-09-19 19:56:39.000000000","message":"I will take a look at  that, thank you","commit_id":"10bc33faaddb8b574204a9b7626ae32412d25d26"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"0befd9e510784e47aa3db0f64ec57a93d17ad5df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"71813368_f4bc445d","in_reply_to":"a886eed7_c9347d57","updated":"2025-09-26 13:11:19.000000000","message":"I decided to remove the fullstack test as it\u0027s not relevant anymore.\nI don\u0027t believe we can reproduce the test in functional.\nI think units are enough","commit_id":"10bc33faaddb8b574204a9b7626ae32412d25d26"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/openflow/native/test_br_tun.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"bbda6e0b9341f317beed3b53fb6fe487cacd7216","unresolved":true,"context_lines":[{"line_number":429,"context_line":"            def __init__(self, actions):"},{"line_number":430,"context_line":"                self.actions \u003d actions"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        class FakeAction:"},{"line_number":433,"context_line":"            def __init__(self, port):"},{"line_number":434,"context_line":"                self.port \u003d port"},{"line_number":435,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"40894e95_473fa163","line":432,"updated":"2025-10-07 17:50:16.000000000","message":"I did not see this class being used","commit_id":"56747f29adc749dd5095218166bd77ef39511b84"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"64262a89f2c3844e4df693087b4b0e5a29ff06b4","unresolved":false,"context_lines":[{"line_number":429,"context_line":"            def __init__(self, actions):"},{"line_number":430,"context_line":"                self.actions \u003d actions"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        class FakeAction:"},{"line_number":433,"context_line":"            def __init__(self, port):"},{"line_number":434,"context_line":"                self.port \u003d port"},{"line_number":435,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"897d0244_ae15e2c9","line":432,"in_reply_to":"40894e95_473fa163","updated":"2025-10-10 12:51:39.000000000","message":"Done","commit_id":"56747f29adc749dd5095218166bd77ef39511b84"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"72755ee730518338fd23eb2b5affd5ec1d25fa7b","unresolved":true,"context_lines":[{"line_number":280,"context_line":"            self.assertNotIn(tag, available_vlan)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def _test_restore_local_vlan_maps(self, tag, segmentation_id\u003d\u00271\u0027,"},{"line_number":283,"context_line":"            tun_of_ports\u003dset()):"},{"line_number":284,"context_line":"        port \u003d mock.Mock()"},{"line_number":285,"context_line":"        port.port_name \u003d \u0027fake_port\u0027"},{"line_number":286,"context_line":"        net_uuid \u003d \u0027fake_network_id\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"c805a1e9_77da409e","line":283,"range":{"start_line":283,"start_character":12,"end_line":283,"end_character":24},"updated":"2024-08-07 19:17:09.000000000","message":"I didn\u0027t see any tests below pass this, and should probably default to None, then first line be:\n\ntun_of_ports \u003d tun_of_ports or set()","commit_id":"d7190100d379c97bffd565e5bd602fb5360cfb71"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b3d10254233ba734499a00278a4b6df382ed1fe9","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            self.assertNotIn(tag, available_vlan)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def _test_restore_local_vlan_maps(self, tag, segmentation_id\u003d\u00271\u0027,"},{"line_number":283,"context_line":"            tun_of_ports\u003dset()):"},{"line_number":284,"context_line":"        port \u003d mock.Mock()"},{"line_number":285,"context_line":"        port.port_name \u003d \u0027fake_port\u0027"},{"line_number":286,"context_line":"        net_uuid \u003d \u0027fake_network_id\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"e69ec27f_45ac8b15","line":283,"range":{"start_line":283,"start_character":12,"end_line":283,"end_character":24},"in_reply_to":"c805a1e9_77da409e","updated":"2024-08-16 14:45:12.000000000","message":"Done","commit_id":"d7190100d379c97bffd565e5bd602fb5360cfb71"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"72755ee730518338fd23eb2b5affd5ec1d25fa7b","unresolved":true,"context_lines":[{"line_number":344,"context_line":"        self._test_restore_local_vlan_maps(2, segmentation_id\u003d\u0027None\u0027)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def test_restore_local_vlan_map_tun_of_ports(self):"},{"line_number":347,"context_line":"        self._test_restore_local_vlan_maps(2, {2, 3})"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def test_check_agent_configurations_for_dvr_raises(self):"},{"line_number":350,"context_line":"        self.agent.enable_distributed_routing \u003d True"}],"source_content_type":"text/x-python","patch_set":20,"id":"9bca9ee2_addc4098","line":347,"range":{"start_line":347,"start_character":46,"end_line":347,"end_character":52},"updated":"2024-08-07 19:17:09.000000000","message":"Is this being used as tun_of_ports? If so should use tun_of_ports\u003d{2, 3}","commit_id":"d7190100d379c97bffd565e5bd602fb5360cfb71"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b3d10254233ba734499a00278a4b6df382ed1fe9","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        self._test_restore_local_vlan_maps(2, segmentation_id\u003d\u0027None\u0027)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def test_restore_local_vlan_map_tun_of_ports(self):"},{"line_number":347,"context_line":"        self._test_restore_local_vlan_maps(2, {2, 3})"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def test_check_agent_configurations_for_dvr_raises(self):"},{"line_number":350,"context_line":"        self.agent.enable_distributed_routing \u003d True"}],"source_content_type":"text/x-python","patch_set":20,"id":"185c1c9a_9c3f9e07","line":347,"range":{"start_line":347,"start_character":46,"end_line":347,"end_character":52},"in_reply_to":"9bca9ee2_addc4098","updated":"2024-08-16 14:45:12.000000000","message":"Done","commit_id":"d7190100d379c97bffd565e5bd602fb5360cfb71"}],"releasenotes/notes/restore-tun-openflow-10f146c1d775ab94.yaml":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b91bb12fd74c64f75ceb5153da76a696ae0680b7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":20,"id":"168f15b7_f45fba3c","line":7,"updated":"2024-07-09 11:29:41.000000000","message":"nit: reference is missing to the bug: https://launchpad.net/bugs/1978088","commit_id":"d7190100d379c97bffd565e5bd602fb5360cfb71"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"b3d10254233ba734499a00278a4b6df382ed1fe9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"4c99b50b_19f87f1d","line":7,"in_reply_to":"168f15b7_f45fba3c","updated":"2024-08-16 14:45:12.000000000","message":"Done","commit_id":"d7190100d379c97bffd565e5bd602fb5360cfb71"}]}
