)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"49aa360c5f4f143df3e88e2487ba1fde183ae1cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5d0d34a8_672ba1f3","updated":"2023-05-30 13:25:26.000000000","message":"Fix FTs","commit_id":"6d95bf2df3b31b4e0317225df4ea2b44beb5717d"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"a1abf250e8329921d12dc070b7155bd230994a2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"4d9113f8_ace6b2ef","updated":"2023-06-01 15:54:27.000000000","message":"lgtm, thanks for solving this!","commit_id":"342fd5d7ef535c1e6e2b5f1265b82dbc15676f22"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6ccd59bf66175a87e7e634fb6a21d6880712fa81","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"cc6d23ad_d6fb60af","updated":"2023-06-02 07:53:40.000000000","message":"recheck functional","commit_id":"342fd5d7ef535c1e6e2b5f1265b82dbc15676f22"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4526a55c8db0e0d8d36ee1eb179e3c1496e7eac2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"29012c5e_43315945","updated":"2023-06-01 12:53:41.000000000","message":"recheck neutron-ovn-rally-task","commit_id":"342fd5d7ef535c1e6e2b5f1265b82dbc15676f22"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"77f2dbf83a66a0e2adf0a91b390e8cfe94260002","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"40ce1cba_3335a7a7","updated":"2023-06-01 09:06:45.000000000","message":"recheck neutron-ovn-rally-task","commit_id":"342fd5d7ef535c1e6e2b5f1265b82dbc15676f22"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f17ad39f1cc241ce2b1790de21641986a2705012","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"dc67e88f_5a2343f7","updated":"2023-06-29 15:34:39.000000000","message":"My code comments are only nits since it doesn\u0027t affect how the code works","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0b27e6e6663436ecf2f4e3474173141757ded5c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ef9ce84a_896d5335","updated":"2023-06-29 08:57:32.000000000","message":"Ping fellow reviewers","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a7e805e506ae701135c31f3bfd9f2f4b1d343b2d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"2843a719_6df683db","updated":"2023-06-03 16:49:02.000000000","message":"recheck tempest","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c8182378834faf2a5fb593e4ddcbd417dad85929","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d6809aa2_86634a37","updated":"2023-06-06 10:08:54.000000000","message":"recheck tempest - failures seem unrelated, but we\u0027ll see in the next execution","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"},{"author":{"_account_id":34451,"name":"Fernando Royo","email":"froyo@redhat.com","username":"froyo"},"change_message_id":"570d067e86adb3dd05e5935305a240783bcc1cf7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c0ae4d09_a865d9f8","updated":"2023-07-05 16:05:54.000000000","message":"LGTM!","commit_id":"68ecae5ff9a364e41126cb338902f1a36fc9413f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"793810f88fc065b2bc8e0d67bdeb0a1d6a408651","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"5fd8675b_e0364e50","updated":"2023-07-06 10:18:53.000000000","message":"recheck neutron-functional-with-uwsgi","commit_id":"68ecae5ff9a364e41126cb338902f1a36fc9413f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"41c347ac86711206088265a4d77b74aadd891adf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"c6dec73a_a77d43c3","updated":"2023-07-06 15:29:14.000000000","message":"recheck neutron-functional-with-uwsgi","commit_id":"68ecae5ff9a364e41126cb338902f1a36fc9413f"}],"neutron/common/ovn/utils.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"dc517e4f4f6ae4c1babcdcc1114688c1605c9036","unresolved":true,"context_lines":[{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"def validate_port_binding_or_virtual_port("},{"line_number":1057,"context_line":"        port_context, nb_idl, sb_idl, ml2_plugin, port):"},{"line_number":1058,"context_line":"    \"\"\"If the port is type\u003dvirtual and it is bound, return False\"\"\""},{"line_number":1059,"context_line":"    if not determine_bind_host(sb_idl, port, port_context\u003dport_context):"},{"line_number":1060,"context_line":"        # The port is not bound, exit."},{"line_number":1061,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"3d76455e_2d73b033","line":1058,"updated":"2023-06-02 10:45:14.000000000","message":"I\u0027m a bit confused here, what exactly \"True\" and \"False\" means as a result?","commit_id":"342fd5d7ef535c1e6e2b5f1265b82dbc15676f22"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f739ddad966323b95ea6cda836502ce0db889985","unresolved":false,"context_lines":[{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"def validate_port_binding_or_virtual_port("},{"line_number":1057,"context_line":"        port_context, nb_idl, sb_idl, ml2_plugin, port):"},{"line_number":1058,"context_line":"    \"\"\"If the port is type\u003dvirtual and it is bound, return False\"\"\""},{"line_number":1059,"context_line":"    if not determine_bind_host(sb_idl, port, port_context\u003dport_context):"},{"line_number":1060,"context_line":"        # The port is not bound, exit."},{"line_number":1061,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"72ddc5a3_76c8ddb9","line":1058,"in_reply_to":"3d76455e_2d73b033","updated":"2023-06-02 15:50:31.000000000","message":"I\u0027ll update this description with the new implementation.","commit_id":"342fd5d7ef535c1e6e2b5f1265b82dbc15676f22"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"dc517e4f4f6ae4c1babcdcc1114688c1605c9036","unresolved":true,"context_lines":[{"line_number":1072,"context_line":"    if port_type \u003d\u003d constants.LSP_TYPE_VIRTUAL:"},{"line_number":1073,"context_line":"        return False"},{"line_number":1074,"context_line":""},{"line_number":1075,"context_line":"    return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"9cb872b1_416c91ef","line":1075,"updated":"2023-06-02 10:45:14.000000000","message":"this function seems to be used only in one place and only to check if BadRequest should be raised or not. Maybe You can change this method so it will simply raise this exception if that\u0027s needed? IMO that would be easier to understand for future readers of that code.","commit_id":"342fd5d7ef535c1e6e2b5f1265b82dbc15676f22"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f739ddad966323b95ea6cda836502ce0db889985","unresolved":false,"context_lines":[{"line_number":1072,"context_line":"    if port_type \u003d\u003d constants.LSP_TYPE_VIRTUAL:"},{"line_number":1073,"context_line":"        return False"},{"line_number":1074,"context_line":""},{"line_number":1075,"context_line":"    return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"10c10251_6e101557","line":1075,"in_reply_to":"9cb872b1_416c91ef","updated":"2023-06-02 15:50:31.000000000","message":"Right! I\u0027ll push a new PS.","commit_id":"342fd5d7ef535c1e6e2b5f1265b82dbc15676f22"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f17ad39f1cc241ce2b1790de21641986a2705012","unresolved":true,"context_lines":[{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"    fixed_ips \u003d port.get(\u0027fixed_ips\u0027, [])"},{"line_number":1064,"context_line":"    subnet_ids \u003d set([fixed_ip[\u0027subnet_id\u0027] for fixed_ip in fixed_ips"},{"line_number":1065,"context_line":"                      if \u0027subnet_id\u0027 in fixed_ip])"},{"line_number":1066,"context_line":"    subnets \u003d (ml2_plugin.get_subnets(port_context.plugin_context,"},{"line_number":1067,"context_line":"                                      filters\u003d{\u0027id\u0027: list(subnet_ids)})"},{"line_number":1068,"context_line":"               if subnet_ids else [])"}],"source_content_type":"text/x-python","patch_set":6,"id":"e2de4b50_f6f4b0c4","line":1065,"updated":"2023-06-29 15:34:39.000000000","message":"You could return early here, don\u0027t know if it\u0027s work it checking \u0027len(subnet_ids)\u0027","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"008b31ad25531980daa7637c5f6326aaa0d2cbcc","unresolved":false,"context_lines":[{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"    fixed_ips \u003d port.get(\u0027fixed_ips\u0027, [])"},{"line_number":1064,"context_line":"    subnet_ids \u003d set([fixed_ip[\u0027subnet_id\u0027] for fixed_ip in fixed_ips"},{"line_number":1065,"context_line":"                      if \u0027subnet_id\u0027 in fixed_ip])"},{"line_number":1066,"context_line":"    subnets \u003d (ml2_plugin.get_subnets(port_context.plugin_context,"},{"line_number":1067,"context_line":"                                      filters\u003d{\u0027id\u0027: list(subnet_ids)})"},{"line_number":1068,"context_line":"               if subnet_ids else [])"}],"source_content_type":"text/x-python","patch_set":6,"id":"c8ee6947_ba7cfbf0","line":1065,"in_reply_to":"e2de4b50_f6f4b0c4","updated":"2023-07-03 08:14:50.000000000","message":"Right: if the port has no fixed_ips/subnets, it cannot be a virtual port and we can return here.","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f17ad39f1cc241ce2b1790de21641986a2705012","unresolved":true,"context_lines":[{"line_number":1065,"context_line":"                      if \u0027subnet_id\u0027 in fixed_ip])"},{"line_number":1066,"context_line":"    subnets \u003d (ml2_plugin.get_subnets(port_context.plugin_context,"},{"line_number":1067,"context_line":"                                      filters\u003d{\u0027id\u0027: list(subnet_ids)})"},{"line_number":1068,"context_line":"               if subnet_ids else [])"},{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":"    port_type, _, _ \u003d get_port_type_virtual_and_parents("},{"line_number":1071,"context_line":"        subnets, fixed_ips, port[\u0027network_id\u0027], port[\u0027id\u0027], nb_idl)"}],"source_content_type":"text/x-python","patch_set":6,"id":"afb09fb5_91fc4405","line":1068,"updated":"2023-06-29 15:34:39.000000000","message":"Same here, if no subnets then get_port_type_virtual_and_parents() will return early with port_type\u003d\u0027\u0027 since I don\u0027t think get_subnets() will throw an exception if nothing found.","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"008b31ad25531980daa7637c5f6326aaa0d2cbcc","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"                      if \u0027subnet_id\u0027 in fixed_ip])"},{"line_number":1066,"context_line":"    subnets \u003d (ml2_plugin.get_subnets(port_context.plugin_context,"},{"line_number":1067,"context_line":"                                      filters\u003d{\u0027id\u0027: list(subnet_ids)})"},{"line_number":1068,"context_line":"               if subnet_ids else [])"},{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":"    port_type, _, _ \u003d get_port_type_virtual_and_parents("},{"line_number":1071,"context_line":"        subnets, fixed_ips, port[\u0027network_id\u0027], port[\u0027id\u0027], nb_idl)"}],"source_content_type":"text/x-python","patch_set":6,"id":"f5c4a86e_e0c8ee0d","line":1068,"in_reply_to":"afb09fb5_91fc4405","updated":"2023-07-03 08:14:50.000000000","message":"Done","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"}],"releasenotes/notes/ovn-virtual-port-prevent-binding-50efba5521e8a28e.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f17ad39f1cc241ce2b1790de21641986a2705012","unresolved":true,"context_lines":[{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A ML2/OVN virtual port cannot be bound to a virtual machine. If a port"},{"line_number":5,"context_line":"    IP address is assigned as allowed address pair into another port, the"},{"line_number":6,"context_line":"    first one is considered as virtual port. If the second port"},{"line_number":7,"context_line":"    (non-virtual) is bound to ML2/OVN, the virtual port cannot be bound"},{"line_number":8,"context_line":"    to a virtual machine; a virtual port is created only to reserve a"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"c8b2e2d0_6c6b4a43","line":5,"range":{"start_line":5,"start_character":27,"end_line":5,"end_character":37},"updated":"2023-06-29 15:34:39.000000000","message":"s/as an allowed","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"008b31ad25531980daa7637c5f6326aaa0d2cbcc","unresolved":false,"context_lines":[{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A ML2/OVN virtual port cannot be bound to a virtual machine. If a port"},{"line_number":5,"context_line":"    IP address is assigned as allowed address pair into another port, the"},{"line_number":6,"context_line":"    first one is considered as virtual port. If the second port"},{"line_number":7,"context_line":"    (non-virtual) is bound to ML2/OVN, the virtual port cannot be bound"},{"line_number":8,"context_line":"    to a virtual machine; a virtual port is created only to reserve a"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"b606355a_b4e62106","line":5,"range":{"start_line":5,"start_character":27,"end_line":5,"end_character":37},"in_reply_to":"c8b2e2d0_6c6b4a43","updated":"2023-07-03 08:14:50.000000000","message":"Done","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f17ad39f1cc241ce2b1790de21641986a2705012","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A ML2/OVN virtual port cannot be bound to a virtual machine. If a port"},{"line_number":5,"context_line":"    IP address is assigned as allowed address pair into another port, the"},{"line_number":6,"context_line":"    first one is considered as virtual port. If the second port"},{"line_number":7,"context_line":"    (non-virtual) is bound to ML2/OVN, the virtual port cannot be bound"},{"line_number":8,"context_line":"    to a virtual machine; a virtual port is created only to reserve a"},{"line_number":9,"context_line":"    set of IP addresses to be used by other ports."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"208536ad_599b7bf6","line":6,"range":{"start_line":6,"start_character":28,"end_line":6,"end_character":38},"updated":"2023-06-29 15:34:39.000000000","message":"s/as a virtual port\n\nor just \"a virtual port\"","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"008b31ad25531980daa7637c5f6326aaa0d2cbcc","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A ML2/OVN virtual port cannot be bound to a virtual machine. If a port"},{"line_number":5,"context_line":"    IP address is assigned as allowed address pair into another port, the"},{"line_number":6,"context_line":"    first one is considered as virtual port. If the second port"},{"line_number":7,"context_line":"    (non-virtual) is bound to ML2/OVN, the virtual port cannot be bound"},{"line_number":8,"context_line":"    to a virtual machine; a virtual port is created only to reserve a"},{"line_number":9,"context_line":"    set of IP addresses to be used by other ports."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"55990d48_b5f5fe73","line":6,"range":{"start_line":6,"start_character":28,"end_line":6,"end_character":38},"in_reply_to":"208536ad_599b7bf6","updated":"2023-07-03 08:14:50.000000000","message":"Done","commit_id":"e71c7fd1a3d056fdf6dfafea51ddbfcb114c4016"}]}
