)]}'
{"neutron/db/db_base_plugin_v2.py":[{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"ea1c8e3a8d9263e0c202466df1b8e5f7976d3cf7","unresolved":false,"context_lines":[{"line_number":1360,"context_line":"            try:"},{"line_number":1361,"context_line":"                self.delete_port(context, port_id)"},{"line_number":1362,"context_line":"            except n_exc.PortNotFound:"},{"line_number":1363,"context_line":"                # Don\u0027t raise if something else concurrently deleted the port"},{"line_number":1364,"context_line":"                pass"},{"line_number":1365,"context_line":""},{"line_number":1366,"context_line":"    def _delete_port(self, context, id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FaXU%3D","line":1363,"updated":"2014-03-18 02:25:28.000000000","message":"would it make sense to debug log here?","commit_id":"4e3d68d4cea4521cd847dabc401bcfbf5ad9e3a2"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c57396ec1e584190ec1a6f4cf406f6a9b264ab2c","unresolved":false,"context_lines":[{"line_number":1360,"context_line":"            try:"},{"line_number":1361,"context_line":"                self.delete_port(context, port_id)"},{"line_number":1362,"context_line":"            except n_exc.PortNotFound:"},{"line_number":1363,"context_line":"                # Don\u0027t raise if something else concurrently deleted the port"},{"line_number":1364,"context_line":"                pass"},{"line_number":1365,"context_line":""},{"line_number":1366,"context_line":"    def _delete_port(self, context, id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FaVM%3D","line":1363,"in_reply_to":"AAAAWH%2F%2FaXU%3D","updated":"2014-03-18 02:32:33.000000000","message":"Done","commit_id":"4e3d68d4cea4521cd847dabc401bcfbf5ad9e3a2"},{"author":{"_account_id":8279,"name":"Fawad Khaliq","email":"fawadkq@gmail.com","username":"fawadkhaliq"},"change_message_id":"4df9def271ec5b27224c5a2493b272c12bd8707c","unresolved":false,"context_lines":[{"line_number":1361,"context_line":"                self.delete_port(context, port_id)"},{"line_number":1362,"context_line":"            except n_exc.PortNotFound:"},{"line_number":1363,"context_line":"                # Don\u0027t raise if something else concurrently deleted the port"},{"line_number":1364,"context_line":"                LOG.debug(_(\"Ignoring PortNotFound when deleting port \u0027%s\u0027\"),"},{"line_number":1365,"context_line":"                          port_id)"},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"    def _delete_port(self, context, id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2FZsk%3D","line":1364,"updated":"2014-03-18 04:59:30.000000000","message":"This could be a misleading debug statement for an already deleted port. Please have something which indicates the port is already deleted.","commit_id":"ecf09e03bb6f498b790fa52b8a874f0290dbb26e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8f904d9af2e71065725cba933c1ace6a6c4c5b03","unresolved":false,"context_lines":[{"line_number":1361,"context_line":"                self.delete_port(context, port_id)"},{"line_number":1362,"context_line":"            except n_exc.PortNotFound:"},{"line_number":1363,"context_line":"                # Don\u0027t raise if something else concurrently deleted the port"},{"line_number":1364,"context_line":"                LOG.debug(_(\"Ignoring PortNotFound when deleting port \u0027%s\u0027\"),"},{"line_number":1365,"context_line":"                          port_id)"},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"    def _delete_port(self, context, id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2FZps%3D","line":1364,"in_reply_to":"AAAAWH%2F%2FZsk%3D","updated":"2014-03-18 05:10:50.000000000","message":"Done","commit_id":"ecf09e03bb6f498b790fa52b8a874f0290dbb26e"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"33404390899e1952d612b8595619a472f28df0f5","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"                # Don\u0027t raise if something else concurrently deleted the port"},{"line_number":1364,"context_line":"                LOG.debug(_(\"Ignoring PortNotFound when deleting port \u0027%s\u0027. \""},{"line_number":1365,"context_line":"                            \"The port has already been deleted.\"),"},{"line_number":1366,"context_line":"                          port_id)"},{"line_number":1367,"context_line":""},{"line_number":1368,"context_line":"    def _delete_port(self, context, id):"},{"line_number":1369,"context_line":"        query \u003d (context.session.query(models_v2.Port)."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FYro%3D","line":1366,"updated":"2014-03-18 08:09:14.000000000","message":"I believe if it reached here, the port had existed at some point, so this is good.","commit_id":"4d18154aa8b075363ac52914e3f330db7cc04308"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d47f31ff06a31067f04416a061044405f16bcddc","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"                # Don\u0027t raise if something else concurrently deleted the port"},{"line_number":1364,"context_line":"                LOG.debug(_(\"Ignoring PortNotFound when deleting port \u0027%s\u0027. \""},{"line_number":1365,"context_line":"                            \"The port has already been deleted.\"),"},{"line_number":1366,"context_line":"                          port_id)"},{"line_number":1367,"context_line":""},{"line_number":1368,"context_line":"    def _delete_port(self, context, id):"},{"line_number":1369,"context_line":"        query \u003d (context.session.query(models_v2.Port)."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FPoE%3D","line":1366,"in_reply_to":"AAAAWH%2F%2FYro%3D","updated":"2014-03-19 06:25:29.000000000","message":"Agree with this change.\n\nHonestly the original behavior of delete_ports_by_device_id is as intended, and it is a good improvement. The original delete_ports (before delete_ports_by_device_id) failed to delete all ports if some port is not found, and delete_ports_by_device_id behaves similar though there is some difference.","commit_id":"4d18154aa8b075363ac52914e3f330db7cc04308"}],"neutron/tests/unit/cisco/test_network_plugin.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"16df3fb5802977e026e3cb8449e756f76b672923","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        plugin_ref \u003d self._get_plugin_ref()"},{"line_number":864,"context_line":"        self._test_delete_ports_by_device_id_second_call_failure(plugin_ref)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_delete_ports_ignores_port_not_found(self):"},{"line_number":867,"context_line":"        plugin_ref \u003d self._get_plugin_ref()"},{"line_number":868,"context_line":"        self._test_delete_ports_ignores_port_not_found(plugin_ref)"},{"line_number":869,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FP%2BE%3D","line":866,"updated":"2014-03-19 05:47:47.000000000","message":"Why is this needed?","commit_id":"4d18154aa8b075363ac52914e3f330db7cc04308"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"30ca52f5bf8697cd541939bfa2602e16ce2d18c0","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        plugin_ref \u003d self._get_plugin_ref()"},{"line_number":864,"context_line":"        self._test_delete_ports_by_device_id_second_call_failure(plugin_ref)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_delete_ports_ignores_port_not_found(self):"},{"line_number":867,"context_line":"        plugin_ref \u003d self._get_plugin_ref()"},{"line_number":868,"context_line":"        self._test_delete_ports_ignores_port_not_found(plugin_ref)"},{"line_number":869,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FPzo%3D","line":866,"in_reply_to":"AAAAWH%2F%2FP%2BE%3D","updated":"2014-03-19 06:03:43.000000000","message":"The default in the parent class that just calls NeutronManager.get_plugin() doesn\u0027t work for these Cisco unit tests. In these tests, the plugin reference is stored in an attribute of the result of get_plugin(). I\u0027m not sure of the exact reason for this design.","commit_id":"4d18154aa8b075363ac52914e3f330db7cc04308"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"c1b81ab8f034bd61bf05043bc3bdebcae43e1ead","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        plugin_ref \u003d self._get_plugin_ref()"},{"line_number":864,"context_line":"        self._test_delete_ports_by_device_id_second_call_failure(plugin_ref)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_delete_ports_ignores_port_not_found(self):"},{"line_number":867,"context_line":"        plugin_ref \u003d self._get_plugin_ref()"},{"line_number":868,"context_line":"        self._test_delete_ports_ignores_port_not_found(plugin_ref)"},{"line_number":869,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FNdQ%3D","line":866,"in_reply_to":"AAAAWH%2F%2FPpY%3D","updated":"2014-03-19 12:40:30.000000000","message":"The reason is that the Cisco network plugin is a wrapper for sub-plugins, and it delegates many methods to it\u0027s configured sub-plugins. This dedicated test logic here is fine.","commit_id":"4d18154aa8b075363ac52914e3f330db7cc04308"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d47f31ff06a31067f04416a061044405f16bcddc","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        plugin_ref \u003d self._get_plugin_ref()"},{"line_number":864,"context_line":"        self._test_delete_ports_by_device_id_second_call_failure(plugin_ref)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_delete_ports_ignores_port_not_found(self):"},{"line_number":867,"context_line":"        plugin_ref \u003d self._get_plugin_ref()"},{"line_number":868,"context_line":"        self._test_delete_ports_ignores_port_not_found(plugin_ref)"},{"line_number":869,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FPpY%3D","line":866,"in_reply_to":"AAAAWH%2F%2FPzo%3D","updated":"2014-03-19 06:25:29.000000000","message":"Yes. As Kevin commented, Cisco network plugin does not have delete_port attribute as a plugin level and a method is determined by __getattribute__ dynamically. When I wrote a test for delete_ports_by_device_id, I explored a way to avoid dedicated logic but I have no idea so far...","commit_id":"4d18154aa8b075363ac52914e3f330db7cc04308"}]}
