)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"47711f4497e287315d56a5a2bcf1275d19b18203","unresolved":true,"context_lines":[{"line_number":12,"context_line":"of the field network to [], which violates the constraint"},{"line_number":13,"context_line":"that the network value has to be greater than 0."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: 1948457"},{"line_number":16,"context_line":"Change-Id: I206c31201470f178efdde8839622be7900c6ae3e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"03c6aa1f_a8ac2a6e","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":19},"updated":"2021-11-11 16:00:44.000000000","message":"This is trivial but it is somehow preventing launchpad to add this patch in the bug comments.\n\nI think you need to add the \u0027#\u0027 char:\nCloses-Bug: #1948457","commit_id":"460fae9ed88b0c00370528e83dd8738a80d98b55"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"3d74cb9b50d7400ada1d8f6c75a2e120a67b34ae","unresolved":false,"context_lines":[{"line_number":12,"context_line":"of the field network to [], which violates the constraint"},{"line_number":13,"context_line":"that the network value has to be greater than 0."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: 1948457"},{"line_number":16,"context_line":"Change-Id: I206c31201470f178efdde8839622be7900c6ae3e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"0d674105_f1887452","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":19},"in_reply_to":"03c6aa1f_a8ac2a6e","updated":"2021-11-12 15:45:54.000000000","message":"Done","commit_id":"460fae9ed88b0c00370528e83dd8738a80d98b55"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"4c518e1de2bc52b703b36744dce437f6e68a3765","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Arnau Verdaguer \u003caverdagu@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-12-02 10:17:18 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Prevent deleting the only IP of a router port"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron allows deleting the only IP of a router port but"},{"line_number":10,"context_line":"the OVN NB DB doesn\u0027t, since it expects that the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"36b786c0_7f91215e","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":7},"updated":"2021-12-02 09:41:24.000000000","message":"nit:\n[ovn] Prevent ...\n\nor\novn: Prevent ...","commit_id":"072795d9221ae81e7d503e5d9e2891cd2301b676"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9269928ea1b5dca2bf0775efb5282d6a1a3d2e29","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Arnau Verdaguer \u003caverdagu@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-12-02 10:17:18 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Prevent deleting the only IP of a router port"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron allows deleting the only IP of a router port but"},{"line_number":10,"context_line":"the OVN NB DB doesn\u0027t, since it expects that the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"de3a1e2e_6637ac99","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":7},"in_reply_to":"36b786c0_7f91215e","updated":"2021-12-02 10:05:43.000000000","message":"+1","commit_id":"072795d9221ae81e7d503e5d9e2891cd2301b676"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"465ff81eac3d4ae01357c0e0dba62ade4d89450d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Arnau Verdaguer \u003caverdagu@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-12-02 10:17:18 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Prevent deleting the only IP of a router port"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron allows deleting the only IP of a router port but"},{"line_number":10,"context_line":"the OVN NB DB doesn\u0027t, since it expects that the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"7ec1e8e7_a6c8712d","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":7},"in_reply_to":"de3a1e2e_6637ac99","updated":"2021-12-02 13:36:39.000000000","message":"Done","commit_id":"072795d9221ae81e7d503e5d9e2891cd2301b676"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"4c518e1de2bc52b703b36744dce437f6e68a3765","unresolved":true,"context_lines":[{"line_number":9,"context_line":"Neutron allows deleting the only IP of a router port but"},{"line_number":10,"context_line":"the OVN NB DB doesn\u0027t, since it expects that the"},{"line_number":11,"context_line":"network value of a port is greater than 0. This should"},{"line_number":12,"context_line":"not be possible since it causes that the both DB are"},{"line_number":13,"context_line":"not perfectly sync."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"It is needed to check BEFORE_UPDATE if the port"},{"line_number":16,"context_line":"that will be updated is of type router owned and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"b275bc63_3af91033","line":13,"range":{"start_line":12,"start_character":32,"end_line":13,"end_character":19},"updated":"2021-12-02 09:41:24.000000000","message":"that both DBs are not in sync?","commit_id":"072795d9221ae81e7d503e5d9e2891cd2301b676"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"465ff81eac3d4ae01357c0e0dba62ade4d89450d","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Neutron allows deleting the only IP of a router port but"},{"line_number":10,"context_line":"the OVN NB DB doesn\u0027t, since it expects that the"},{"line_number":11,"context_line":"network value of a port is greater than 0. This should"},{"line_number":12,"context_line":"not be possible since it causes that the both DB are"},{"line_number":13,"context_line":"not perfectly sync."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"It is needed to check BEFORE_UPDATE if the port"},{"line_number":16,"context_line":"that will be updated is of type router owned and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"0e0396c8_4e0d253b","line":13,"range":{"start_line":12,"start_character":32,"end_line":13,"end_character":19},"in_reply_to":"b275bc63_3af91033","updated":"2021-12-02 13:36:39.000000000","message":"Done","commit_id":"072795d9221ae81e7d503e5d9e2891cd2301b676"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"0b1071886947dea95bbf9047f3109b02fb4eee9a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0ee4c40b_eedef798","updated":"2021-11-11 10:08:58.000000000","message":"PD: I\u0027m currently developing the test, the patch was submitted prematurely to open the following discussion:\nIn order to consider this bug closed and solved is enough to avoid an invalid write to the network NB DB column, or should we avoid that flow from happening?\nAFAICT this happens when the last IP from a ROUTER_OWNED_PORT is deleted.","commit_id":"b9befc583fb199923f068b46ff9f48df99708a55"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0e41c5f851cc0a1e3dacd91acbdeadc85ca0ee4d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2ef01395_5a0777e5","updated":"2021-11-16 13:04:57.000000000","message":"Hi Arnau:\n\nWhat you should do in the OVN mech driver is to capture the event [1]. If states[1] \u003d {\u0027fixed_ips\u0027: []}, that means we are removing all fixed_ips related to this port. If, as you check in your patch, this port belongs to a router and it\u0027s hosted by OVN, then is when you can raise the exception (before modifying any DB register, Neutron or OVN).\n\n[1]https://github.com/openstack/neutron/blob/54fe3c72622ed4def4bca03078cca5d551d2b384/neutron/plugins/ml2/plugin.py#L1727-L1731","commit_id":"93dc5db39b49ac44bcb468d03b40ef517ceb75d9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"103f2f4f183744c338dedb7c1d3bc34a15aa0c79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5bfd8424_6c57c0cf","updated":"2021-11-17 16:35:58.000000000","message":"IIUC that patch it will change Neutron API behavior thus I think that release note for that is must have.\nI\u0027m not sure if we would need to have shim api extension to make that api change discoverable. As this is bug fix really and it shouldn\u0027t be never allowed to do such port update, I guess it\u0027s not necessary in that case but I would like to see what other core reviewers thinks about it :)","commit_id":"c2e07f84555a955343cb9b03ae0145f387f5d245"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"ea9ada50a21a6b1a374ba067c975edecd85d88f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bf563bf9_0ae31ea9","updated":"2021-11-18 15:49:36.000000000","message":"Thanks for all the feedback, I implemented your comments on this patchset.\nLet me know if the release note is clear enough or if you think that something\nelse needs to be changed!\n\nPS: I realized that I maintained the LRP notation on the commit tittle, I\u0027ll change\nit alongside the other possible modifications","commit_id":"9aa86d196c18e2a02b7699ccdd27a8c2ef8fe7dc"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"573b757c24c9963a51886a34892e550b024fdac8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"97bb2fd0_5262e0f0","updated":"2021-12-01 13:39:36.000000000","message":"Hi Arnau, thanks for the patch! I left a very small comment, everything else looks good to me.","commit_id":"1c9eb8f4128d2dfd1d113369a72172bc9e1367b0"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"75c69f534a55eeb334a82b8e70a716336cfc0ddc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"765c3280_1608bc4f","updated":"2021-11-28 18:27:28.000000000","message":"recheck","commit_id":"1c9eb8f4128d2dfd1d113369a72172bc9e1367b0"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"4c518e1de2bc52b703b36744dce437f6e68a3765","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"c48b4484_14656053","updated":"2021-12-02 09:41:24.000000000","message":"Good stuff Arnau! Left some comments but mostly nits","commit_id":"072795d9221ae81e7d503e5d9e2891cd2301b676"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6e8fdef7dcb9b0e03165c55ab9a62d257ed8ccdf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"d3cbd913_196e7703","updated":"2021-12-02 14:12:46.000000000","message":"Waiting for the CI, but code looks OK","commit_id":"fa2179278f064f75e057f7020e4f0c34f358de1b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e957fca94d82b8d50095cc20c099ae09155b11bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"ab66b8f6_e541b550","updated":"2021-12-03 11:05:25.000000000","message":"recheck","commit_id":"fa2179278f064f75e057f7020e4f0c34f358de1b"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"67b12b8d939cf014e437dc804774230df7d794c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"e1c0db35_959f7a28","updated":"2021-12-07 10:24:27.000000000","message":"recheck","commit_id":"fa2179278f064f75e057f7020e4f0c34f358de1b"}],"neutron/db/ipam_pluggable_backend.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0e41c5f851cc0a1e3dacd91acbdeadc85ca0ee4d","unresolved":true,"context_lines":[{"line_number":439,"context_line":"            # Check if the IPs need to be updated"},{"line_number":440,"context_line":"            network_id \u003d db_port[\u0027network_id\u0027]"},{"line_number":441,"context_line":"            for ip in changes.remove:"},{"line_number":442,"context_line":"                if db_port[\u0027device_owner\u0027] in constants.ROUTER_PORT_OWNERS:"},{"line_number":443,"context_line":"                    # Deleting the last IP of a router owned port is not"},{"line_number":444,"context_line":"                    # allowed"},{"line_number":445,"context_line":"                    # https://review.opendev.org/c/openstack/neutron/+/817525"}],"source_content_type":"text/x-python","patch_set":4,"id":"db18241f_754104ea","line":442,"range":{"start_line":442,"start_character":16,"end_line":442,"end_character":75},"updated":"2021-11-16 13:04:57.000000000","message":"The IPAM module is backend agnostic. This issue affects only OVN. We should not fail here.","commit_id":"93dc5db39b49ac44bcb468d03b40ef517ceb75d9"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"47711f4497e287315d56a5a2bcf1275d19b18203","unresolved":true,"context_lines":[{"line_number":1531,"context_line":"        # must be greater than 0"},{"line_number":1532,"context_line":"        # //bugs.launchpad.net/neutron/+bug/1948457"},{"line_number":1533,"context_line":"        update \u003d {\u0027ipv6_ra_configs\u0027: ipv6_ra_configs}"},{"line_number":1534,"context_line":"        if networks:"},{"line_number":1535,"context_line":"            update[\u0027networks\u0027] \u003d networks"},{"line_number":1536,"context_line":""},{"line_number":1537,"context_line":"        is_gw_port \u003d const.DEVICE_OWNER_ROUTER_GW \u003d\u003d port.get("}],"source_content_type":"text/x-python","patch_set":2,"id":"f26bfe71_9f66eb4d","line":1534,"range":{"start_line":1534,"start_character":8,"end_line":1534,"end_character":20},"updated":"2021-11-11 16:00:44.000000000","message":"I\u0027m not sure if this approach is correct. This won\u0027t correctly update the OVN LRP register with the Neutron values.\n\nIf OVN does not accept having a LRP without networks, then we should raise an exception and prevent this operation.\n\nWhat I\u0027m trying to state here is that we always should have a perfect sync between the Neutron DB and OVN DB. This will break it.","commit_id":"460fae9ed88b0c00370528e83dd8738a80d98b55"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"3d74cb9b50d7400ada1d8f6c75a2e120a67b34ae","unresolved":true,"context_lines":[{"line_number":1531,"context_line":"        # must be greater than 0"},{"line_number":1532,"context_line":"        # //bugs.launchpad.net/neutron/+bug/1948457"},{"line_number":1533,"context_line":"        update \u003d {\u0027ipv6_ra_configs\u0027: ipv6_ra_configs}"},{"line_number":1534,"context_line":"        if networks:"},{"line_number":1535,"context_line":"            update[\u0027networks\u0027] \u003d networks"},{"line_number":1536,"context_line":""},{"line_number":1537,"context_line":"        is_gw_port \u003d const.DEVICE_OWNER_ROUTER_GW \u003d\u003d port.get("}],"source_content_type":"text/x-python","patch_set":2,"id":"102137a5_8a4a6eec","line":1534,"range":{"start_line":1534,"start_character":8,"end_line":1534,"end_character":20},"in_reply_to":"f26bfe71_9f66eb4d","updated":"2021-11-12 15:45:54.000000000","message":"You\u0027re correct, when you delete the last IP from the LRP the Neutron-DB deletes the entry on the `ipallocations` table, but since the write on the OVN-NB-DB network columns is incorrect, that value remains intact.\n\nSo even though this change would fix the incorrect OVN-NB-DB write, it would leave the two databases unsync.\n\nI\u0027ll redo the patch in order to raise an exception.","commit_id":"460fae9ed88b0c00370528e83dd8738a80d98b55"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0e41c5f851cc0a1e3dacd91acbdeadc85ca0ee4d","unresolved":true,"context_lines":[{"line_number":1536,"context_line":"        # //bugs.launchpad.net/neutron/+bug/1948457"},{"line_number":1537,"context_line":"        if not networks:"},{"line_number":1538,"context_line":"            reason \u003d _(\u0027Cannot delete last IP from LRP\u0027)"},{"line_number":1539,"context_line":"            raise n_exc.ServicePortInUse(port_id\u003dport[\u0027id\u0027], reason\u003dreason)"},{"line_number":1540,"context_line":""},{"line_number":1541,"context_line":"        update \u003d {\u0027networks\u0027: networks, \u0027ipv6_ra_configs\u0027: ipv6_ra_configs}"},{"line_number":1542,"context_line":"        is_gw_port \u003d const.DEVICE_OWNER_ROUTER_GW \u003d\u003d port.get("}],"source_content_type":"text/x-python","patch_set":4,"id":"65538ece_4d6f5cb0","line":1539,"range":{"start_line":1539,"start_character":12,"end_line":1539,"end_character":75},"updated":"2021-11-16 13:04:57.000000000","message":"At this point the Neutron DB port has been modified. We should not raise an exception here, leaving the Neutron DB and the OVN DB out of sync.","commit_id":"93dc5db39b49ac44bcb468d03b40ef517ceb75d9"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e63ede5d091d76f644c552ccca4a732ed6514031","unresolved":true,"context_lines":[{"line_number":484,"context_line":"        # to the DB, since if not it would leave the Neutron DB and the"},{"line_number":485,"context_line":"        # OVN DB unsync."},{"line_number":486,"context_line":"        # https://bugs.launchpad.net/neutron/+bug/1948457"},{"line_number":487,"context_line":"        if event \u003d\u003d events.BEFORE_UPDATE and \\"},{"line_number":488,"context_line":"                utils.is_lsp_router_port(original) and \\"},{"line_number":489,"context_line":"                not current[\u0027fixed_ips\u0027]:"},{"line_number":490,"context_line":"            reason \u003d _(\"Unable to delete the only IP of a LRP\")"},{"line_number":491,"context_line":"            raise n_exc.ServicePortInUse(port_id\u003doriginal[\u0027id\u0027], reason\u003dreason)"},{"line_number":492,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3dea4b39_bbe53e91","line":489,"range":{"start_line":487,"start_character":11,"end_line":489,"end_character":41},"updated":"2021-11-18 10:03:25.000000000","message":"1) IMPORTANT: \"current\" is a dict that can have or not \"fixed_ips\" key, That will throw an exception if we change anything else in this port (for example, the name, as I tested manually). You should (1) check \"fixed_ips\" is present (that means we are modifying this parameter) and (2) that is empty.\n\n2) nit: we usually brace multiline commands inside parenthesis. E.g.:\n\n        if (event \u003d\u003d events.BEFORE_UPDATE and\n                utils.is_lsp_router_port(original) and\n                other_check):","commit_id":"c2e07f84555a955343cb9b03ae0145f387f5d245"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"ea9ada50a21a6b1a374ba067c975edecd85d88f5","unresolved":false,"context_lines":[{"line_number":484,"context_line":"        # to the DB, since if not it would leave the Neutron DB and the"},{"line_number":485,"context_line":"        # OVN DB unsync."},{"line_number":486,"context_line":"        # https://bugs.launchpad.net/neutron/+bug/1948457"},{"line_number":487,"context_line":"        if event \u003d\u003d events.BEFORE_UPDATE and \\"},{"line_number":488,"context_line":"                utils.is_lsp_router_port(original) and \\"},{"line_number":489,"context_line":"                not current[\u0027fixed_ips\u0027]:"},{"line_number":490,"context_line":"            reason \u003d _(\"Unable to delete the only IP of a LRP\")"},{"line_number":491,"context_line":"            raise n_exc.ServicePortInUse(port_id\u003doriginal[\u0027id\u0027], reason\u003dreason)"},{"line_number":492,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fecab2e_93500fa9","line":489,"range":{"start_line":487,"start_character":11,"end_line":489,"end_character":41},"in_reply_to":"3dea4b39_bbe53e91","updated":"2021-11-18 15:49:36.000000000","message":"Ack","commit_id":"c2e07f84555a955343cb9b03ae0145f387f5d245"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"103f2f4f183744c338dedb7c1d3bc34a15aa0c79","unresolved":true,"context_lines":[{"line_number":487,"context_line":"        if event \u003d\u003d events.BEFORE_UPDATE and \\"},{"line_number":488,"context_line":"                utils.is_lsp_router_port(original) and \\"},{"line_number":489,"context_line":"                not current[\u0027fixed_ips\u0027]:"},{"line_number":490,"context_line":"            reason \u003d _(\"Unable to delete the only IP of a LRP\")"},{"line_number":491,"context_line":"            raise n_exc.ServicePortInUse(port_id\u003doriginal[\u0027id\u0027], reason\u003dreason)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        if event \u003d\u003d events.AFTER_UPDATE and utils.is_lsp_router_port(current):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1cbf01a5_8f16c267","line":490,"range":{"start_line":490,"start_character":58,"end_line":490,"end_character":61},"updated":"2021-11-17 16:35:58.000000000","message":"this is OVN term. I think it would be better to not use it in Neutron and instead use \"router port\" term or something like that.","commit_id":"c2e07f84555a955343cb9b03ae0145f387f5d245"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e63ede5d091d76f644c552ccca4a732ed6514031","unresolved":true,"context_lines":[{"line_number":487,"context_line":"        if event \u003d\u003d events.BEFORE_UPDATE and \\"},{"line_number":488,"context_line":"                utils.is_lsp_router_port(original) and \\"},{"line_number":489,"context_line":"                not current[\u0027fixed_ips\u0027]:"},{"line_number":490,"context_line":"            reason \u003d _(\"Unable to delete the only IP of a LRP\")"},{"line_number":491,"context_line":"            raise n_exc.ServicePortInUse(port_id\u003doriginal[\u0027id\u0027], reason\u003dreason)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        if event \u003d\u003d events.AFTER_UPDATE and utils.is_lsp_router_port(current):"}],"source_content_type":"text/x-python","patch_set":5,"id":"a15bb81f_c9caf353","line":490,"range":{"start_line":490,"start_character":58,"end_line":490,"end_character":61},"in_reply_to":"1cbf01a5_8f16c267","updated":"2021-11-18 10:03:25.000000000","message":"Right, it is better to use \"router port\". We also can delete multiple IPs in one command, so maybe change this to \"Logical router port must have at least one IP address\".","commit_id":"c2e07f84555a955343cb9b03ae0145f387f5d245"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"ea9ada50a21a6b1a374ba067c975edecd85d88f5","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        if event \u003d\u003d events.BEFORE_UPDATE and \\"},{"line_number":488,"context_line":"                utils.is_lsp_router_port(original) and \\"},{"line_number":489,"context_line":"                not current[\u0027fixed_ips\u0027]:"},{"line_number":490,"context_line":"            reason \u003d _(\"Unable to delete the only IP of a LRP\")"},{"line_number":491,"context_line":"            raise n_exc.ServicePortInUse(port_id\u003doriginal[\u0027id\u0027], reason\u003dreason)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        if event \u003d\u003d events.AFTER_UPDATE and utils.is_lsp_router_port(current):"}],"source_content_type":"text/x-python","patch_set":5,"id":"a65ae5a0_c28771ce","line":490,"range":{"start_line":490,"start_character":58,"end_line":490,"end_character":61},"in_reply_to":"a15bb81f_c9caf353","updated":"2021-11-18 15:49:36.000000000","message":"Ack","commit_id":"c2e07f84555a955343cb9b03ae0145f387f5d245"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"4c518e1de2bc52b703b36744dce437f6e68a3765","unresolved":true,"context_lines":[{"line_number":485,"context_line":"        # OVN DB unsync."},{"line_number":486,"context_line":"        # https://bugs.launchpad.net/neutron/+bug/1948457"},{"line_number":487,"context_line":"        if (event \u003d\u003d events.BEFORE_UPDATE and"},{"line_number":488,"context_line":"                \u0027fixed_ips\u0027 in current and not current[\u0027fixed_ips\u0027] and"},{"line_number":489,"context_line":"                utils.is_lsp_router_port(original)):"},{"line_number":490,"context_line":"            reason \u003d _(\"Router port must have at least one IP.\")"},{"line_number":491,"context_line":"            raise n_exc.ServicePortInUse(port_id\u003doriginal[\u0027id\u0027], reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":9,"id":"b9094651_cb5470ca","line":488,"range":{"start_line":488,"start_character":39,"end_line":488,"end_character":67},"updated":"2021-12-02 09:41:24.000000000","message":"nit: not sure if this is more readable:  and len(current[\u0027fixed_ips\u0027]) \u003d\u003d 0","commit_id":"072795d9221ae81e7d503e5d9e2891cd2301b676"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"465ff81eac3d4ae01357c0e0dba62ade4d89450d","unresolved":false,"context_lines":[{"line_number":485,"context_line":"        # OVN DB unsync."},{"line_number":486,"context_line":"        # https://bugs.launchpad.net/neutron/+bug/1948457"},{"line_number":487,"context_line":"        if (event \u003d\u003d events.BEFORE_UPDATE and"},{"line_number":488,"context_line":"                \u0027fixed_ips\u0027 in current and not current[\u0027fixed_ips\u0027] and"},{"line_number":489,"context_line":"                utils.is_lsp_router_port(original)):"},{"line_number":490,"context_line":"            reason \u003d _(\"Router port must have at least one IP.\")"},{"line_number":491,"context_line":"            raise n_exc.ServicePortInUse(port_id\u003doriginal[\u0027id\u0027], reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":9,"id":"8d91c486_dec13634","line":488,"range":{"start_line":488,"start_character":39,"end_line":488,"end_character":67},"in_reply_to":"2631775f_4d16ea09","updated":"2021-12-02 13:36:39.000000000","message":"Done","commit_id":"072795d9221ae81e7d503e5d9e2891cd2301b676"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9269928ea1b5dca2bf0775efb5282d6a1a3d2e29","unresolved":true,"context_lines":[{"line_number":485,"context_line":"        # OVN DB unsync."},{"line_number":486,"context_line":"        # https://bugs.launchpad.net/neutron/+bug/1948457"},{"line_number":487,"context_line":"        if (event \u003d\u003d events.BEFORE_UPDATE and"},{"line_number":488,"context_line":"                \u0027fixed_ips\u0027 in current and not current[\u0027fixed_ips\u0027] and"},{"line_number":489,"context_line":"                utils.is_lsp_router_port(original)):"},{"line_number":490,"context_line":"            reason \u003d _(\"Router port must have at least one IP.\")"},{"line_number":491,"context_line":"            raise n_exc.ServicePortInUse(port_id\u003doriginal[\u0027id\u0027], reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":9,"id":"2631775f_4d16ea09","line":488,"range":{"start_line":488,"start_character":39,"end_line":488,"end_character":67},"in_reply_to":"b9094651_cb5470ca","updated":"2021-12-02 10:05:43.000000000","message":"IMO this is OK as is","commit_id":"072795d9221ae81e7d503e5d9e2891cd2301b676"}],"neutron/tests/unit/services/ovn_l3/test_plugin.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"103f2f4f183744c338dedb7c1d3bc34a15aa0c79","unresolved":true,"context_lines":[{"line_number":1414,"context_line":"                                               port,"},{"line_number":1415,"context_line":"                                               if_exists\u003dTrue)"},{"line_number":1416,"context_line":""},{"line_number":1417,"context_line":"    def test_port_update_before_update_lrp_without_ip(self):"},{"line_number":1418,"context_line":"        context \u003d \u0027fake_context\u0027"},{"line_number":1419,"context_line":"        port \u003d {\u0027device_owner\u0027: constants.DEVICE_OWNER_ROUTER_INTF,"},{"line_number":1420,"context_line":"                \u0027fixed_ips\u0027: [],"}],"source_content_type":"text/x-python","patch_set":5,"id":"d2354ca0_ed631768","line":1417,"range":{"start_line":1417,"start_character":39,"end_line":1417,"end_character":42},"updated":"2021-11-17 16:35:58.000000000","message":"router_port","commit_id":"c2e07f84555a955343cb9b03ae0145f387f5d245"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"ea9ada50a21a6b1a374ba067c975edecd85d88f5","unresolved":false,"context_lines":[{"line_number":1414,"context_line":"                                               port,"},{"line_number":1415,"context_line":"                                               if_exists\u003dTrue)"},{"line_number":1416,"context_line":""},{"line_number":1417,"context_line":"    def test_port_update_before_update_lrp_without_ip(self):"},{"line_number":1418,"context_line":"        context \u003d \u0027fake_context\u0027"},{"line_number":1419,"context_line":"        port \u003d {\u0027device_owner\u0027: constants.DEVICE_OWNER_ROUTER_INTF,"},{"line_number":1420,"context_line":"                \u0027fixed_ips\u0027: [],"}],"source_content_type":"text/x-python","patch_set":5,"id":"ecf3b331_c07799f4","line":1417,"range":{"start_line":1417,"start_character":39,"end_line":1417,"end_character":42},"in_reply_to":"d2354ca0_ed631768","updated":"2021-11-18 15:49:36.000000000","message":"Ack","commit_id":"c2e07f84555a955343cb9b03ae0145f387f5d245"}],"releasenotes/notes/bug-817525-eef68687dafa97fd.yaml":[{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"573b757c24c9963a51886a34892e550b024fdac8","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Changes teh API behaviour to enforce that it\u0027s not possible to delete"},{"line_number":5,"context_line":"    all the IPs from a router port."},{"line_number":6,"context_line":"    `817525 \u003chttps://review.opendev.org/c/openstack/neutron/+/817525\u003e`_"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"a6186055_b5f83fb0","line":4,"range":{"start_line":4,"start_character":12,"end_line":4,"end_character":15},"updated":"2021-12-01 13:39:36.000000000","message":"Small typo: the","commit_id":"1c9eb8f4128d2dfd1d113369a72172bc9e1367b0"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"2913c7a1c77d644d2563be737f14689ac76ea1ec","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Changes teh API behaviour to enforce that it\u0027s not possible to delete"},{"line_number":5,"context_line":"    all the IPs from a router port."},{"line_number":6,"context_line":"    `817525 \u003chttps://review.opendev.org/c/openstack/neutron/+/817525\u003e`_"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"6091ca8a_fe2c8f3d","line":4,"range":{"start_line":4,"start_character":12,"end_line":4,"end_character":15},"in_reply_to":"a6186055_b5f83fb0","updated":"2021-12-02 09:22:13.000000000","message":"Good catch thanks!","commit_id":"1c9eb8f4128d2dfd1d113369a72172bc9e1367b0"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"99817172ab2e7d06bd176e17aa16352ca65ddc4a","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Changes teh API behaviour to enforce that it\u0027s not possible to delete"},{"line_number":5,"context_line":"    all the IPs from a router port."},{"line_number":6,"context_line":"    `817525 \u003chttps://review.opendev.org/c/openstack/neutron/+/817525\u003e`_"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"c14e3291_9109c87f","line":6,"range":{"start_line":6,"start_character":5,"end_line":6,"end_character":69},"updated":"2021-12-02 06:43:58.000000000","message":"adding bug link here may make more sense instead of the patch link. Like for more info see `bug LP#1948457 \u003chttps://bugs.launchpad.net/neutron/+bug/1948457\u003e`_","commit_id":"1c9eb8f4128d2dfd1d113369a72172bc9e1367b0"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"2913c7a1c77d644d2563be737f14689ac76ea1ec","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Changes teh API behaviour to enforce that it\u0027s not possible to delete"},{"line_number":5,"context_line":"    all the IPs from a router port."},{"line_number":6,"context_line":"    `817525 \u003chttps://review.opendev.org/c/openstack/neutron/+/817525\u003e`_"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"1c057d95_ad470530","line":6,"range":{"start_line":6,"start_character":5,"end_line":6,"end_character":69},"in_reply_to":"c14e3291_9109c87f","updated":"2021-12-02 09:22:13.000000000","message":"True, makes more sense, thank you!","commit_id":"1c9eb8f4128d2dfd1d113369a72172bc9e1367b0"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"4c518e1de2bc52b703b36744dce437f6e68a3765","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Changes the API behaviour to enforce that it\u0027s not possible to delete"},{"line_number":5,"context_line":"    all the IPs from a router port."},{"line_number":6,"context_line":"    For more info see `bug LP#1948457 \u003chttps://bugs.launchpad.net/neutron/+bug/1948457\u003e`_"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"da61d5c4_be7d873a","line":6,"range":{"start_line":4,"start_character":0,"end_line":6,"end_character":89},"updated":"2021-12-02 09:41:24.000000000","message":"I think that the release note should mention that the change corresponds only to the OVN driver.","commit_id":"072795d9221ae81e7d503e5d9e2891cd2301b676"},{"author":{"_account_id":34118,"name":"Arnau Verdaguer","email":"averdagu@redhat.com","username":"averdaguer"},"change_message_id":"465ff81eac3d4ae01357c0e0dba62ade4d89450d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Changes the API behaviour to enforce that it\u0027s not possible to delete"},{"line_number":5,"context_line":"    all the IPs from a router port."},{"line_number":6,"context_line":"    For more info see `bug LP#1948457 \u003chttps://bugs.launchpad.net/neutron/+bug/1948457\u003e`_"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9a957536_e87e342a","line":6,"range":{"start_line":4,"start_character":0,"end_line":6,"end_character":89},"in_reply_to":"da61d5c4_be7d873a","updated":"2021-12-02 13:36:39.000000000","message":"Done","commit_id":"072795d9221ae81e7d503e5d9e2891cd2301b676"}]}
