)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"92648cec9541308e1df093eb2e941e787b0e1bf2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5789ec53_bb17c20d","updated":"2022-09-14 07:01:48.000000000","message":"-1 for distributed_port_bindings which I think still need to be handled in this case","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"911a83eac45612eb4c57cbaa02529bc3b1821666","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"84288fff_2115efc4","updated":"2022-09-27 07:46:45.000000000","message":"recheck - failed live migration in one test","commit_id":"2f0919f7df9a7e6a7e22c428e40f324fff88ef24"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"30ce8b8a648d807a379d251790cb6fd521e9a674","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"99c7bb89_7123b835","updated":"2022-09-26 11:30:43.000000000","message":"recheck https://bugs.launchpad.net/neutron/+bug/1990838","commit_id":"2f0919f7df9a7e6a7e22c428e40f324fff88ef24"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bd1b8bb6f5d029322292be146cd40bb39947175b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"6907e952_3af7388c","updated":"2022-09-23 15:34:48.000000000","message":"recheck unrelated failure","commit_id":"2f0919f7df9a7e6a7e22c428e40f324fff88ef24"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"92648cec9541308e1df093eb2e941e787b0e1bf2","unresolved":true,"context_lines":[{"line_number":2078,"context_line":"        with db_api.CONTEXT_WRITER.using(context):"},{"line_number":2079,"context_line":"            binding \u003d p_utils.get_port_binding_by_status_and_host("},{"line_number":2080,"context_line":"                port_db.port_bindings, const.ACTIVE,"},{"line_number":2081,"context_line":"                raise_if_not_found\u003dTrue, port_id\u003did)"},{"line_number":2082,"context_line":""},{"line_number":2083,"context_line":"            network \u003d self.get_network(context, port[\u0027network_id\u0027])"},{"line_number":2084,"context_line":"            bound_mech_contexts \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"5eda285d_90b5f94f","side":"PARENT","line":2081,"range":{"start_line":2081,"start_character":16,"end_line":2081,"end_character":39},"updated":"2022-09-14 07:01:48.000000000","message":"so even with this set explicitly no exception was raised?","commit_id":"0a6b9cc39527c13fc663709ae9da3ac033407423"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"69c277da93efd141aecd7fcf6fe3e276c232c493","unresolved":true,"context_lines":[{"line_number":2078,"context_line":"        with db_api.CONTEXT_WRITER.using(context):"},{"line_number":2079,"context_line":"            binding \u003d p_utils.get_port_binding_by_status_and_host("},{"line_number":2080,"context_line":"                port_db.port_bindings, const.ACTIVE,"},{"line_number":2081,"context_line":"                raise_if_not_found\u003dTrue, port_id\u003did)"},{"line_number":2082,"context_line":""},{"line_number":2083,"context_line":"            network \u003d self.get_network(context, port[\u0027network_id\u0027])"},{"line_number":2084,"context_line":"            bound_mech_contexts \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"bb9f5a84_8fdd0f44","side":"PARENT","line":2081,"range":{"start_line":2081,"start_character":16,"end_line":2081,"end_character":39},"in_reply_to":"0dbd4830_97746d1c","updated":"2022-09-19 13:49:52.000000000","message":"Sorry, I didn\u0027t get it: commit message says \"the port deletion CLI command succeeded (no exception was raised)\" - but this code should raise if binding is not found, so my concern is why it doesn\u0027t?","commit_id":"0a6b9cc39527c13fc663709ae9da3ac033407423"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"85541253bed5ebfa3d5e71eb186f698ed559c3a3","unresolved":true,"context_lines":[{"line_number":2078,"context_line":"        with db_api.CONTEXT_WRITER.using(context):"},{"line_number":2079,"context_line":"            binding \u003d p_utils.get_port_binding_by_status_and_host("},{"line_number":2080,"context_line":"                port_db.port_bindings, const.ACTIVE,"},{"line_number":2081,"context_line":"                raise_if_not_found\u003dTrue, port_id\u003did)"},{"line_number":2082,"context_line":""},{"line_number":2083,"context_line":"            network \u003d self.get_network(context, port[\u0027network_id\u0027])"},{"line_number":2084,"context_line":"            bound_mech_contexts \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"0dbd4830_97746d1c","side":"PARENT","line":2081,"range":{"start_line":2081,"start_character":16,"end_line":2081,"end_character":39},"in_reply_to":"5eda285d_90b5f94f","updated":"2022-09-19 13:25:29.000000000","message":"It is, all ports must have an associated \"PortBinding\" child register.","commit_id":"0a6b9cc39527c13fc663709ae9da3ac033407423"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fbbdcc39c3e6d7406412a3d62c0f2c990a18615c","unresolved":false,"context_lines":[{"line_number":2078,"context_line":"        with db_api.CONTEXT_WRITER.using(context):"},{"line_number":2079,"context_line":"            binding \u003d p_utils.get_port_binding_by_status_and_host("},{"line_number":2080,"context_line":"                port_db.port_bindings, const.ACTIVE,"},{"line_number":2081,"context_line":"                raise_if_not_found\u003dTrue, port_id\u003did)"},{"line_number":2082,"context_line":""},{"line_number":2083,"context_line":"            network \u003d self.get_network(context, port[\u0027network_id\u0027])"},{"line_number":2084,"context_line":"            bound_mech_contexts \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"f26109ae_6b20f07a","side":"PARENT","line":2081,"range":{"start_line":2081,"start_character":16,"end_line":2081,"end_character":39},"in_reply_to":"bb9f5a84_8fdd0f44","updated":"2022-09-22 13:12:52.000000000","message":"Ah no, now I understand.\n\nWith this flag enabled, the exception is raised and catch after. No exception is thrown to the CLI and the command returns OK, but the port is not deleted. To be honest, this exception should not be catch and the user should be aware of it. This patch is not fixing the exception catch issue but avoiding it.","commit_id":"0a6b9cc39527c13fc663709ae9da3ac033407423"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"92648cec9541308e1df093eb2e941e787b0e1bf2","unresolved":true,"context_lines":[{"line_number":2086,"context_line":"                        \u0027port_db\u0027: port_db,"},{"line_number":2087,"context_line":"                        \u0027bindings\u0027: binding}"},{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":"            if not binding:"},{"line_number":2090,"context_line":"                LOG.warning(\u0027The port %s has no binding information, the \u0027"},{"line_number":2091,"context_line":"                            \u0027register has been manually deleted\u0027, id)"},{"line_number":2092,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"941c8568_e1e46c57","line":2089,"range":{"start_line":2089,"start_character":19,"end_line":2089,"end_character":26},"updated":"2022-09-14 07:01:48.000000000","message":"this binding is used only in case of non-DEVICE_OWNER_DVR_INTERFACE port, otherwise I think we still need to execute logic related to distributed_port_bindings, don\u0027t we?","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"85541253bed5ebfa3d5e71eb186f698ed559c3a3","unresolved":true,"context_lines":[{"line_number":2086,"context_line":"                        \u0027port_db\u0027: port_db,"},{"line_number":2087,"context_line":"                        \u0027bindings\u0027: binding}"},{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":"            if not binding:"},{"line_number":2090,"context_line":"                LOG.warning(\u0027The port %s has no binding information, the \u0027"},{"line_number":2091,"context_line":"                            \u0027register has been manually deleted\u0027, id)"},{"line_number":2092,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fd74f194_131eea27","line":2089,"range":{"start_line":2089,"start_character":19,"end_line":2089,"end_character":26},"in_reply_to":"941c8568_e1e46c57","updated":"2022-09-19 13:25:29.000000000","message":"No really. A DVR port will have several \"DistributedPortBinding\" registers and a \"PortBinding\" record. When a port is being binding, the method \"_commit_port_binding\" will retrieve the first register in the distributed port binding list (method \"get_distributed_port_binding_by_host\") and will use this info to create a \"PortBinding\" record.","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fbbdcc39c3e6d7406412a3d62c0f2c990a18615c","unresolved":false,"context_lines":[{"line_number":2086,"context_line":"                        \u0027port_db\u0027: port_db,"},{"line_number":2087,"context_line":"                        \u0027bindings\u0027: binding}"},{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":"            if not binding:"},{"line_number":2090,"context_line":"                LOG.warning(\u0027The port %s has no binding information, the \u0027"},{"line_number":2091,"context_line":"                            \u0027register has been manually deleted\u0027, id)"},{"line_number":2092,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"b72b8c6d_4f31e29c","line":2089,"range":{"start_line":2089,"start_character":19,"end_line":2089,"end_character":26},"in_reply_to":"d4e13039_9e1e4e6d","updated":"2022-09-22 13:12:52.000000000","message":"Done","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"69c277da93efd141aecd7fcf6fe3e276c232c493","unresolved":true,"context_lines":[{"line_number":2086,"context_line":"                        \u0027port_db\u0027: port_db,"},{"line_number":2087,"context_line":"                        \u0027bindings\u0027: binding}"},{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":"            if not binding:"},{"line_number":2090,"context_line":"                LOG.warning(\u0027The port %s has no binding information, the \u0027"},{"line_number":2091,"context_line":"                            \u0027register has been manually deleted\u0027, id)"},{"line_number":2092,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"d4e13039_9e1e4e6d","line":2089,"range":{"start_line":2089,"start_character":19,"end_line":2089,"end_character":26},"in_reply_to":"fd74f194_131eea27","updated":"2022-09-19 13:49:52.000000000","message":"That\u0027s clear, now when such a DVR port is created: \n - it has one PortBinding and several DistributedPortBinding records\n - PortBinding register is deleted manually (as described in the bug)\n - there are still DistributedPortBindings\n - with this patch logic at #2093-2113 will be skipped, while I think it should still process DistributedPortBindings even when PortBinding is not found\n \n what am I missing?\n \n IOW I suggest to move \u0027if\u0027 at #2089 under \u0027else\u0027 at #2114","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"92648cec9541308e1df093eb2e941e787b0e1bf2","unresolved":true,"context_lines":[{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":"            if not binding:"},{"line_number":2090,"context_line":"                LOG.warning(\u0027The port %s has no binding information, the \u0027"},{"line_number":2091,"context_line":"                            \u0027register has been manually deleted\u0027, id)"},{"line_number":2092,"context_line":"            else:"},{"line_number":2093,"context_line":"                if device_owner \u003d\u003d const.DEVICE_OWNER_DVR_INTERFACE:"},{"line_number":2094,"context_line":"                    bindings \u003d db.get_distributed_port_bindings(context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"29020b2e_b9ec1237","line":2091,"range":{"start_line":2091,"start_character":29,"end_line":2091,"end_character":63},"updated":"2022-09-14 07:01:48.000000000","message":"nit: it might not always be the case, so probably better use less strict statement","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"85541253bed5ebfa3d5e71eb186f698ed559c3a3","unresolved":true,"context_lines":[{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":"            if not binding:"},{"line_number":2090,"context_line":"                LOG.warning(\u0027The port %s has no binding information, the \u0027"},{"line_number":2091,"context_line":"                            \u0027register has been manually deleted\u0027, id)"},{"line_number":2092,"context_line":"            else:"},{"line_number":2093,"context_line":"                if device_owner \u003d\u003d const.DEVICE_OWNER_DVR_INTERFACE:"},{"line_number":2094,"context_line":"                    bindings \u003d db.get_distributed_port_bindings(context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"a755156f_2e8426ea","line":2091,"range":{"start_line":2091,"start_character":29,"end_line":2091,"end_character":63},"in_reply_to":"29020b2e_b9ec1237","updated":"2022-09-19 13:25:29.000000000","message":"ditto","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fbbdcc39c3e6d7406412a3d62c0f2c990a18615c","unresolved":false,"context_lines":[{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":"            if not binding:"},{"line_number":2090,"context_line":"                LOG.warning(\u0027The port %s has no binding information, the \u0027"},{"line_number":2091,"context_line":"                            \u0027register has been manually deleted\u0027, id)"},{"line_number":2092,"context_line":"            else:"},{"line_number":2093,"context_line":"                if device_owner \u003d\u003d const.DEVICE_OWNER_DVR_INTERFACE:"},{"line_number":2094,"context_line":"                    bindings \u003d db.get_distributed_port_bindings(context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"e4f618e9_2054a311","line":2091,"range":{"start_line":2091,"start_character":29,"end_line":2091,"end_character":63},"in_reply_to":"31ee7c78_47e78331","updated":"2022-09-22 13:12:52.000000000","message":"Right, I\u0027ll change this message. This could be something else apart from a careless admin.","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"69c277da93efd141aecd7fcf6fe3e276c232c493","unresolved":true,"context_lines":[{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":"            if not binding:"},{"line_number":2090,"context_line":"                LOG.warning(\u0027The port %s has no binding information, the \u0027"},{"line_number":2091,"context_line":"                            \u0027register has been manually deleted\u0027, id)"},{"line_number":2092,"context_line":"            else:"},{"line_number":2093,"context_line":"                if device_owner \u003d\u003d const.DEVICE_OWNER_DVR_INTERFACE:"},{"line_number":2094,"context_line":"                    bindings \u003d db.get_distributed_port_bindings(context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"31ee7c78_47e78331","line":2091,"range":{"start_line":2091,"start_character":29,"end_line":2091,"end_character":63},"in_reply_to":"a755156f_2e8426ea","updated":"2022-09-19 13:49:52.000000000","message":"just meant that who knows if it was manually deleted or it was a hardware issue, or some mystic issue on DB side, or cosmic rays :-)","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"}],"neutron/tests/functional/plugins/ml2/test_plugin.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"af2bcad391286dff6d2b9683ac412d40d0bbe352","unresolved":true,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.api.definitions import portbindings"},{"line_number":18,"context_line":"from neutron_lib import constants"}],"source_content_type":"text/x-python","patch_set":1,"id":"c9cefbe5_b2989c0e","line":15,"in_reply_to":"9c03a7cf_4ff0f424","updated":"2022-09-20 09:02:44.000000000","message":"It should be something like:\n\n    from unittest import mock","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fbbdcc39c3e6d7406412a3d62c0f2c990a18615c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.api.definitions import portbindings"},{"line_number":18,"context_line":"from neutron_lib import constants"}],"source_content_type":"text/x-python","patch_set":1,"id":"6d49fe49_cbd29acf","line":15,"in_reply_to":"c9cefbe5_b2989c0e","updated":"2022-09-22 13:12:52.000000000","message":"Done","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fbbdcc39c3e6d7406412a3d62c0f2c990a18615c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        ports \u003d self._list(\u0027ports\u0027)[\u0027ports\u0027]"},{"line_number":96,"context_line":"        self.assertEqual(1, len(ports))"},{"line_number":97,"context_line":"        self.assertEqual(port_id, ports[0][\u0027id\u0027])"},{"line_number":98,"context_line":"        with db_api.CONTEXT_WRITER.using(self.context) as session:"},{"line_number":99,"context_line":"            port_binding \u003d self.context.session.query("},{"line_number":100,"context_line":"                models.PortBinding).filter("},{"line_number":101,"context_line":"                models.PortBinding.port_id \u003d\u003d port_id).one()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9087531e_6873de94","line":98,"in_reply_to":"1eab6a66_ae0bdb7e","updated":"2022-09-22 13:12:52.000000000","message":"\u003e pep8: F841 local variable \u0027session\u0027 is assigned to but never used\n\nPlease fix.","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fbbdcc39c3e6d7406412a3d62c0f2c990a18615c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        mock_log.warning.assert_called_once_with("},{"line_number":109,"context_line":"            \u0027The port %s has no binding information, the register has been \u0027"},{"line_number":110,"context_line":"            \u0027manually deleted\u0027, port_id)"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a4eae3ba_1c2f6dc6","line":111,"in_reply_to":"6c584b69_1363f33d","updated":"2022-09-22 13:12:52.000000000","message":"\u003e pep8: W391 blank line at end of file\n\nPlease fix.","commit_id":"458ce96a45aa6f4754ca23ed4eb0a2e9df17ff10"}]}
