)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3a79689f11574ceb634983af60fb56c043878341","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     tianquan \u003ctianquan@cloudin.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-03 01:06:18 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Check if the l3 agent support ha router in _schedule_ha_routers_to_additional_agent."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When l3 agent do fullsync, server configured router_auto_schedule will"},{"line_number":10,"context_line":"schedule ha router whose l3 agent count don\u0027t reach"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1aa78d24_5e261dbb","line":7,"updated":"2016-07-04 08:56:24.000000000","message":"This line is too long, \n\"The first line should be limited to 50 characters and should not end with a period.\"","commit_id":"bf75a0ef7f2c3f381321c35df8c97a4e9845a4b1"},{"author":{"_account_id":21249,"name":"Quan Tian","email":"qtian@vmware.com","username":"tianquan"},"change_message_id":"fe83b65c25472355923f500829384a4e3d3cc4f6","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     tianquan \u003ctianquan@cloudin.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-03 01:06:18 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Check if the l3 agent support ha router in _schedule_ha_routers_to_additional_agent."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When l3 agent do fullsync, server configured router_auto_schedule will"},{"line_number":10,"context_line":"schedule ha router whose l3 agent count don\u0027t reach"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1aa78d24_8dd04a55","line":7,"in_reply_to":"1aa78d24_5e261dbb","updated":"2016-07-04 15:04:38.000000000","message":"Done","commit_id":"bf75a0ef7f2c3f381321c35df8c97a4e9845a4b1"}],"neutron/scheduler/l3_agent_scheduler.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3a79689f11574ceb634983af60fb56c043878341","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                return self._schedule_ha_routers_to_additional_agent("},{"line_number":149,"context_line":"                    plugin, context, l3_agent)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        target_routers \u003d self._get_routers_can_schedule("},{"line_number":152,"context_line":"            context, plugin, unscheduled_routers, l3_agent)"},{"line_number":153,"context_line":"        if not target_routers:"},{"line_number":154,"context_line":"            LOG.warning(_LW(\u0027No routers compatible with L3 agent \u0027"},{"line_number":155,"context_line":"                            \u0027configuration on host %s\u0027), host)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_9e7c0574","line":152,"range":{"start_line":151,"start_character":0,"end_line":152,"end_character":59},"updated":"2016-07-04 08:56:24.000000000","message":"I think the right fix should be moving this 2 lines before line 145. This 2 lines will filter out the routers that don\u0027t fix the agent.","commit_id":"bf75a0ef7f2c3f381321c35df8c97a4e9845a4b1"},{"author":{"_account_id":21249,"name":"Quan Tian","email":"qtian@vmware.com","username":"tianquan"},"change_message_id":"fe83b65c25472355923f500829384a4e3d3cc4f6","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                return self._schedule_ha_routers_to_additional_agent("},{"line_number":149,"context_line":"                    plugin, context, l3_agent)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        target_routers \u003d self._get_routers_can_schedule("},{"line_number":152,"context_line":"            context, plugin, unscheduled_routers, l3_agent)"},{"line_number":153,"context_line":"        if not target_routers:"},{"line_number":154,"context_line":"            LOG.warning(_LW(\u0027No routers compatible with L3 agent \u0027"},{"line_number":155,"context_line":"                            \u0027configuration on host %s\u0027), host)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_3d26aeba","line":152,"range":{"start_line":151,"start_character":0,"end_line":152,"end_character":59},"in_reply_to":"1aa78d24_9e7c0574","updated":"2016-07-04 15:04:38.000000000","message":"Thanks! _get_routers_to_schedule() only get routers with no agent binding, ha routers that don\u0027t reach max agents are filtered from all routers in _schedule_ha_routers_to_additional_agent(). So I add _get_routers_can_schedule() after line 307. Then no need to extract the validation function.","commit_id":"bf75a0ef7f2c3f381321c35df8c97a4e9845a4b1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3a79689f11574ceb634983af60fb56c043878341","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        for router, agents in routers_agents:"},{"line_number":311,"context_line":"            max_agents_not_reached \u003d ("},{"line_number":312,"context_line":"                not self.max_ha_agents or agents \u003c self.max_ha_agents)"},{"line_number":313,"context_line":"            if max_agents_not_reached and \\"},{"line_number":314,"context_line":"                    plugin.check_l3_agent_support_router(admin_ctx, agent,"},{"line_number":315,"context_line":"                                                         router):"},{"line_number":316,"context_line":"                if not self._router_has_binding(admin_ctx, router[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_c31d1a11","line":313,"range":{"start_line":313,"start_character":42,"end_line":313,"end_character":43},"updated":"2016-07-04 08:56:24.000000000","message":"pep8 will prefer using brackets for multi-line expression.","commit_id":"bf75a0ef7f2c3f381321c35df8c97a4e9845a4b1"},{"author":{"_account_id":21249,"name":"Quan Tian","email":"qtian@vmware.com","username":"tianquan"},"change_message_id":"fe83b65c25472355923f500829384a4e3d3cc4f6","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        for router, agents in routers_agents:"},{"line_number":311,"context_line":"            max_agents_not_reached \u003d ("},{"line_number":312,"context_line":"                not self.max_ha_agents or agents \u003c self.max_ha_agents)"},{"line_number":313,"context_line":"            if max_agents_not_reached and \\"},{"line_number":314,"context_line":"                    plugin.check_l3_agent_support_router(admin_ctx, agent,"},{"line_number":315,"context_line":"                                                         router):"},{"line_number":316,"context_line":"                if not self._router_has_binding(admin_ctx, router[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_0dde1a6d","line":313,"range":{"start_line":313,"start_character":42,"end_line":313,"end_character":43},"in_reply_to":"1aa78d24_c31d1a11","updated":"2016-07-04 15:04:38.000000000","message":"Done","commit_id":"bf75a0ef7f2c3f381321c35df8c97a4e9845a4b1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"919692c7806f1ede91ada7ff59a7b466cd109a89","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                                                              agent)"},{"line_number":308,"context_line":"        scheduled \u003d False"},{"line_number":309,"context_line":"        admin_ctx \u003d context.elevated()"},{"line_number":310,"context_line":"        target_routers \u003d [router for router, agents in routers_agents"},{"line_number":311,"context_line":"                          if (not self.max_ha_agents or"},{"line_number":312,"context_line":"                              agents \u003c self.max_ha_agents)]"},{"line_number":313,"context_line":"        target_routers \u003d self._get_routers_can_schedule(admin_ctx, plugin,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_90b49282","line":310,"range":{"start_line":310,"start_character":8,"end_line":310,"end_character":22},"updated":"2016-07-06 03:04:56.000000000","message":"It would be better to avoid shadowing the var, for example, changing target_routers to something like not_fully_scheduled_router or else.","commit_id":"ba873eecd2fe61a3ac0e29fb05d45bcd65409ada"},{"author":{"_account_id":21249,"name":"Quan Tian","email":"qtian@vmware.com","username":"tianquan"},"change_message_id":"870230e81933b23806f0289941b896ec1a255f2e","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                                                              agent)"},{"line_number":308,"context_line":"        scheduled \u003d False"},{"line_number":309,"context_line":"        admin_ctx \u003d context.elevated()"},{"line_number":310,"context_line":"        target_routers \u003d [router for router, agents in routers_agents"},{"line_number":311,"context_line":"                          if (not self.max_ha_agents or"},{"line_number":312,"context_line":"                              agents \u003c self.max_ha_agents)]"},{"line_number":313,"context_line":"        target_routers \u003d self._get_routers_can_schedule(admin_ctx, plugin,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_0e451eb2","line":310,"range":{"start_line":310,"start_character":8,"end_line":310,"end_character":22},"in_reply_to":"1aa78d24_90b49282","updated":"2016-07-06 07:26:47.000000000","message":"Done","commit_id":"ba873eecd2fe61a3ac0e29fb05d45bcd65409ada"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"3c4d79dfdd8c882cd30e50e2c02679e8118c7c37","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                                                              agent)"},{"line_number":308,"context_line":"        scheduled \u003d False"},{"line_number":309,"context_line":"        admin_ctx \u003d context.elevated()"},{"line_number":310,"context_line":"        not_fully_scheduled_routers \u003d [router"},{"line_number":311,"context_line":"                                       for router, agents in routers_agents"},{"line_number":312,"context_line":"                                       if (not self.max_ha_agents or"},{"line_number":313,"context_line":"                                           agents \u003c self.max_ha_agents)]"}],"source_content_type":"text/x-python","patch_set":5,"id":"fad55976_191c6276","line":310,"range":{"start_line":310,"start_character":8,"end_line":310,"end_character":35},"updated":"2016-07-17 06:50:36.000000000","message":"Please rename to \u0027underscheduled_routers\u0027","commit_id":"fb4019de60d38aa1ea46ce5ea31083ddf00b12fc"},{"author":{"_account_id":21249,"name":"Quan Tian","email":"qtian@vmware.com","username":"tianquan"},"change_message_id":"259d85dbc0a46a8b20749aa822e12bb319012bc2","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                                                              agent)"},{"line_number":308,"context_line":"        scheduled \u003d False"},{"line_number":309,"context_line":"        admin_ctx \u003d context.elevated()"},{"line_number":310,"context_line":"        not_fully_scheduled_routers \u003d [router"},{"line_number":311,"context_line":"                                       for router, agents in routers_agents"},{"line_number":312,"context_line":"                                       if (not self.max_ha_agents or"},{"line_number":313,"context_line":"                                           agents \u003c self.max_ha_agents)]"}],"source_content_type":"text/x-python","patch_set":5,"id":"dada55a8_0965a9e0","line":310,"range":{"start_line":310,"start_character":8,"end_line":310,"end_character":35},"in_reply_to":"fad55976_191c6276","updated":"2016-07-17 08:52:58.000000000","message":"No problem. Changed","commit_id":"fb4019de60d38aa1ea46ce5ea31083ddf00b12fc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4228b84b3f08d64406998e0c3a26c31aaef3de47","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                                                              agent)"},{"line_number":308,"context_line":"        scheduled \u003d False"},{"line_number":309,"context_line":"        admin_ctx \u003d context.elevated()"},{"line_number":310,"context_line":"        underscheduled_routers \u003d [router for router, agents in routers_agents"},{"line_number":311,"context_line":"                                  if (not self.max_ha_agents or"},{"line_number":312,"context_line":"                                      agents \u003c self.max_ha_agents)]"},{"line_number":313,"context_line":"        schedulable_routers \u003d self._get_routers_can_schedule("}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_18f691d7","line":310,"range":{"start_line":310,"start_character":8,"end_line":310,"end_character":30},"updated":"2016-07-17 19:59:08.000000000","message":"should this be unscheduled_routers?","commit_id":"04c242a3884d66068102a8e71420d8c7aa01787d"},{"author":{"_account_id":21249,"name":"Quan Tian","email":"qtian@vmware.com","username":"tianquan"},"change_message_id":"798ca1d09e8b5db88b3128fb8fca6d2d791c4993","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                                                              agent)"},{"line_number":308,"context_line":"        scheduled \u003d False"},{"line_number":309,"context_line":"        admin_ctx \u003d context.elevated()"},{"line_number":310,"context_line":"        underscheduled_routers \u003d [router for router, agents in routers_agents"},{"line_number":311,"context_line":"                                  if (not self.max_ha_agents or"},{"line_number":312,"context_line":"                                      agents \u003c self.max_ha_agents)]"},{"line_number":313,"context_line":"        schedulable_routers \u003d self._get_routers_can_schedule("}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_e81006ab","line":310,"range":{"start_line":310,"start_character":8,"end_line":310,"end_character":30},"in_reply_to":"dada55a8_18f691d7","updated":"2016-07-18 04:45:54.000000000","message":"unscheduled_routers seems like routers which haven\u0027t been scheduled at all. This var means to represent routers whose l3 agent count didn\u0027t reach max_l3_agents_per_router, including unscheduled and scheduled routers. I don\u0027t find a fair word to represent it，so I followed Hong Hui Xiao and John Schwarz\u0027s generous advices, renamed it not_fully_scheduled_routers and underscheduled_routers successively. Quote from John Schwarz[1], \"under-scheduled\" router - the case where an HA router has been bound to one or more agents, and now it needs to be scheduled to another agent.\n\n[1]:https://review.openstack.org/#/c/317949/","commit_id":"04c242a3884d66068102a8e71420d8c7aa01787d"}],"neutron/tests/unit/scheduler/test_l3_agent_scheduler.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"919692c7806f1ede91ada7ff59a7b466cd109a89","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"    def test_auto_schedule_all_routers_when_agent_added(self):"},{"line_number":1676,"context_line":"        self._auto_schedule_when_agent_added(False)"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"    def test_auto_schedule_all_routers_when_incompatible_agent_exist(self):"},{"line_number":1679,"context_line":"        handle_internal_only_routers_agent \u003d helpers.register_l3_agent("},{"line_number":1680,"context_line":"            \u0027host_3\u0027, n_const.L3_AGENT_MODE_LEGACY, internal_only\u003dFalse)"},{"line_number":1681,"context_line":"        router \u003d self._create_ha_router()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_30383eef","line":1678,"range":{"start_line":1678,"start_character":27,"end_line":1678,"end_character":38},"updated":"2016-07-06 03:04:56.000000000","message":"Maybe more suitable to change from \"all_routers\" to \"ha_router\".","commit_id":"ba873eecd2fe61a3ac0e29fb05d45bcd65409ada"},{"author":{"_account_id":21249,"name":"Quan Tian","email":"qtian@vmware.com","username":"tianquan"},"change_message_id":"870230e81933b23806f0289941b896ec1a255f2e","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"    def test_auto_schedule_all_routers_when_agent_added(self):"},{"line_number":1676,"context_line":"        self._auto_schedule_when_agent_added(False)"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"    def test_auto_schedule_all_routers_when_incompatible_agent_exist(self):"},{"line_number":1679,"context_line":"        handle_internal_only_routers_agent \u003d helpers.register_l3_agent("},{"line_number":1680,"context_line":"            \u0027host_3\u0027, n_const.L3_AGENT_MODE_LEGACY, internal_only\u003dFalse)"},{"line_number":1681,"context_line":"        router \u003d self._create_ha_router()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_ae0a0a77","line":1678,"range":{"start_line":1678,"start_character":27,"end_line":1678,"end_character":38},"in_reply_to":"1aa78d24_30383eef","updated":"2016-07-06 07:26:47.000000000","message":"Done","commit_id":"ba873eecd2fe61a3ac0e29fb05d45bcd65409ada"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"919692c7806f1ede91ada7ff59a7b466cd109a89","unresolved":false,"context_lines":[{"line_number":1695,"context_line":"        self.assertEqual(2, len(agents))"},{"line_number":1696,"context_line":"        self.assertNotIn(handle_internal_only_routers_agent.id, agent_ids)"},{"line_number":1697,"context_line":""},{"line_number":1698,"context_line":"    def test_auto_schedule_all_routers_when_dvr_agent_exist(self):"},{"line_number":1699,"context_line":"        dvr_agent \u003d helpers.register_l3_agent("},{"line_number":1700,"context_line":"            HOST_DVR, n_const.L3_AGENT_MODE_DVR)"},{"line_number":1701,"context_line":"        router \u003d self._create_ha_router()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_903932f5","line":1698,"range":{"start_line":1698,"start_character":27,"end_line":1698,"end_character":38},"updated":"2016-07-06 03:04:56.000000000","message":"ditto","commit_id":"ba873eecd2fe61a3ac0e29fb05d45bcd65409ada"},{"author":{"_account_id":21249,"name":"Quan Tian","email":"qtian@vmware.com","username":"tianquan"},"change_message_id":"870230e81933b23806f0289941b896ec1a255f2e","unresolved":false,"context_lines":[{"line_number":1695,"context_line":"        self.assertEqual(2, len(agents))"},{"line_number":1696,"context_line":"        self.assertNotIn(handle_internal_only_routers_agent.id, agent_ids)"},{"line_number":1697,"context_line":""},{"line_number":1698,"context_line":"    def test_auto_schedule_all_routers_when_dvr_agent_exist(self):"},{"line_number":1699,"context_line":"        dvr_agent \u003d helpers.register_l3_agent("},{"line_number":1700,"context_line":"            HOST_DVR, n_const.L3_AGENT_MODE_DVR)"},{"line_number":1701,"context_line":"        router \u003d self._create_ha_router()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_ee2892e4","line":1698,"range":{"start_line":1698,"start_character":27,"end_line":1698,"end_character":38},"in_reply_to":"1aa78d24_903932f5","updated":"2016-07-06 07:26:47.000000000","message":"Done","commit_id":"ba873eecd2fe61a3ac0e29fb05d45bcd65409ada"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2daa0aa7d5cd9e920449c7fcc569708282643d5f","unresolved":false,"context_lines":[{"line_number":1679,"context_line":"        handle_internal_only_routers_agent \u003d helpers.register_l3_agent("},{"line_number":1680,"context_line":"            \u0027host_3\u0027, n_const.L3_AGENT_MODE_LEGACY, internal_only\u003dFalse)"},{"line_number":1681,"context_line":"        router \u003d self._create_ha_router()"},{"line_number":1682,"context_line":"        agents \u003d self.plugin.get_l3_agents_hosting_routers("},{"line_number":1683,"context_line":"            self.adminContext, [router[\u0027id\u0027]],"},{"line_number":1684,"context_line":"            admin_state_up\u003dTrue)"},{"line_number":1685,"context_line":"        agent_ids \u003d [agent[\u0027id\u0027] for agent in agents]"},{"line_number":1686,"context_line":"        self.assertEqual(2, len(agents))"},{"line_number":1687,"context_line":"        self.assertNotIn(handle_internal_only_routers_agent.id, agent_ids)"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"        self.plugin.auto_schedule_routers("},{"line_number":1690,"context_line":"            self.adminContext, handle_internal_only_routers_agent.host, [])"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_216f8bc6","line":1687,"range":{"start_line":1682,"start_character":8,"end_line":1687,"end_character":74},"updated":"2016-07-19 13:12:48.000000000","message":"why not doing it just once after auto_schedule_routers()?","commit_id":"04c242a3884d66068102a8e71420d8c7aa01787d"},{"author":{"_account_id":21249,"name":"Quan Tian","email":"qtian@vmware.com","username":"tianquan"},"change_message_id":"8d9de381a190bee5d95632aa3a66590ccaa6ba48","unresolved":false,"context_lines":[{"line_number":1679,"context_line":"        handle_internal_only_routers_agent \u003d helpers.register_l3_agent("},{"line_number":1680,"context_line":"            \u0027host_3\u0027, n_const.L3_AGENT_MODE_LEGACY, internal_only\u003dFalse)"},{"line_number":1681,"context_line":"        router \u003d self._create_ha_router()"},{"line_number":1682,"context_line":"        agents \u003d self.plugin.get_l3_agents_hosting_routers("},{"line_number":1683,"context_line":"            self.adminContext, [router[\u0027id\u0027]],"},{"line_number":1684,"context_line":"            admin_state_up\u003dTrue)"},{"line_number":1685,"context_line":"        agent_ids \u003d [agent[\u0027id\u0027] for agent in agents]"},{"line_number":1686,"context_line":"        self.assertEqual(2, len(agents))"},{"line_number":1687,"context_line":"        self.assertNotIn(handle_internal_only_routers_agent.id, agent_ids)"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"        self.plugin.auto_schedule_routers("},{"line_number":1690,"context_line":"            self.adminContext, handle_internal_only_routers_agent.host, [])"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_196a9bee","line":1687,"range":{"start_line":1682,"start_character":8,"end_line":1687,"end_character":74},"in_reply_to":"dada55a8_216f8bc6","updated":"2016-07-20 05:25:33.000000000","message":"It\u0027s unnecessary. Deleted. Thanks!","commit_id":"04c242a3884d66068102a8e71420d8c7aa01787d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2daa0aa7d5cd9e920449c7fcc569708282643d5f","unresolved":false,"context_lines":[{"line_number":1699,"context_line":"        dvr_agent \u003d helpers.register_l3_agent("},{"line_number":1700,"context_line":"            HOST_DVR, n_const.L3_AGENT_MODE_DVR)"},{"line_number":1701,"context_line":"        router \u003d self._create_ha_router()"},{"line_number":1702,"context_line":"        agents \u003d self.plugin.get_l3_agents_hosting_routers("},{"line_number":1703,"context_line":"            self.adminContext, [router[\u0027id\u0027]],"},{"line_number":1704,"context_line":"            admin_state_up\u003dTrue)"},{"line_number":1705,"context_line":"        agent_ids \u003d [agent[\u0027id\u0027] for agent in agents]"},{"line_number":1706,"context_line":"        self.assertEqual(2, len(agents))"},{"line_number":1707,"context_line":"        self.assertNotIn(dvr_agent.id, agent_ids)"},{"line_number":1708,"context_line":""},{"line_number":1709,"context_line":"        self.plugin.auto_schedule_routers(self.adminContext, dvr_agent.host,"},{"line_number":1710,"context_line":"                                          [])"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_616983be","line":1707,"range":{"start_line":1702,"start_character":8,"end_line":1707,"end_character":49},"updated":"2016-07-19 13:12:48.000000000","message":"ditto","commit_id":"04c242a3884d66068102a8e71420d8c7aa01787d"},{"author":{"_account_id":21249,"name":"Quan Tian","email":"qtian@vmware.com","username":"tianquan"},"change_message_id":"8d9de381a190bee5d95632aa3a66590ccaa6ba48","unresolved":false,"context_lines":[{"line_number":1699,"context_line":"        dvr_agent \u003d helpers.register_l3_agent("},{"line_number":1700,"context_line":"            HOST_DVR, n_const.L3_AGENT_MODE_DVR)"},{"line_number":1701,"context_line":"        router \u003d self._create_ha_router()"},{"line_number":1702,"context_line":"        agents \u003d self.plugin.get_l3_agents_hosting_routers("},{"line_number":1703,"context_line":"            self.adminContext, [router[\u0027id\u0027]],"},{"line_number":1704,"context_line":"            admin_state_up\u003dTrue)"},{"line_number":1705,"context_line":"        agent_ids \u003d [agent[\u0027id\u0027] for agent in agents]"},{"line_number":1706,"context_line":"        self.assertEqual(2, len(agents))"},{"line_number":1707,"context_line":"        self.assertNotIn(dvr_agent.id, agent_ids)"},{"line_number":1708,"context_line":""},{"line_number":1709,"context_line":"        self.plugin.auto_schedule_routers(self.adminContext, dvr_agent.host,"},{"line_number":1710,"context_line":"                                          [])"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_d97c83b7","line":1707,"range":{"start_line":1702,"start_character":8,"end_line":1707,"end_character":49},"in_reply_to":"dada55a8_616983be","updated":"2016-07-20 05:25:33.000000000","message":"Done","commit_id":"04c242a3884d66068102a8e71420d8c7aa01787d"}]}
