)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"36acd8c096b7b0ca5c767bda0d8d26b3dc17c98e","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The idea is to align dvr scheduling with legacy router scheduling:"},{"line_number":18,"context_line":"only schedule SNAT portion of the router and use DB queries whenever"},{"line_number":19,"context_line":"we need to know which compute nodes should host the router."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Implements blueprint improve-dvr-l3-agent-binding"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a7b0d38_649d90bb","line":19,"range":{"start_line":19,"start_character":58,"end_line":19,"end_character":59},"updated":"2015-12-27 09:19:58.000000000","message":"Question:\n\n1, shall we also need simplify agent_mode type from previous three types to two: centralized and local(the first one stands for legacy and dvr_snat, and the second one only stands for dvr)?\n\n2, what makes we still need special agent_mode types for DVR, seems we have enable_distributed_routing\u003dTrue/False, l2_population\u003dTrue/False to check if a agent can be scheduled with a DVR router or not. Any key reasons, I may not get a clear insight, so I\u0027m curious on this.","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"d6023db923c2863776b8712e7bdccc327c11db16","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The idea is to align dvr scheduling with legacy router scheduling:"},{"line_number":18,"context_line":"only schedule SNAT portion of the router and use DB queries whenever"},{"line_number":19,"context_line":"we need to know which compute nodes should host the router."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Implements blueprint improve-dvr-l3-agent-binding"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a7b0d38_d46aceec","line":19,"range":{"start_line":19,"start_character":58,"end_line":19,"end_character":59},"in_reply_to":"1a7b0d38_0a927cf6","updated":"2015-12-29 03:10:27.000000000","message":"1. So legacy mode is for a agent who doesn\u0027t get enough support for DVR?\n\n2. Yes, I can see that. And my point is, agent mode L3_AGENT_MODE_DVR_SNAT seems still needed, but I\u0027m not sure L3_AGENT_MODE_DVR, since we are going to use methods like is_dvr_serviced, it seems server side don\u0027t care if agent_mode is L3_AGENT_MODE_DVR any more.\nFrom [1], seems agent side just care is it in dvr_snat mode or not.\nFor [2], that\u0027s the left two places for L3_AGENT_MODE_DVR to be used on server side after your refactor code merged. I\u0027ve submitted a patch[3] aground there to unify exceptions for dvr agent, and now I think that validation also don\u0027t need L3_AGENT_MODE_DVR.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/agent/l3/agent.py#L315-L319\n[2] https://github.com/openstack/neutron/blob/master/neutron/db/l3_agentschedulers_db.py#L176-L187\n[3] https://review.openstack.org/#/c/261793/","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"ce88bd928ecbbd83e74a3cb60e96e55b8f040f0d","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The idea is to align dvr scheduling with legacy router scheduling:"},{"line_number":18,"context_line":"only schedule SNAT portion of the router and use DB queries whenever"},{"line_number":19,"context_line":"we need to know which compute nodes should host the router."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Implements blueprint improve-dvr-l3-agent-binding"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"fa69d971_452f99a1","line":19,"range":{"start_line":19,"start_character":58,"end_line":19,"end_character":59},"in_reply_to":"1a7b0d38_173373ac","updated":"2015-12-30 03:16:02.000000000","message":"Never mind, that comes as a question. And you\u0027re right, even there are some ways to distinguish an agent in legacy mode from in distributed mode, we still need a certain agent_mode to distinguish agents in \u0027dvr\u0027 mode and in \u0027dvr_snat\u0027 mode. Thanks :)","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2f98caa589e95443b861cb215d0149aeefaba07c","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The idea is to align dvr scheduling with legacy router scheduling:"},{"line_number":18,"context_line":"only schedule SNAT portion of the router and use DB queries whenever"},{"line_number":19,"context_line":"we need to know which compute nodes should host the router."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Implements blueprint improve-dvr-l3-agent-binding"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a7b0d38_0a927cf6","line":19,"range":{"start_line":19,"start_character":58,"end_line":19,"end_character":59},"in_reply_to":"1a7b0d38_649d90bb","updated":"2015-12-28 16:46:54.000000000","message":"1. These are still three different type of agents, legacy is for agents not supporting dvr at all.\n\n2. dvr_snat agents are usually running on network nodes and can host defauld SNAT for dvr routers, \u0027dvr\u0027 are agents running on compute nodes and differ in the way they handle routers.","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"48f24a024a6706c25e4a53532e77b5da21d5b276","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The idea is to align dvr scheduling with legacy router scheduling:"},{"line_number":18,"context_line":"only schedule SNAT portion of the router and use DB queries whenever"},{"line_number":19,"context_line":"we need to know which compute nodes should host the router."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Implements blueprint improve-dvr-l3-agent-binding"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a7b0d38_173373ac","line":19,"range":{"start_line":19,"start_character":58,"end_line":19,"end_character":59},"in_reply_to":"1a7b0d38_d46aceec","updated":"2015-12-29 10:04:42.000000000","message":"Sorry I\u0027m not sure I got what you\u0027re suggesting. We still need to distinguish \u0027dvr_snat\u0027 agents and \u0027dvr\u0027 agents on server side in order to schedule snat portion of a router.","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"}],"neutron/db/l3_agentschedulers_db.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"36acd8c096b7b0ca5c767bda0d8d26b3dc17c98e","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def get_l3_agent_candidates(self, context, sync_router, l3_agents,"},{"line_number":482,"context_line":"                                ignore_admin_state\u003dFalse):"},{"line_number":483,"context_line":"        \"\"\"Get the valid l3 agents for the router from a list of l3_agents.\"\"\""},{"line_number":484,"context_line":"        candidates \u003d []"},{"line_number":485,"context_line":"        is_router_distributed \u003d sync_router.get(\u0027distributed\u0027, False)"},{"line_number":486,"context_line":"        for l3_agent in l3_agents:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_4fe0adfa","line":483,"range":{"start_line":483,"start_character":11,"end_line":483,"end_character":34},"updated":"2015-12-27 09:19:58.000000000","message":"Should here be updated, like \"Get the valid *centralized* l3 agents\", I\u0027m not sure centralized is good explanation here, but since in this patch, this method will no longer to return dvr agent_mode agent, I think it\u0027s reasonable to update.","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2f98caa589e95443b861cb215d0149aeefaba07c","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def get_l3_agent_candidates(self, context, sync_router, l3_agents,"},{"line_number":482,"context_line":"                                ignore_admin_state\u003dFalse):"},{"line_number":483,"context_line":"        \"\"\"Get the valid l3 agents for the router from a list of l3_agents.\"\"\""},{"line_number":484,"context_line":"        candidates \u003d []"},{"line_number":485,"context_line":"        is_router_distributed \u003d sync_router.get(\u0027distributed\u0027, False)"},{"line_number":486,"context_line":"        for l3_agent in l3_agents:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_ea6a90ed","line":483,"range":{"start_line":483,"start_character":11,"end_line":483,"end_character":34},"in_reply_to":"1a7b0d38_4fe0adfa","updated":"2015-12-28 16:46:54.000000000","message":"Will add a note that agents in \u0027dvr\u0027 mode are not taken into account","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"}],"neutron/db/l3_dvrscheduler_db.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"36acd8c096b7b0ca5c767bda0d8d26b3dc17c98e","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":84,"context_line":"        router_ids \u003d self.get_dvr_routers_by_portid(context, port[\u0027id\u0027], ips)"},{"line_number":85,"context_line":"        for router_id in router_ids:"},{"line_number":86,"context_line":"            LOG.debug(\u0027DVR: dvr_update_router_addvm %s \u0027, router_id)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if router_ids:"},{"line_number":89,"context_line":"            self.l3_rpc_notifier.routers_updated_on_host("}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_4fb74df5","line":86,"range":{"start_line":85,"start_character":8,"end_line":86,"end_character":68},"updated":"2015-12-27 09:19:58.000000000","message":"How about to make it simpler:\n  LOG.debug(\u0027DVR: dvr_update_router_addvm %r \u0027, router_ids)\nand move it after L88.","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2f98caa589e95443b861cb215d0149aeefaba07c","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":84,"context_line":"        router_ids \u003d self.get_dvr_routers_by_portid(context, port[\u0027id\u0027], ips)"},{"line_number":85,"context_line":"        for router_id in router_ids:"},{"line_number":86,"context_line":"            LOG.debug(\u0027DVR: dvr_update_router_addvm %s \u0027, router_id)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if router_ids:"},{"line_number":89,"context_line":"            self.l3_rpc_notifier.routers_updated_on_host("}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_e03871f1","line":86,"range":{"start_line":85,"start_character":8,"end_line":86,"end_character":68},"in_reply_to":"1a7b0d38_4fb74df5","updated":"2015-12-28 16:46:54.000000000","message":"yeah, makes sense","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"}],"neutron/db/migration/alembic_migrations/versions/mitaka/contract/2b4c2465d44b_dvr_sheduling_refactoring.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"edb39cbd5213e2be0a3fb0e6e1ee64ebc62723be","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_854aa053","line":1,"range":{"start_line":1,"start_character":2,"end_line":1,"end_character":37},"updated":"2016-02-01 17:49:23.000000000","message":"Nit:  You should copyright for your company or none.","commit_id":"e4ce82c9132b9b3a4713bd2c882a0d2ad469a1b9"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"edb39cbd5213e2be0a3fb0e6e1ee64ebc62723be","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"DVR sheduling refactoring"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Revision ID: 2b4c2465d44b"},{"line_number":19,"context_line":"Revises: 8a6d8bdae39"},{"line_number":20,"context_line":"Create Date: 2015-12-23 07:39:49.062767"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_e566f4eb","line":18,"range":{"start_line":18,"start_character":13,"end_line":18,"end_character":25},"updated":"2016-02-01 17:49:23.000000000","message":"nit:  I don\u0027t know why we duplicate L25-L26 here in the comments.","commit_id":"e4ce82c9132b9b3a4713bd2c882a0d2ad469a1b9"}],"neutron/scheduler/l3_agent_scheduler.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"36acd8c096b7b0ca5c767bda0d8d26b3dc17c98e","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        return True"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def _get_candidates(self, plugin, context, sync_router):"},{"line_number":167,"context_line":"        \"\"\"Return L3 agents where a router could be scheduled.\"\"\""},{"line_number":168,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":169,"context_line":"            # allow one router is hosted by just"},{"line_number":170,"context_line":"            # one enabled l3 agent hosting since active is just a"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_8f8f7529","line":167,"range":{"start_line":167,"start_character":11,"end_line":167,"end_character":27},"updated":"2015-12-27 09:19:58.000000000","message":"Need to update to \"Return centralized L3 agents\" ?","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2f98caa589e95443b861cb215d0149aeefaba07c","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        return True"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def _get_candidates(self, plugin, context, sync_router):"},{"line_number":167,"context_line":"        \"\"\"Return L3 agents where a router could be scheduled.\"\"\""},{"line_number":168,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":169,"context_line":"            # allow one router is hosted by just"},{"line_number":170,"context_line":"            # one enabled l3 agent hosting since active is just a"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_9b0c7c3c","line":167,"range":{"start_line":167,"start_character":11,"end_line":167,"end_character":27},"in_reply_to":"1a7b0d38_8f8f7529","updated":"2015-12-28 16:46:54.000000000","message":"It\u0027s implied in \u0027could be scheduled\u0027","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"36acd8c096b7b0ca5c767bda0d8d26b3dc17c98e","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                           \u0027agent_id\u0027: current_l3_agents[0][\u0027id\u0027]})"},{"line_number":180,"context_line":"                return []"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"            active_l3_agents \u003d plugin.get_l3_agents(context, active\u003dTrue)"},{"line_number":183,"context_line":"            if not active_l3_agents:"},{"line_number":184,"context_line":"                LOG.warn(_LW(\u0027No active L3 agents\u0027))"},{"line_number":185,"context_line":"                return []"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_4f9c2d5d","line":182,"range":{"start_line":182,"start_character":38,"end_line":182,"end_character":73},"updated":"2015-12-27 09:19:58.000000000","message":"Why not call get_l3_agents with filters\u003d{\u0027agent_modes\u0027: [*legacy*, *dvr_snat*]} here.","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2f98caa589e95443b861cb215d0149aeefaba07c","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                           \u0027agent_id\u0027: current_l3_agents[0][\u0027id\u0027]})"},{"line_number":180,"context_line":"                return []"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"            active_l3_agents \u003d plugin.get_l3_agents(context, active\u003dTrue)"},{"line_number":183,"context_line":"            if not active_l3_agents:"},{"line_number":184,"context_line":"                LOG.warn(_LW(\u0027No active L3 agents\u0027))"},{"line_number":185,"context_line":"                return []"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_fb6020d1","line":182,"range":{"start_line":182,"start_character":38,"end_line":182,"end_character":73},"in_reply_to":"1a7b0d38_4f9c2d5d","updated":"2015-12-28 16:46:54.000000000","message":"yeah, can be filtered here as well","commit_id":"962aeca1da00b860dce81507035fe9a2cecaedc8"}],"neutron/tests/functional/services/l3_router/test_l3_dvr_router_plugin.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"36acd8c096b7b0ca5c767bda0d8d26b3dc17c98e","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                self.context, router[\u0027id\u0027],"},{"line_number":472,"context_line":"                {\u0027subnet_id\u0027: subnet[\u0027subnet\u0027][\u0027id\u0027]})"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"            # since there are no vm ports on HOST, and the router"},{"line_number":475,"context_line":"            # has no external gateway at this point the router"},{"line_number":476,"context_line":"            # should neither be scheduled to dvr nor to dvr_snat agents"},{"line_number":477,"context_line":"            agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":478,"context_line":"                self.context, router[\u0027id\u0027])[\u0027agents\u0027]"},{"line_number":479,"context_line":"            self.assertEqual(0, len(agents))"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_efccf96b","side":"PARENT","line":476,"range":{"start_line":474,"start_character":55,"end_line":476,"end_character":71},"updated":"2015-12-27 09:19:58.000000000","message":"Except \"to dvr\", I think it makes sense to keep the following assertion to verify bindings for dvr_snat do not exist.","commit_id":"40bbef2e1a221f5f07173ad2e408c06df40aeaa6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2f98caa589e95443b861cb215d0149aeefaba07c","unresolved":false,"context_lines":[{"line_number":471,"context_line":"                self.context, router[\u0027id\u0027],"},{"line_number":472,"context_line":"                {\u0027subnet_id\u0027: subnet[\u0027subnet\u0027][\u0027id\u0027]})"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"            # since there are no vm ports on HOST, and the router"},{"line_number":475,"context_line":"            # has no external gateway at this point the router"},{"line_number":476,"context_line":"            # should neither be scheduled to dvr nor to dvr_snat agents"},{"line_number":477,"context_line":"            agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":478,"context_line":"                self.context, router[\u0027id\u0027])[\u0027agents\u0027]"},{"line_number":479,"context_line":"            self.assertEqual(0, len(agents))"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_5bddb46d","side":"PARENT","line":476,"range":{"start_line":474,"start_character":55,"end_line":476,"end_character":71},"in_reply_to":"1a7b0d38_efccf96b","updated":"2015-12-28 16:46:54.000000000","message":"I\u0027d like to have tests focused on what they are supposed to test. Proper scheduling is tested by separate tests","commit_id":"40bbef2e1a221f5f07173ad2e408c06df40aeaa6"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"36acd8c096b7b0ca5c767bda0d8d26b3dc17c98e","unresolved":false,"context_lines":[{"line_number":506,"context_line":"                agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":507,"context_line":"                    self.context, router[\u0027id\u0027])[\u0027agents\u0027]"},{"line_number":508,"context_line":"                self.assertEqual(1, len(agents))"},{"line_number":509,"context_line":"                self.assertEqual(dvr_agent2[\u0027id\u0027], agents[0][\u0027id\u0027])"},{"line_number":510,"context_line":"                l3_notifier.routers_updated_on_host.assert_called_once_with("},{"line_number":511,"context_line":"                    self.context, {router[\u0027id\u0027]}, HOST2)"},{"line_number":512,"context_line":"                l3_notifier.router_removed_from_agent.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_6fdfa90d","side":"PARENT","line":509,"range":{"start_line":509,"start_character":64,"end_line":509,"end_character":67},"updated":"2015-12-27 09:19:58.000000000","message":"Since dvr agent bindings will no longer stored in routerl3agentbindings table, method list_l3_agents_hosting_router will be changed definitely for dvr. But I don\u0027t think it make sense to simply remove assertions in this functional test, I think it still worth to verify which agents are hosting dvr routers.","commit_id":"40bbef2e1a221f5f07173ad2e408c06df40aeaa6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2f98caa589e95443b861cb215d0149aeefaba07c","unresolved":false,"context_lines":[{"line_number":506,"context_line":"                agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":507,"context_line":"                    self.context, router[\u0027id\u0027])[\u0027agents\u0027]"},{"line_number":508,"context_line":"                self.assertEqual(1, len(agents))"},{"line_number":509,"context_line":"                self.assertEqual(dvr_agent2[\u0027id\u0027], agents[0][\u0027id\u0027])"},{"line_number":510,"context_line":"                l3_notifier.routers_updated_on_host.assert_called_once_with("},{"line_number":511,"context_line":"                    self.context, {router[\u0027id\u0027]}, HOST2)"},{"line_number":512,"context_line":"                l3_notifier.router_removed_from_agent.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_dbd76449","side":"PARENT","line":509,"range":{"start_line":509,"start_character":64,"end_line":509,"end_character":67},"in_reply_to":"1a7b0d38_6fdfa90d","updated":"2015-12-28 16:46:54.000000000","message":"please see above","commit_id":"40bbef2e1a221f5f07173ad2e408c06df40aeaa6"}],"neutron/tests/unit/scheduler/test_l3_agent_scheduler.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"190e1f6dbff72bcf11ba12986a4ddd54f97620b3","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import mock"},{"line_number":22,"context_line":"from oslo_config import cfg"},{"line_number":23,"context_line":"from oslo_db import exception as db_exc"},{"line_number":24,"context_line":"from oslo_utils import importutils"},{"line_number":25,"context_line":"from oslo_utils import timeutils"},{"line_number":26,"context_line":"from sqlalchemy.orm import query"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_b024ae0c","side":"PARENT","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":39},"updated":"2016-02-02 00:13:33.000000000","message":"I think a recent rebase brought in some more tests that rely on this import.  That is why stuff suddenly failed in the gate.","commit_id":"9546ee7d92a35d5176a6ec15002745a0899e8935"}]}
