)]}'
{"neutron/db/l3_agentschedulers_db.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"cbb48b3ebb02490ba855c8686df0cbd49b2207a8","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        Check whether there are DVR serviceable ports owned by the host of"},{"line_number":180,"context_line":"        a l3 agent. If so, then the routers should be retained."},{"line_number":181,"context_line":"        \"\"\""},{"line_number":182,"context_line":"        retain_router \u003d False"},{"line_number":183,"context_line":"        plugin \u003d directory.get_plugin(plugin_constants.L3)"},{"line_number":184,"context_line":"        router \u003d self.get_router(context, router_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_2cac3535","line":181,"updated":"2018-07-11 14:13:53.000000000","message":"Since retain_router is only ever updated if there is a subnet *and* host is valid, let\u0027s optimize and short-circuit here:\n\nif not host:\n    return False","commit_id":"28e8207095a670bb99e70227ecdbc77f9c3a5cd6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"cbb48b3ebb02490ba855c8686df0cbd49b2207a8","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        a l3 agent. If so, then the routers should be retained."},{"line_number":181,"context_line":"        \"\"\""},{"line_number":182,"context_line":"        retain_router \u003d False"},{"line_number":183,"context_line":"        plugin \u003d directory.get_plugin(plugin_constants.L3)"},{"line_number":184,"context_line":"        router \u003d self.get_router(context, router_id)"},{"line_number":185,"context_line":"        if router.get(\u0027distributed\u0027):"},{"line_number":186,"context_line":"            subnet_ids \u003d plugin.get_subnet_ids_on_router(context, router_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_6c99cd1c","line":183,"updated":"2018-07-11 14:13:53.000000000","message":"I would move this to right before L186 since it\u0027s not needed otherwise.","commit_id":"28e8207095a670bb99e70227ecdbc77f9c3a5cd6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"cbb48b3ebb02490ba855c8686df0cbd49b2207a8","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        router \u003d self.get_router(context, router_id)"},{"line_number":185,"context_line":"        if router.get(\u0027distributed\u0027):"},{"line_number":186,"context_line":"            subnet_ids \u003d plugin.get_subnet_ids_on_router(context, router_id)"},{"line_number":187,"context_line":"            if subnet_ids and host:"},{"line_number":188,"context_line":"                retain_router \u003d plugin._check_dvr_serviceable_ports_on_host("},{"line_number":189,"context_line":"                    context, host, subnet_ids)"},{"line_number":190,"context_line":"        return retain_router"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_ac5da555","line":187,"range":{"start_line":187,"start_character":25,"end_line":187,"end_character":34},"updated":"2018-07-11 14:13:53.000000000","message":"This can go away based on my other comment","commit_id":"28e8207095a670bb99e70227ecdbc77f9c3a5cd6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"43c61cce9ccb89825cae5cdebbc8b3abf3006ea9","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        # to check if there are valid routers in this agent."},{"line_number":215,"context_line":"        retain_router \u003d self._check_router_retain_needed(context, router,"},{"line_number":216,"context_line":"            agent.host)"},{"line_number":217,"context_line":"        l3_notifier \u003d self.agent_notifiers.get(constants.AGENT_TYPE_L3)"},{"line_number":218,"context_line":"        if retain_router and l3_notifier:"},{"line_number":219,"context_line":"            l3_notifier.routers_updated_on_host("},{"line_number":220,"context_line":"                context, [router_id], agent.host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_3b9d4458","line":217,"updated":"2018-07-11 20:29:23.000000000","message":"I created a follow-on patch to move this check up a little, since if there is no notifier there is no need to check if the router needs to be retained, https://review.openstack.org/581879","commit_id":"c56fd4a58b0a214388b7b44490da8cac5e61a09d"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"4803146b55c94846614a2fb34902df2d1821231c","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        # to check if there are valid routers in this agent."},{"line_number":215,"context_line":"        retain_router \u003d self._check_router_retain_needed(context, router,"},{"line_number":216,"context_line":"            agent.host)"},{"line_number":217,"context_line":"        l3_notifier \u003d self.agent_notifiers.get(constants.AGENT_TYPE_L3)"},{"line_number":218,"context_line":"        if retain_router and l3_notifier:"},{"line_number":219,"context_line":"            l3_notifier.routers_updated_on_host("},{"line_number":220,"context_line":"                context, [router_id], agent.host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_b1e3b53a","line":217,"in_reply_to":"5f7c97a3_3b9d4458","updated":"2018-07-11 22:22:04.000000000","message":"Yes, indeed. Good catch!","commit_id":"c56fd4a58b0a214388b7b44490da8cac5e61a09d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4f4380b91f8cac72c658bb131dfc7c897686251a","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            return False"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        retain_router \u003d False"},{"line_number":186,"context_line":"        if router.get(\u0027distributed\u0027):"},{"line_number":187,"context_line":"            plugin \u003d directory.get_plugin(plugin_constants.L3)"},{"line_number":188,"context_line":"            subnet_ids \u003d plugin.get_subnet_ids_on_router(context, router[\u0027id\u0027])"},{"line_number":189,"context_line":"            if subnet_ids:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_3e0164b6","line":186,"updated":"2018-07-16 08:35:49.000000000","message":"nit: this could be moved to L182 also as \"not host or not router.get(\u0027distributed\u0027)\"\nThen You would not need \"retain_router\" variable and can do \"return plugin._check_dvr....()\" directly in L190","commit_id":"8b16b53b5b54b2ad8521b6c6c22660fab30e1b0d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0dc77a5c6e1b5ac642563b127a3d17355cb0123d","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            return False"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        retain_router \u003d False"},{"line_number":186,"context_line":"        if router.get(\u0027distributed\u0027):"},{"line_number":187,"context_line":"            plugin \u003d directory.get_plugin(plugin_constants.L3)"},{"line_number":188,"context_line":"            subnet_ids \u003d plugin.get_subnet_ids_on_router(context, router[\u0027id\u0027])"},{"line_number":189,"context_line":"            if subnet_ids:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_d1261568","line":186,"in_reply_to":"5f7c97a3_3e0164b6","updated":"2018-07-16 18:39:58.000000000","message":"https://review.openstack.org/583015 :)","commit_id":"8b16b53b5b54b2ad8521b6c6c22660fab30e1b0d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6a4f44d95483b5ae61f27d5140ed0c5aabfae243","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            return False"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        retain_router \u003d False"},{"line_number":186,"context_line":"        if router.get(\u0027distributed\u0027):"},{"line_number":187,"context_line":"            plugin \u003d directory.get_plugin(plugin_constants.L3)"},{"line_number":188,"context_line":"            subnet_ids \u003d plugin.get_subnet_ids_on_router(context, router[\u0027id\u0027])"},{"line_number":189,"context_line":"            if subnet_ids:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_a41a2768","line":186,"in_reply_to":"5f7c97a3_ab067d1a","updated":"2018-07-17 08:07:52.000000000","message":"Thx :)","commit_id":"8b16b53b5b54b2ad8521b6c6c22660fab30e1b0d"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"e32e89b240718bf96a069b92e07e7e5723df6a31","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            return False"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        retain_router \u003d False"},{"line_number":186,"context_line":"        if router.get(\u0027distributed\u0027):"},{"line_number":187,"context_line":"            plugin \u003d directory.get_plugin(plugin_constants.L3)"},{"line_number":188,"context_line":"            subnet_ids \u003d plugin.get_subnet_ids_on_router(context, router[\u0027id\u0027])"},{"line_number":189,"context_line":"            if subnet_ids:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_ab067d1a","line":186,"in_reply_to":"5f7c97a3_d1261568","updated":"2018-07-17 00:12:26.000000000","message":"Good catch, thank you both!","commit_id":"8b16b53b5b54b2ad8521b6c6c22660fab30e1b0d"}],"neutron/tests/unit/db/test_agentschedulers_db.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"43c61cce9ccb89825cae5cdebbc8b3abf3006ea9","unresolved":false,"context_lines":[{"line_number":868,"context_line":"            return_value\u003dl3_notifier.client) as mock_prepare, \\"},{"line_number":869,"context_line":"                mock.patch.object(l3_notifier.client, \u0027cast\u0027) as mock_cast, \\"},{"line_number":870,"context_line":"                mock.patch.object(l3_notifier.client, \u0027call\u0027), \\"},{"line_number":871,"context_line":"                self.subnet() as s:"},{"line_number":872,"context_line":"            net_id \u003d s[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":873,"context_line":"            self._set_net_external(net_id)"},{"line_number":874,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_3bca246f","line":871,"updated":"2018-07-11 20:29:23.000000000","message":"I found this a little hard to follow because the indentation is different, perhaps:\n\n         with self.subnet() as s, \\\n                 mock.patch.object(l3_notifier.client, \u0027prepare\u0027,\n                     return_value\u003dl3_notifier.client) as mock_prepare, \\\n                 mock.patch.object(l3_notifier.client, \u0027cast\u0027) as mock_cast, \\\n                 mock.patch.object(l3_notifier.client, \u0027call\u0027):","commit_id":"c56fd4a58b0a214388b7b44490da8cac5e61a09d"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"4803146b55c94846614a2fb34902df2d1821231c","unresolved":false,"context_lines":[{"line_number":868,"context_line":"            return_value\u003dl3_notifier.client) as mock_prepare, \\"},{"line_number":869,"context_line":"                mock.patch.object(l3_notifier.client, \u0027cast\u0027) as mock_cast, \\"},{"line_number":870,"context_line":"                mock.patch.object(l3_notifier.client, \u0027call\u0027), \\"},{"line_number":871,"context_line":"                self.subnet() as s:"},{"line_number":872,"context_line":"            net_id \u003d s[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":873,"context_line":"            self._set_net_external(net_id)"},{"line_number":874,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_11138903","line":871,"in_reply_to":"5f7c97a3_3bca246f","updated":"2018-07-11 22:22:04.000000000","message":"Yes, this is better.","commit_id":"c56fd4a58b0a214388b7b44490da8cac5e61a09d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"43c61cce9ccb89825cae5cdebbc8b3abf3006ea9","unresolved":false,"context_lines":[{"line_number":891,"context_line":"                ports_exist.return_value \u003d True"},{"line_number":892,"context_line":"                # reschedule the dvr to one of the other agent"},{"line_number":893,"context_line":"                candidate_agent \u003d agent_b if (agent[\u0027host\u0027] \u003d\u003d L3_HOSTA) \\"},{"line_number":894,"context_line":"                    else agent_a"},{"line_number":895,"context_line":"                self.l3plugin.reschedule_router(self.adminContext, r[\u0027id\u0027],"},{"line_number":896,"context_line":"                        candidates\u003d[candidate_agent])"},{"line_number":897,"context_line":"                # make sure dvr serviceable ports are checked when rescheduling"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_fb982c77","line":894,"updated":"2018-07-11 20:29:23.000000000","message":"nit, can remove backslash and extra parens:\n\n                 candidate_agent \u003d (agent_b if agent[\u0027host\u0027] \u003d\u003d L3_HOSTA\n                                    else agent_a)","commit_id":"c56fd4a58b0a214388b7b44490da8cac5e61a09d"},{"author":{"_account_id":28373,"name":"Kailun Qin","email":"kailun.qin@hotmail.com","username":"kailun.qin"},"change_message_id":"4803146b55c94846614a2fb34902df2d1821231c","unresolved":false,"context_lines":[{"line_number":891,"context_line":"                ports_exist.return_value \u003d True"},{"line_number":892,"context_line":"                # reschedule the dvr to one of the other agent"},{"line_number":893,"context_line":"                candidate_agent \u003d agent_b if (agent[\u0027host\u0027] \u003d\u003d L3_HOSTA) \\"},{"line_number":894,"context_line":"                    else agent_a"},{"line_number":895,"context_line":"                self.l3plugin.reschedule_router(self.adminContext, r[\u0027id\u0027],"},{"line_number":896,"context_line":"                        candidates\u003d[candidate_agent])"},{"line_number":897,"context_line":"                # make sure dvr serviceable ports are checked when rescheduling"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_b1cdf593","line":894,"in_reply_to":"5f7c97a3_fb982c77","updated":"2018-07-11 22:22:04.000000000","message":"Accept.","commit_id":"c56fd4a58b0a214388b7b44490da8cac5e61a09d"}]}
