)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"2ee8584c5e6af420c57146e472415c047d20e772","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use neutron lib project\u0027s Invalid exception type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"And it also fixes the _flavor_plugin_ref attribute name"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Partially-Implements: blueprint multi-l3-backends"},{"line_number":12,"context_line":"Closes-Bug: #1612183"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I76ab8b3a99d4459a24a8e43223e0c13654395216"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3ac371cc_edd1ebce","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":49},"updated":"2016-08-16 09:33:33.000000000","message":"These comments are useless now. Could you remove?","commit_id":"c875f5f73052d490b9df86f43197b283d43a2ca9"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"334ec5c7e253cc8b3e9edea19a3fce06afd3419d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use neutron lib project\u0027s Invalid exception type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"And it also fixes the _flavor_plugin_ref attribute name"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Partially-Implements: blueprint multi-l3-backends"},{"line_number":12,"context_line":"Closes-Bug: #1612183"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I76ab8b3a99d4459a24a8e43223e0c13654395216"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3ac371cc_a325140a","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":49},"in_reply_to":"3ac371cc_edd1ebce","updated":"2016-08-17 02:07:00.000000000","message":"Done","commit_id":"c875f5f73052d490b9df86f43197b283d43a2ca9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"46915bb1f324809d97dd135e66a4014a470a6af5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Use neutron lib project\u0027s Invalid exception type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Partially-Implements: blueprint multi-l3-backends"},{"line_number":10,"context_line":"Closes-Bug: #1612183"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I76ab8b3a99d4459a24a8e43223e0c13654395216"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1ac06dbe_46ce4bb5","line":10,"updated":"2016-08-24 22:09:18.000000000","message":"You noted in bug 1612186 that the fix was merged to this one. Would you please add a line to the commit message:\n\nCloses-Bug: #1612186","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"3c24bbbeddb538e8e2b1e6ec5b52a10182f35afd","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Use neutron lib project\u0027s Invalid exception type"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Partially-Implements: blueprint multi-l3-backends"},{"line_number":10,"context_line":"Closes-Bug: #1612183"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I76ab8b3a99d4459a24a8e43223e0c13654395216"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1ac06dbe_827301b4","line":10,"in_reply_to":"1ac06dbe_46ce4bb5","updated":"2016-08-25 03:59:05.000000000","message":"I have restored the patch which is used to close 1612186 according to someone\u0027s comment.\nhttps://review.openstack.org/#/c/353981/","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"}],"neutron/services/l3_router/service_providers/driver_controller.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b75c68b10cb48f1b889570a9377b836d882367ac","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    def _flavor_plugin(self):"},{"line_number":66,"context_line":"        if not hasattr(self, \u0027_flavor_plugin_ref\u0027):"},{"line_number":67,"context_line":"            _service_plugins \u003d manager.NeutronManager.get_service_plugins()"},{"line_number":68,"context_line":"            self._flavor_plugin_ref \u003d _service_plugins[constants.FLAVORS]"},{"line_number":69,"context_line":"        return self._flavor_plugin_ref"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _set_router_provider(self, resource, event, trigger, context, router,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7ac969e8_43965995","line":68,"updated":"2016-08-13 02:41:12.000000000","message":"This should be split into it\u0027s own patch","commit_id":"d3b65142446c1f4a2d8dc5c71ccffe10abe02c51"}],"neutron/tests/unit/services/l3_router/service_providers/test_driver_controller.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5ce47c6513bc9545660b74c25e34ad89d4ee4c5e","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"from mock import patch"},{"line_number":17,"context_line":"from neutron_lib import constants"},{"line_number":18,"context_line":"from neutron_lib import exceptions as lib_exc"},{"line_number":19,"context_line":"import testtools"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_acaad082","line":16,"updated":"2016-08-23 21:48:19.000000000","message":"why ?","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"59b9e2c9fa259a4473e6acbc709341b8d26b8e75","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"from mock import patch"},{"line_number":17,"context_line":"from neutron_lib import constants"},{"line_number":18,"context_line":"from neutron_lib import exceptions as lib_exc"},{"line_number":19,"context_line":"import testtools"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_89acd436","line":16,"in_reply_to":"1ac06dbe_8893775a","updated":"2016-08-24 22:54:30.000000000","message":"It\u0027s just not necessary the import of the entire module already. This is also the only file doing it.","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"897b237574d9de78b6769c49718afaa03b0effc3","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"from mock import patch"},{"line_number":17,"context_line":"from neutron_lib import constants"},{"line_number":18,"context_line":"from neutron_lib import exceptions as lib_exc"},{"line_number":19,"context_line":"import testtools"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_c92542af","line":16,"in_reply_to":"1ac06dbe_8893775a","updated":"2016-08-25 22:25:57.000000000","message":"We actually have a hacking rule to only import modules. It may not be applied to the test sub-tree but so far we have followed it anyway.\n\nIf you want to keep lines short you can define\n\n  patch \u003d mock.patch\n\nafter the import.","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"eaf6a49f903c70120c01cbbe0a0e567a515d86da","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"from mock import patch"},{"line_number":17,"context_line":"from neutron_lib import constants"},{"line_number":18,"context_line":"from neutron_lib import exceptions as lib_exc"},{"line_number":19,"context_line":"import testtools"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_8893775a","line":16,"in_reply_to":"1ac06dbe_acaad082","updated":"2016-08-24 00:57:26.000000000","message":"to make the code line shorter","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5ce47c6513bc9545660b74c25e34ad89d4ee4c5e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                                                          \u0027router_id\u0027))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test__update_router_provider_invalid(self):"},{"line_number":55,"context_line":"        test_dc \u003d driver_controller.DriverController(self.fake_l3)"},{"line_number":56,"context_line":"        with patch.object(test_dc, \"_get_provider_for_router\"):"},{"line_number":57,"context_line":"            with patch.object(driver_controller, \"_flavor_specified\") as _fl:"},{"line_number":58,"context_line":"                _fl.return_value \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_0f7cb6b3","line":55,"updated":"2016-08-23 21:48:19.000000000","message":"self.dc was already assigned to this","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5ce47c6513bc9545660b74c25e34ad89d4ee4c5e","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def test__update_router_provider_invalid(self):"},{"line_number":55,"context_line":"        test_dc \u003d driver_controller.DriverController(self.fake_l3)"},{"line_number":56,"context_line":"        with patch.object(test_dc, \"_get_provider_for_router\"):"},{"line_number":57,"context_line":"            with patch.object(driver_controller, \"_flavor_specified\") as _fl:"},{"line_number":58,"context_line":"                _fl.return_value \u003d False"},{"line_number":59,"context_line":"                with patch.object("}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_8cad549d","line":56,"updated":"2016-08-23 21:48:19.000000000","message":"mock.patch.object\n\nsame throughout","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5ce47c6513bc9545660b74c25e34ad89d4ee4c5e","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                        lib_exc.Invalid,"},{"line_number":65,"context_line":"                        test_dc._update_router_provider,"},{"line_number":66,"context_line":"                        None, None, None, None,"},{"line_number":67,"context_line":"                        None, None, {\u0027flavor_id\u0027: \u0027old_fid\u0027}, None)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def test__set_router_provider_attr_lookups(self):"},{"line_number":70,"context_line":"        # ensure correct drivers are looked up based on attrs"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_aaf2b003","line":67,"updated":"2016-08-23 21:48:19.000000000","message":"I don\u0027t like all the mocking in this test, seems like it could be more like the method right above this with very few side-effects.","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"e9076429d56baf76309574ea7314eef5deed69ff","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                        lib_exc.Invalid,"},{"line_number":65,"context_line":"                        test_dc._update_router_provider,"},{"line_number":66,"context_line":"                        None, None, None, None,"},{"line_number":67,"context_line":"                        None, None, {\u0027flavor_id\u0027: \u0027old_fid\u0027}, None)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def test__set_router_provider_attr_lookups(self):"},{"line_number":70,"context_line":"        # ensure correct drivers are looked up based on attrs"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_a2243daf","line":67,"in_reply_to":"1ac06dbe_44fe4306","updated":"2016-08-25 03:57:13.000000000","message":"Done","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"59b9e2c9fa259a4473e6acbc709341b8d26b8e75","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                        lib_exc.Invalid,"},{"line_number":65,"context_line":"                        test_dc._update_router_provider,"},{"line_number":66,"context_line":"                        None, None, None, None,"},{"line_number":67,"context_line":"                        None, None, {\u0027flavor_id\u0027: \u0027old_fid\u0027}, None)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def test__set_router_provider_attr_lookups(self):"},{"line_number":70,"context_line":"        # ensure correct drivers are looked up based on attrs"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_44fe4306","line":67,"in_reply_to":"1ac06dbe_88cff754","updated":"2016-08-24 22:54:30.000000000","message":"Right, but mocking all these private methods makes this a fragile test that\u0027s going to be harder to support.","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"eaf6a49f903c70120c01cbbe0a0e567a515d86da","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                        lib_exc.Invalid,"},{"line_number":65,"context_line":"                        test_dc._update_router_provider,"},{"line_number":66,"context_line":"                        None, None, None, None,"},{"line_number":67,"context_line":"                        None, None, {\u0027flavor_id\u0027: \u0027old_fid\u0027}, None)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def test__set_router_provider_attr_lookups(self):"},{"line_number":70,"context_line":"        # ensure correct drivers are looked up based on attrs"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_88cff754","line":67,"in_reply_to":"1ac06dbe_aaf2b003","updated":"2016-08-24 00:57:26.000000000","message":"I am not sure I can follow you. This method is just to test the invalid exception raised by \u0027_ensure_driver_supports_request\u0027 is catched by _update_router_provider and it will rerraise a new one.","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5ce47c6513bc9545660b74c25e34ad89d4ee4c5e","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            mock_method.side_effect \u003d lib_exc.Invalid(message\u003d\u0027message\u0027)"},{"line_number":119,"context_line":"            with patch.object(driver_controller, \"LOG\") as _log:"},{"line_number":120,"context_line":"                driver_controller._LegacyPlusProviderConfiguration()"},{"line_number":121,"context_line":"                self.assertTrue(_log.debug.called)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_ea98287a","line":121,"updated":"2016-08-23 21:48:19.000000000","message":"I don\u0027t like this test either, since it\u0027s not verifying the specific LOG.debug() that might be triggered.","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"e9076429d56baf76309574ea7314eef5deed69ff","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            mock_method.side_effect \u003d lib_exc.Invalid(message\u003d\u0027message\u0027)"},{"line_number":119,"context_line":"            with patch.object(driver_controller, \"LOG\") as _log:"},{"line_number":120,"context_line":"                driver_controller._LegacyPlusProviderConfiguration()"},{"line_number":121,"context_line":"                self.assertTrue(_log.debug.called)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_4e065521","line":121,"in_reply_to":"1ac06dbe_84a4bb08","updated":"2016-08-25 03:57:13.000000000","message":"Brian Haley, compared to the codes before this patch, the new patch can work since we fix the exception class. The old codes will fail at line driver_controller._LegacyPlusProviderConfiguration()\n\n\nI am thinking the assertTrue(log.debug.called) is not the essential part of this change.","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"59b9e2c9fa259a4473e6acbc709341b8d26b8e75","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            mock_method.side_effect \u003d lib_exc.Invalid(message\u003d\u0027message\u0027)"},{"line_number":119,"context_line":"            with patch.object(driver_controller, \"LOG\") as _log:"},{"line_number":120,"context_line":"                driver_controller._LegacyPlusProviderConfiguration()"},{"line_number":121,"context_line":"                self.assertTrue(_log.debug.called)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_84a4bb08","line":121,"in_reply_to":"1ac06dbe_e8482bce","updated":"2016-08-24 22:54:30.000000000","message":"I don\u0027t have a good answer at the moment, but if some other LOG.debug was added to this class and the current one removed, this test could still pass.  So it\u0027s not verifying much.","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"eaf6a49f903c70120c01cbbe0a0e567a515d86da","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            mock_method.side_effect \u003d lib_exc.Invalid(message\u003d\u0027message\u0027)"},{"line_number":119,"context_line":"            with patch.object(driver_controller, \"LOG\") as _log:"},{"line_number":120,"context_line":"                driver_controller._LegacyPlusProviderConfiguration()"},{"line_number":121,"context_line":"                self.assertTrue(_log.debug.called)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_e8482bce","line":121,"in_reply_to":"1ac06dbe_ea98287a","updated":"2016-08-24 00:57:26.000000000","message":"what is your way, please?","commit_id":"9ed740692f18614da2a82fa943c4ff90a95e85c2"}]}
