)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c7cb4dc459f74b92741aacdc1199fb8af5d975a3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Tune _get_candidates for faster scheduling in dvr"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Right now we have seen some performance issues when"},{"line_number":10,"context_line":"dvr routers are scheduled on mulitple compute nodes"},{"line_number":11,"context_line":"with thousands of VMs on the routed subnets."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The _get_candidates call get_l3_agent_candidates with"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"5a710552_ddf8327f","line":10,"updated":"2015-12-15 10:24:13.000000000","message":"mulitple \u003d\u003e multiple","commit_id":"fcc08cb6b915df1098c8013fa3a83c9bec202064"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"d0a0a604d935fb2d2364efb6bdcca3a61e80b062","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Tune _get_candidates for faster scheduling in dvr"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Right now we have seen some performance issues when"},{"line_number":10,"context_line":"dvr routers are scheduled on mulitple compute nodes"},{"line_number":11,"context_line":"with thousands of VMs on the routed subnets."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The _get_candidates call get_l3_agent_candidates with"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"5a710552_bf92df9d","line":10,"in_reply_to":"5a710552_ddf8327f","updated":"2015-12-15 18:02:03.000000000","message":"Good catch.","commit_id":"fcc08cb6b915df1098c8013fa3a83c9bec202064"}],"neutron/db/l3_agentschedulers_db.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2327c4b3bbca92a663c1d6e4125ec05ae2a788d0","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                    active, l3_agent)]"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def check_ports_exist_on_l3agent("},{"line_number":407,"context_line":"            self, context, l3_agent, router_id, subnet_ids):"},{"line_number":408,"context_line":"        \"\"\""},{"line_number":409,"context_line":"        This function checks for existence of dvr serviceable"},{"line_number":410,"context_line":"        ports on the host, running the input l3agent."}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_4d30169f","line":407,"updated":"2015-11-13 11:48:34.000000000","message":"seems router_id is not needed.","commit_id":"13a331f741f3620fe3c371c3a40607b28c4ecb21"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"284d9d3d130c2f3b434034500ab68fe4a85c5586","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                    active, l3_agent)]"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def check_ports_exist_on_l3agent("},{"line_number":407,"context_line":"            self, context, l3_agent, router_id, subnet_ids):"},{"line_number":408,"context_line":"        \"\"\""},{"line_number":409,"context_line":"        This function checks for existence of dvr serviceable"},{"line_number":410,"context_line":"        ports on the host, running the input l3agent."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_374a85c6","line":407,"in_reply_to":"da85f559_4d30169f","updated":"2015-11-17 17:28:10.000000000","message":"Do you think we can address it as part of this patch or can we take that in another patch.","commit_id":"13a331f741f3620fe3c371c3a40607b28c4ecb21"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2327c4b3bbca92a663c1d6e4125ec05ae2a788d0","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        candidates \u003d []"},{"line_number":430,"context_line":"        is_router_distributed \u003d sync_router.get(\u0027distributed\u0027, False)"},{"line_number":431,"context_line":"        if is_router_distributed:"},{"line_number":432,"context_line":"            subnet_ids \u003d self.get_subnet_ids_on_router("},{"line_number":433,"context_line":"                context, sync_router[\u0027id\u0027])"},{"line_number":434,"context_line":"        for l3_agent in l3_agents:"},{"line_number":435,"context_line":"            if not ignore_admin_state and not l3_agent.admin_state_up:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_ad25020b","line":432,"updated":"2015-11-13 11:48:34.000000000","message":"I\u0027d move it under elif at #463:\n\n  elif is_router_distributed and agent_mode.startswith(..):\n    subnet_ids \u003d self.get_subnet_ids_on_router(..)\n    if self.check_ports_exist_on_l3agent(.. subnet_ids):\n      candidates.append(l3_agent)","commit_id":"13a331f741f3620fe3c371c3a40607b28c4ecb21"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"284d9d3d130c2f3b434034500ab68fe4a85c5586","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        candidates \u003d []"},{"line_number":430,"context_line":"        is_router_distributed \u003d sync_router.get(\u0027distributed\u0027, False)"},{"line_number":431,"context_line":"        if is_router_distributed:"},{"line_number":432,"context_line":"            subnet_ids \u003d self.get_subnet_ids_on_router("},{"line_number":433,"context_line":"                context, sync_router[\u0027id\u0027])"},{"line_number":434,"context_line":"        for l3_agent in l3_agents:"},{"line_number":435,"context_line":"            if not ignore_admin_state and not l3_agent.admin_state_up:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_d7b3f9e7","line":432,"in_reply_to":"da85f559_ad25020b","updated":"2015-11-17 17:28:10.000000000","message":"I don\u0027t think it is a good idea to move it to #L463.\nthe reason to move it above is we don\u0027t want to fetch the \"get_subnet_ids_on_router\" for every agent in the loop.\nWe just need to get those details once.","commit_id":"13a331f741f3620fe3c371c3a40607b28c4ecb21"}],"neutron/scheduler/l3_agent_scheduler.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2327c4b3bbca92a663c1d6e4125ec05ae2a788d0","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            # one enabled l3 agent hosting since active is just a"},{"line_number":168,"context_line":"            # timing problem. Non-active l3 agent can return to"},{"line_number":169,"context_line":"            # active any time"},{"line_number":170,"context_line":"            l3_agents \u003d plugin.get_l3_agents_hosting_routers("},{"line_number":171,"context_line":"                context, [sync_router[\u0027id\u0027]], admin_state_up\u003dTrue)"},{"line_number":172,"context_line":"            if l3_agents and not sync_router.get(\u0027distributed\u0027, False):"},{"line_number":173,"context_line":"                LOG.debug(\u0027Router %(router_id)s has already been hosted\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_73813c4d","line":170,"updated":"2015-11-13 11:48:34.000000000","message":"consider rename to current_l3_agents","commit_id":"13a331f741f3620fe3c371c3a40607b28c4ecb21"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2327c4b3bbca92a663c1d6e4125ec05ae2a788d0","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            if sync_router.get(\u0027distributed\u0027, False) and l3_agents:"},{"line_number":195,"context_line":"                candidates \u003d list(new_l3agentset | old_l3agentset)"},{"line_number":196,"context_line":"            elif sync_router.get(\u0027distributed\u0027, False) and not l3_agents:"},{"line_number":197,"context_line":"                candidates \u003d list(new_l3agentset - old_l3agentset)"},{"line_number":198,"context_line":"            else:"},{"line_number":199,"context_line":"                candidates \u003d new_l3agents"},{"line_number":200,"context_line":"                if not candidates:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_73cffcb3","line":197,"updated":"2015-11-13 11:48:34.000000000","message":"if \"not l3_agents\" old_l3agentset is empty, am I missing smth?","commit_id":"13a331f741f3620fe3c371c3a40607b28c4ecb21"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"284d9d3d130c2f3b434034500ab68fe4a85c5586","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            if sync_router.get(\u0027distributed\u0027, False) and l3_agents:"},{"line_number":195,"context_line":"                candidates \u003d list(new_l3agentset | old_l3agentset)"},{"line_number":196,"context_line":"            elif sync_router.get(\u0027distributed\u0027, False) and not l3_agents:"},{"line_number":197,"context_line":"                candidates \u003d list(new_l3agentset - old_l3agentset)"},{"line_number":198,"context_line":"            else:"},{"line_number":199,"context_line":"                candidates \u003d new_l3agents"},{"line_number":200,"context_line":"                if not candidates:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_f7607d37","line":197,"in_reply_to":"da85f559_73cffcb3","updated":"2015-11-17 17:28:10.000000000","message":"Yes you are right.","commit_id":"13a331f741f3620fe3c371c3a40607b28c4ecb21"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"f6e2da036cccafc4455e62a67cefa871c76f9cad","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                LOG.warn(_LW(\u0027No active L3 agents\u0027))"},{"line_number":182,"context_line":"                return []"},{"line_number":183,"context_line":"            if current_l3_agents and sync_router.get(\u0027distributed\u0027, False):"},{"line_number":184,"context_line":"                unscheduled_agents \u003d list("},{"line_number":185,"context_line":"                    set(active_l3_agents) - set(current_l3_agents))"},{"line_number":186,"context_line":"                if unscheduled_agents:"},{"line_number":187,"context_line":"                    new_l3agents \u003d plugin.get_l3_agent_candidates("}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_b8788ff3","line":184,"updated":"2015-11-26 03:21:09.000000000","message":"unnecessary to use list() here","commit_id":"e52061da97a60c8d434b0618be282f33ad3d7646"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"198d34ddd68a0a62528b392d6b78f0e176c17480","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                LOG.warn(_LW(\u0027No active L3 agents\u0027))"},{"line_number":182,"context_line":"                return []"},{"line_number":183,"context_line":"            if current_l3_agents and sync_router.get(\u0027distributed\u0027, False):"},{"line_number":184,"context_line":"                unscheduled_agents \u003d list("},{"line_number":185,"context_line":"                    set(active_l3_agents) - set(current_l3_agents))"},{"line_number":186,"context_line":"                if unscheduled_agents:"},{"line_number":187,"context_line":"                    new_l3agents \u003d plugin.get_l3_agent_candidates("}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_957612d7","line":184,"in_reply_to":"9a8ffd7b_b8788ff3","updated":"2015-11-30 18:52:36.000000000","message":"Done","commit_id":"e52061da97a60c8d434b0618be282f33ad3d7646"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"f6e2da036cccafc4455e62a67cefa871c76f9cad","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            else:"},{"line_number":192,"context_line":"                new_l3agents \u003d plugin.get_l3_agent_candidates(context,"},{"line_number":193,"context_line":"                                                              sync_router,"},{"line_number":194,"context_line":"                                                              active_l3_agents)"},{"line_number":195,"context_line":"            old_l3agentset \u003d set(current_l3_agents)"},{"line_number":196,"context_line":"            new_l3agentset \u003d set(new_l3agents)"},{"line_number":197,"context_line":"            if sync_router.get(\u0027distributed\u0027, False) and current_l3_agents:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_1822fbb9","line":194,"updated":"2015-11-26 03:21:09.000000000","message":"I prefer move L200-203 here, since for no current_l3_agents or non-distributed router case, it can directly return here. And if that, L195-198 can be merged into if branch after L188.","commit_id":"e52061da97a60c8d434b0618be282f33ad3d7646"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"198d34ddd68a0a62528b392d6b78f0e176c17480","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            else:"},{"line_number":192,"context_line":"                new_l3agents \u003d plugin.get_l3_agent_candidates(context,"},{"line_number":193,"context_line":"                                                              sync_router,"},{"line_number":194,"context_line":"                                                              active_l3_agents)"},{"line_number":195,"context_line":"            old_l3agentset \u003d set(current_l3_agents)"},{"line_number":196,"context_line":"            new_l3agentset \u003d set(new_l3agents)"},{"line_number":197,"context_line":"            if sync_router.get(\u0027distributed\u0027, False) and current_l3_agents:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_b59f964f","line":194,"in_reply_to":"9a8ffd7b_1822fbb9","updated":"2015-11-30 18:52:36.000000000","message":"Done","commit_id":"e52061da97a60c8d434b0618be282f33ad3d7646"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"f6e2da036cccafc4455e62a67cefa871c76f9cad","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            old_l3agentset \u003d set(current_l3_agents)"},{"line_number":196,"context_line":"            new_l3agentset \u003d set(new_l3agents)"},{"line_number":197,"context_line":"            if sync_router.get(\u0027distributed\u0027, False) and current_l3_agents:"},{"line_number":198,"context_line":"                candidates \u003d list(new_l3agentset | old_l3agentset)"},{"line_number":199,"context_line":"            else:"},{"line_number":200,"context_line":"                candidates \u003d new_l3agents"},{"line_number":201,"context_line":"                if not candidates:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_3bcb39a7","line":198,"updated":"2015-11-26 03:21:09.000000000","message":"Question: except the reason for keep return value in the same style(list or set), any other reason to keep return value of _get_candidates should be a list ?\n\nwill https://github.com/openstack/neutron/blob/master/neutron/db/l3_hascheduler_db.py#L58 not work for set?","commit_id":"e52061da97a60c8d434b0618be282f33ad3d7646"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"198d34ddd68a0a62528b392d6b78f0e176c17480","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            old_l3agentset \u003d set(current_l3_agents)"},{"line_number":196,"context_line":"            new_l3agentset \u003d set(new_l3agents)"},{"line_number":197,"context_line":"            if sync_router.get(\u0027distributed\u0027, False) and current_l3_agents:"},{"line_number":198,"context_line":"                candidates \u003d list(new_l3agentset | old_l3agentset)"},{"line_number":199,"context_line":"            else:"},{"line_number":200,"context_line":"                candidates \u003d new_l3agents"},{"line_number":201,"context_line":"                if not candidates:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_d597ba38","line":198,"in_reply_to":"9a8ffd7b_3bcb39a7","updated":"2015-11-30 18:52:36.000000000","message":"Just wanted to maintain the same style as before.","commit_id":"e52061da97a60c8d434b0618be282f33ad3d7646"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"81abd9f5b11720783717e0977ac289b2ba94ecc3","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                    old_l3agentset \u003d set(current_l3_agents)"},{"line_number":190,"context_line":"                    new_l3agentset \u003d set(new_l3agents)"},{"line_number":191,"context_line":"                    candidates \u003d list(new_l3agentset | old_l3agentset)"},{"line_number":192,"context_line":"                    return candidates"},{"line_number":193,"context_line":"                else:"},{"line_number":194,"context_line":"                    return []"},{"line_number":195,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_538962c9","line":192,"updated":"2015-12-01 17:57:01.000000000","message":"I think Ryan\u0027s comment was about this line...","commit_id":"cbb5c3914e8c2f6c059038f44c93fa8c3cdf5920"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"01ee893d8e56ae2275c84f4b79854ba06c319ba7","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                    old_l3agentset \u003d set(current_l3_agents)"},{"line_number":190,"context_line":"                    new_l3agentset \u003d set(new_l3agents)"},{"line_number":191,"context_line":"                    candidates \u003d list(new_l3agentset | old_l3agentset)"},{"line_number":192,"context_line":"                    return candidates"},{"line_number":193,"context_line":"                else:"},{"line_number":194,"context_line":"                    return []"},{"line_number":195,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_380d893e","line":192,"in_reply_to":"9a8ffd7b_538962c9","updated":"2015-12-02 00:09:04.000000000","message":"Done","commit_id":"cbb5c3914e8c2f6c059038f44c93fa8c3cdf5920"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"c39c2248d032e6f744cd9f503fb681ff6f26355d","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                    old_l3agentset \u003d set(current_l3_agents)"},{"line_number":190,"context_line":"                    new_l3agentset \u003d set(new_l3agents)"},{"line_number":191,"context_line":"                    candidates \u003d list(new_l3agentset | old_l3agentset)"},{"line_number":192,"context_line":"                    return candidates"},{"line_number":193,"context_line":"                else:"},{"line_number":194,"context_line":"                    return []"},{"line_number":195,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_5bedf4b5","line":192,"in_reply_to":"9a8ffd7b_538962c9","updated":"2015-12-01 19:28:17.000000000","message":"Yes to both this and L203 - I was being lazy...","commit_id":"cbb5c3914e8c2f6c059038f44c93fa8c3cdf5920"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"01ee893d8e56ae2275c84f4b79854ba06c319ba7","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                    old_l3agentset \u003d set(current_l3_agents)"},{"line_number":190,"context_line":"                    new_l3agentset \u003d set(new_l3agents)"},{"line_number":191,"context_line":"                    candidates \u003d list(new_l3agentset | old_l3agentset)"},{"line_number":192,"context_line":"                    return candidates"},{"line_number":193,"context_line":"                else:"},{"line_number":194,"context_line":"                    return []"},{"line_number":195,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_9815954a","line":192,"in_reply_to":"9a8ffd7b_5bedf4b5","updated":"2015-12-02 00:09:04.000000000","message":"Done","commit_id":"cbb5c3914e8c2f6c059038f44c93fa8c3cdf5920"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"81abd9f5b11720783717e0977ac289b2ba94ecc3","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                if not candidates:"},{"line_number":201,"context_line":"                    LOG.warn(_LW(\u0027No L3 agents can host the router %s\u0027),"},{"line_number":202,"context_line":"                             sync_router[\u0027id\u0027])"},{"line_number":203,"context_line":"                return candidates"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _bind_routers(self, context, plugin, routers, l3_agent):"},{"line_number":206,"context_line":"        for router in routers:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_13067a20","line":203,"updated":"2015-12-01 17:57:01.000000000","message":"... and this one being indented now.\n\nIt does seem wrong to have added L192 unnecessarily - why don\u0027t you just un-do that and leave this line alone?","commit_id":"cbb5c3914e8c2f6c059038f44c93fa8c3cdf5920"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"01ee893d8e56ae2275c84f4b79854ba06c319ba7","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                if not candidates:"},{"line_number":201,"context_line":"                    LOG.warn(_LW(\u0027No L3 agents can host the router %s\u0027),"},{"line_number":202,"context_line":"                             sync_router[\u0027id\u0027])"},{"line_number":203,"context_line":"                return candidates"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _bind_routers(self, context, plugin, routers, l3_agent):"},{"line_number":206,"context_line":"        for router in routers:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_f806211f","line":203,"in_reply_to":"9a8ffd7b_13067a20","updated":"2015-12-02 00:09:04.000000000","message":"Done","commit_id":"cbb5c3914e8c2f6c059038f44c93fa8c3cdf5920"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"7b8874134d8283d4f6ae4e1897fd020debe4abdd","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                        context, sync_router, unscheduled_agents)"},{"line_number":189,"context_line":"                    old_l3agentset \u003d set(current_l3_agents)"},{"line_number":190,"context_line":"                    new_l3agentset \u003d set(new_l3agents)"},{"line_number":191,"context_line":"                    candidates \u003d list(new_l3agentset | old_l3agentset)"},{"line_number":192,"context_line":"                else:"},{"line_number":193,"context_line":"                    return []"},{"line_number":194,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a8ffd7b_81a7184f","line":191,"updated":"2015-12-03 03:54:38.000000000","message":"Why do we need old_l3agentset/current_l3_agents as part of candidates?\n_get_candidates should return new agents for router scheduling, as left side L189, it will not contains agents hosting sync_router.\n\nOr do I get myself lose in details of depends-on patches?","commit_id":"564e660c3e9d06133aeed9dfdd42aa4a0268106b"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"d154e8911f8bae134efc6afdd702032663cea338","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                        context, sync_router, unscheduled_agents)"},{"line_number":189,"context_line":"                    old_l3agentset \u003d set(current_l3_agents)"},{"line_number":190,"context_line":"                    new_l3agentset \u003d set(new_l3agents)"},{"line_number":191,"context_line":"                    candidates \u003d list(new_l3agentset | old_l3agentset)"},{"line_number":192,"context_line":"                else:"},{"line_number":193,"context_line":"                    return []"},{"line_number":194,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_39a15aaa","line":191,"in_reply_to":"9a8ffd7b_81a7184f","updated":"2015-12-03 22:37:59.000000000","message":"Yes you may be right, we should probably fix this. I will push in another revision and will also decouple this from other dependent patches.\nI thought this can go in as such without any dependencies.","commit_id":"564e660c3e9d06133aeed9dfdd42aa4a0268106b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"562cbf0d9e3cd799a2cf33c2a6c9391f0480e5c6","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            if not active_l3_agents:"},{"line_number":181,"context_line":"                LOG.warn(_LW(\u0027No active L3 agents\u0027))"},{"line_number":182,"context_line":"                return []"},{"line_number":183,"context_line":"            if current_l3_agents and sync_router.get(\u0027distributed\u0027, False):"},{"line_number":184,"context_line":"                unscheduled_agents \u003d ("},{"line_number":185,"context_line":"                    set(active_l3_agents) - set(current_l3_agents))"},{"line_number":186,"context_line":"                if unscheduled_agents:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_52798dfb","line":183,"updated":"2015-12-04 08:13:50.000000000","message":"please remove extra logic and replace 183-196 with:\n\n potential_candidates \u003d set(active_l3_agents) - set(current_l3_agents)\n candidates \u003d plugin.get_l3_agent_candidates(context, sync_router, potential_candidates)\n\nPlease check if I\u0027m missing any case that will not work","commit_id":"9ae62b410148a3d660057bbf422b1b2b2e603d7a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"972e0a3d17205cfb82ad41557a26faf0105cb71b","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            if not active_l3_agents:"},{"line_number":181,"context_line":"                LOG.warn(_LW(\u0027No active L3 agents\u0027))"},{"line_number":182,"context_line":"                return []"},{"line_number":183,"context_line":"            if current_l3_agents and sync_router.get(\u0027distributed\u0027, False):"},{"line_number":184,"context_line":"                unscheduled_agents \u003d ("},{"line_number":185,"context_line":"                    set(active_l3_agents) - set(current_l3_agents))"},{"line_number":186,"context_line":"                if unscheduled_agents:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_a34c0543","line":183,"in_reply_to":"7a740942_52798dfb","updated":"2015-12-04 18:01:31.000000000","message":"If you want me to change the unschedule_agents to potential_candidates, I can change.\nBut the check below to make sure if potential_candidates and if not should be present.\nI have checked the sequence. If there is only one agent, then this is true, because it is already scheduled we don\u0027t need to call the plugin.get_l3_agent_candidates.","commit_id":"9ae62b410148a3d660057bbf422b1b2b2e603d7a"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"d4eeb4ff3084cde7f6dfabcef3570b7aab1699fe","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                if unscheduled_agents:"},{"line_number":187,"context_line":"                    new_l3agents \u003d plugin.get_l3_agent_candidates("},{"line_number":188,"context_line":"                        context, sync_router, unscheduled_agents)"},{"line_number":189,"context_line":"                    candidates \u003d new_l3agents"},{"line_number":190,"context_line":"                else:"},{"line_number":191,"context_line":"                    return []"},{"line_number":192,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_862b3eeb","line":189,"updated":"2015-12-04 03:22:03.000000000","message":"no need to use another variable here, directly:\n    candidates \u003d plugin.get_l3_agent_candidates(...","commit_id":"9ae62b410148a3d660057bbf422b1b2b2e603d7a"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"d4eeb4ff3084cde7f6dfabcef3570b7aab1699fe","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                new_l3agents \u003d plugin.get_l3_agent_candidates(context,"},{"line_number":194,"context_line":"                                                              sync_router,"},{"line_number":195,"context_line":"                                                              active_l3_agents)"},{"line_number":196,"context_line":"                candidates \u003d new_l3agents"},{"line_number":197,"context_line":"                if not candidates:"},{"line_number":198,"context_line":"                    LOG.warn(_LW(\u0027No L3 agents can host the router %s\u0027),"},{"line_number":199,"context_line":"                             sync_router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_e646c2be","line":196,"updated":"2015-12-04 03:22:03.000000000","message":"ditto","commit_id":"9ae62b410148a3d660057bbf422b1b2b2e603d7a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"972e0a3d17205cfb82ad41557a26faf0105cb71b","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                new_l3agents \u003d plugin.get_l3_agent_candidates(context,"},{"line_number":194,"context_line":"                                                              sync_router,"},{"line_number":195,"context_line":"                                                              active_l3_agents)"},{"line_number":196,"context_line":"                candidates \u003d new_l3agents"},{"line_number":197,"context_line":"                if not candidates:"},{"line_number":198,"context_line":"                    LOG.warn(_LW(\u0027No L3 agents can host the router %s\u0027),"},{"line_number":199,"context_line":"                             sync_router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_e30f6ddf","line":196,"in_reply_to":"7a740942_e646c2be","updated":"2015-12-04 18:01:31.000000000","message":"Same here.","commit_id":"9ae62b410148a3d660057bbf422b1b2b2e603d7a"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b943350460f8b11cdbf949def996ffdb24e7054","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                if not candidates:"},{"line_number":196,"context_line":"                    LOG.warn(_LW(\u0027No L3 agents can host the router %s\u0027),"},{"line_number":197,"context_line":"                             sync_router[\u0027id\u0027])"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"            return candidates"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def _bind_routers(self, context, plugin, routers, l3_agent):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a740942_c21459a1","side":"PARENT","line":198,"updated":"2015-12-07 20:38:57.000000000","message":"Please revert this whitespace change.","commit_id":"525420bf6f04ee0192b04ab7340b19d7e4401dc9"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b943350460f8b11cdbf949def996ffdb24e7054","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                context, [sync_router[\u0027id\u0027]], admin_state_up\u003dTrue)"},{"line_number":175,"context_line":"            if current_l3_agents and not sync_router.get(\u0027distributed\u0027, False):"},{"line_number":176,"context_line":"                LOG.debug(\u0027Router %(router_id)s has already been hosted\u0027"},{"line_number":177,"context_line":"                          \u0027 by L3 agent %(agent_id)s\u0027,"},{"line_number":178,"context_line":"                          {\u0027router_id\u0027: sync_router[\u0027id\u0027],"},{"line_number":179,"context_line":"                           \u0027agent_id\u0027: current_l3_agents[0][\u0027id\u0027]})"},{"line_number":180,"context_line":"                return []"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a740942_c7beab64","line":177,"updated":"2015-12-07 20:38:57.000000000","message":"Please revert the whitespace changes on L176 - L177.","commit_id":"685ba61f0479307cb6e68202edbdc8754eccd9a0"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b943350460f8b11cdbf949def996ffdb24e7054","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                potential_candidates \u003d ("},{"line_number":188,"context_line":"                    set(active_l3_agents) - set(current_l3_agents))"},{"line_number":189,"context_line":"                if potential_candidates:"},{"line_number":190,"context_line":"                    new_l3agents \u003d plugin.get_l3_agent_candidates("},{"line_number":191,"context_line":"                        context, sync_router, potential_candidates)"},{"line_number":192,"context_line":"                    candidates \u003d new_l3agents"},{"line_number":193,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a740942_a2126d07","line":190,"updated":"2015-12-07 20:38:57.000000000","message":"Just return the result directly here and some of the rest of the changes will be simplified.\n\nI tend to like it when methods return as soon as the job is done.  It makes the code easier to read IMO because it tends to reduce the scope of variables.   I don\u0027t have to follow the rest of the code to understand the code path, which essentially ends of being this:\n\n  new_l3agents \u003d plugin...\n  candidates \u003d new_l3agents\n  return candidates\n\nBoth else clauses could go away and the level of code indent would be reduced.","commit_id":"685ba61f0479307cb6e68202edbdc8754eccd9a0"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"0b943350460f8b11cdbf949def996ffdb24e7054","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                new_l3agents \u003d plugin.get_l3_agent_candidates(context,"},{"line_number":197,"context_line":"                                                              sync_router,"},{"line_number":198,"context_line":"                                                              active_l3_agents)"},{"line_number":199,"context_line":"                candidates \u003d new_l3agents"},{"line_number":200,"context_line":"                if not candidates:"},{"line_number":201,"context_line":"                    LOG.warn(_LW(\u0027No L3 agents can host the router %s\u0027),"},{"line_number":202,"context_line":"                             sync_router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a740942_4242a9af","line":199,"updated":"2015-12-07 20:38:57.000000000","message":"With the changes in this patch set, this now seems like a silly assignment.  Why not just return new_l3agents?","commit_id":"685ba61f0479307cb6e68202edbdc8754eccd9a0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"76307732e9d021aeceda0de7f97dcccbe7cafe1f","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            # active any time"},{"line_number":173,"context_line":"            current_l3_agents \u003d plugin.get_l3_agents_hosting_routers("},{"line_number":174,"context_line":"                context, [sync_router[\u0027id\u0027]], admin_state_up\u003dTrue)"},{"line_number":175,"context_line":"            if current_l3_agents and not sync_router.get(\u0027distributed\u0027, False):"},{"line_number":176,"context_line":"                LOG.debug(\u0027Router %(router_id)s has already been hosted \u0027"},{"line_number":177,"context_line":"                          \u0027by L3 agent %(agent_id)s\u0027,"},{"line_number":178,"context_line":"                          {\u0027router_id\u0027: sync_router[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_3d9e4963","line":175,"updated":"2015-12-09 08:22:48.000000000","message":"can set is_router_distributed \u003d sync_router.get(\u0027distributed\u0027, False) and use it here and below","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"27cd45f8089b3cc8262409c62153ce7939c85afe","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            # active any time"},{"line_number":173,"context_line":"            current_l3_agents \u003d plugin.get_l3_agents_hosting_routers("},{"line_number":174,"context_line":"                context, [sync_router[\u0027id\u0027]], admin_state_up\u003dTrue)"},{"line_number":175,"context_line":"            if current_l3_agents and not sync_router.get(\u0027distributed\u0027, False):"},{"line_number":176,"context_line":"                LOG.debug(\u0027Router %(router_id)s has already been hosted \u0027"},{"line_number":177,"context_line":"                          \u0027by L3 agent %(agent_id)s\u0027,"},{"line_number":178,"context_line":"                          {\u0027router_id\u0027: sync_router[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_33e2f0a0","line":175,"in_reply_to":"7a740942_3d9e4963","updated":"2015-12-14 18:06:06.000000000","message":"Done","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"76307732e9d021aeceda0de7f97dcccbe7cafe1f","unresolved":false,"context_lines":[{"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 []"},{"line_number":186,"context_line":"            if current_l3_agents and sync_router.get(\u0027distributed\u0027, False):"},{"line_number":187,"context_line":"                potential_candidates \u003d ("},{"line_number":188,"context_line":"                    set(active_l3_agents) - set(current_l3_agents))"},{"line_number":189,"context_line":"                if potential_candidates:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_fddf610a","line":186,"updated":"2015-12-09 08:22:48.000000000","message":"this check is not needed: if current_l3_agents is empty then potential_candidates \u003d\u003d active_l3_agents; if current_l3_agents is not empty then router is distributed (otherwise we would return at #180)","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"27cd45f8089b3cc8262409c62153ce7939c85afe","unresolved":false,"context_lines":[{"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 []"},{"line_number":186,"context_line":"            if current_l3_agents and sync_router.get(\u0027distributed\u0027, False):"},{"line_number":187,"context_line":"                potential_candidates \u003d ("},{"line_number":188,"context_line":"                    set(active_l3_agents) - set(current_l3_agents))"},{"line_number":189,"context_line":"                if potential_candidates:"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_b3eca090","line":186,"in_reply_to":"7a740942_fddf610a","updated":"2015-12-14 18:06:06.000000000","message":"I still think that we should have this check. But based on your judgement I am modifying the code in the next patch.","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1c34b624b50100a62486594818f1c9ab4778e53f","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                          \u0027by L3 agent %(agent_id)s\u0027,"},{"line_number":180,"context_line":"                          {\u0027router_id\u0027: sync_router[\u0027id\u0027],"},{"line_number":181,"context_line":"                           \u0027agent_id\u0027: current_l3_agents[0][\u0027id\u0027]})"},{"line_number":182,"context_line":"                return new_l3agents"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"            active_l3_agents \u003d plugin.get_l3_agents(context, active\u003dTrue)"},{"line_number":185,"context_line":"            if not active_l3_agents:"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_34cabaa2","line":182,"updated":"2015-12-15 07:43:35.000000000","message":"why need to change? this is confusing, [] is more clear","commit_id":"7de239492998d04bc12517640ecdda3fde349bc9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"8ae2341652d63e483cc10fdf623077727ddee6cd","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                          \u0027by L3 agent %(agent_id)s\u0027,"},{"line_number":180,"context_line":"                          {\u0027router_id\u0027: sync_router[\u0027id\u0027],"},{"line_number":181,"context_line":"                           \u0027agent_id\u0027: current_l3_agents[0][\u0027id\u0027]})"},{"line_number":182,"context_line":"                return new_l3agents"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"            active_l3_agents \u003d plugin.get_l3_agents(context, active\u003dTrue)"},{"line_number":185,"context_line":"            if not active_l3_agents:"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_b44eaabf","line":182,"in_reply_to":"5a710552_34cabaa2","updated":"2015-12-15 07:52:08.000000000","message":"Done","commit_id":"7de239492998d04bc12517640ecdda3fde349bc9"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1c34b624b50100a62486594818f1c9ab4778e53f","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            active_l3_agents \u003d plugin.get_l3_agents(context, active\u003dTrue)"},{"line_number":185,"context_line":"            if not active_l3_agents:"},{"line_number":186,"context_line":"                LOG.warn(_LW(\u0027No active L3 agents\u0027))"},{"line_number":187,"context_line":"                return new_l3agents"},{"line_number":188,"context_line":"            potential_candidates \u003d list("},{"line_number":189,"context_line":"                set(active_l3_agents) - set(current_l3_agents))"},{"line_number":190,"context_line":"            if potential_candidates:"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_b4beaafd","line":187,"updated":"2015-12-15 07:43:35.000000000","message":"ditto","commit_id":"7de239492998d04bc12517640ecdda3fde349bc9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"8ae2341652d63e483cc10fdf623077727ddee6cd","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            active_l3_agents \u003d plugin.get_l3_agents(context, active\u003dTrue)"},{"line_number":185,"context_line":"            if not active_l3_agents:"},{"line_number":186,"context_line":"                LOG.warn(_LW(\u0027No active L3 agents\u0027))"},{"line_number":187,"context_line":"                return new_l3agents"},{"line_number":188,"context_line":"            potential_candidates \u003d list("},{"line_number":189,"context_line":"                set(active_l3_agents) - set(current_l3_agents))"},{"line_number":190,"context_line":"            if potential_candidates:"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a710552_d44b36af","line":187,"in_reply_to":"5a710552_b4beaafd","updated":"2015-12-15 07:52:08.000000000","message":"Done","commit_id":"7de239492998d04bc12517640ecdda3fde349bc9"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c7cb4dc459f74b92741aacdc1199fb8af5d975a3","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            # one enabled l3 agent hosting since active is just a"},{"line_number":171,"context_line":"            # timing problem. Non-active l3 agent can return to"},{"line_number":172,"context_line":"            # active any time"},{"line_number":173,"context_line":"            new_l3agents \u003d []"},{"line_number":174,"context_line":"            current_l3_agents \u003d plugin.get_l3_agents_hosting_routers("},{"line_number":175,"context_line":"                context, [sync_router[\u0027id\u0027]], admin_state_up\u003dTrue)"},{"line_number":176,"context_line":"            is_router_distributed \u003d sync_router.get(\u0027distributed\u0027, False)"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a710552_dd26f215","line":173,"updated":"2015-12-15 10:24:13.000000000","message":"this variable can be declared before line 190","commit_id":"fcc08cb6b915df1098c8013fa3a83c9bec202064"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"d0a0a604d935fb2d2364efb6bdcca3a61e80b062","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            # one enabled l3 agent hosting since active is just a"},{"line_number":171,"context_line":"            # timing problem. Non-active l3 agent can return to"},{"line_number":172,"context_line":"            # active any time"},{"line_number":173,"context_line":"            new_l3agents \u003d []"},{"line_number":174,"context_line":"            current_l3_agents \u003d plugin.get_l3_agents_hosting_routers("},{"line_number":175,"context_line":"                context, [sync_router[\u0027id\u0027]], admin_state_up\u003dTrue)"},{"line_number":176,"context_line":"            is_router_distributed \u003d sync_router.get(\u0027distributed\u0027, False)"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a710552_3fd4af45","line":173,"in_reply_to":"5a710552_dd26f215","updated":"2015-12-15 18:02:03.000000000","message":"will fix this to make you happy.\nMy initial thought was to use the same variable for the empty list that we are passing in #L182 and #L187.\nBut it was accepted. So I just let the variable stay there.","commit_id":"fcc08cb6b915df1098c8013fa3a83c9bec202064"}],"neutron/tests/unit/scheduler/test_l3_agent_scheduler.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"dc6e1270c42193febc83b162a2f709bff7e577c6","unresolved":false,"context_lines":[{"line_number":743,"context_line":"            # no subnets and operation is remove_router_interface,"},{"line_number":744,"context_line":"            # so return immediately without calling get_ports"},{"line_number":745,"context_line":"            self.check_ports_exist_on_l3agent(self.adminContext,"},{"line_number":746,"context_line":"                                              l3_agent, [])"},{"line_number":747,"context_line":"        self.assertFalse(self.plugin.get_ports.called)"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"    def test_check_ports_exist_on_l3agent_no_subnet_match(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_7c83fb56","line":746,"updated":"2015-11-18 02:19:55.000000000","message":"unrelated whitespace change?","commit_id":"37bd631caaacd997ae35a5f917314647e1df1542"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"f6e2da036cccafc4455e62a67cefa871c76f9cad","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        # distributed router but no agents"},{"line_number":302,"context_line":"        plugin.get_l3_agents.return_value \u003d [\u0027a1\u0027, \u0027a2\u0027, \u0027a3\u0027, \u0027a4\u0027, \u0027a5\u0027]"},{"line_number":303,"context_line":"        unscheduled_agents \u003d [\u0027a3\u0027, \u0027a4\u0027, \u0027a5\u0027]"},{"line_number":304,"context_line":"        plugin.get_l3_agent_candidates.return_value \u003d [\u0027a3\u0027, \u0027a4\u0027]"},{"line_number":305,"context_line":"        self.scheduler._get_candidates(plugin, mock.MagicMock(), router)"},{"line_number":306,"context_line":"        plugin.get_l3_agent_candidates.called_once_with("},{"line_number":307,"context_line":"            mock.ANY, router, unscheduled_agents)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_9b93454f","line":304,"updated":"2015-11-26 03:21:09.000000000","message":"where will we going deal with return_value [\u0027a3\u0027, \u0027a4\u0027] here, seems they are no need.\n\nOr maybe you forget to assert _get_candidates return value ?","commit_id":"e52061da97a60c8d434b0618be282f33ad3d7646"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"198d34ddd68a0a62528b392d6b78f0e176c17480","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        # distributed router but no agents"},{"line_number":302,"context_line":"        plugin.get_l3_agents.return_value \u003d [\u0027a1\u0027, \u0027a2\u0027, \u0027a3\u0027, \u0027a4\u0027, \u0027a5\u0027]"},{"line_number":303,"context_line":"        unscheduled_agents \u003d [\u0027a3\u0027, \u0027a4\u0027, \u0027a5\u0027]"},{"line_number":304,"context_line":"        plugin.get_l3_agent_candidates.return_value \u003d [\u0027a3\u0027, \u0027a4\u0027]"},{"line_number":305,"context_line":"        self.scheduler._get_candidates(plugin, mock.MagicMock(), router)"},{"line_number":306,"context_line":"        plugin.get_l3_agent_candidates.called_once_with("},{"line_number":307,"context_line":"            mock.ANY, router, unscheduled_agents)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_bb1c6514","line":304,"in_reply_to":"9a8ffd7b_9b93454f","updated":"2015-11-30 18:52:36.000000000","message":"Done","commit_id":"e52061da97a60c8d434b0618be282f33ad3d7646"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"dee14d7277ddf22289c07c132c4f8cafc1832ecd","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        router[\u0027distributed\u0027] \u003d True"},{"line_number":283,"context_line":"        plugin.get_l3_agents.return_value \u003d []"},{"line_number":284,"context_line":"        iter(self.scheduler._get_candidates(plugin, mock.MagicMock(), router))"},{"line_number":285,"context_line":"        self.assertNotEqual(1, plugin.get_l3_agent_candidates.call_count)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def test__get_candidates_never_calls_get_l3_agent_candidates_for_dvr(self):"},{"line_number":288,"context_line":"        plugin \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a740942_d26479e6","line":285,"updated":"2015-12-04 20:10:20.000000000","message":"Can\u0027t we do better than making sure it\u0027s not 1? It seems like we should know the difference between 0 calls and 2+.","commit_id":"3d737168f3a5a0a82793e4f8dc44becc587ccce0"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"b5406e845b2d7d5241eb57bcba08e742f83e3ece","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        router[\u0027distributed\u0027] \u003d True"},{"line_number":283,"context_line":"        plugin.get_l3_agents.return_value \u003d []"},{"line_number":284,"context_line":"        iter(self.scheduler._get_candidates(plugin, mock.MagicMock(), router))"},{"line_number":285,"context_line":"        self.assertNotEqual(1, plugin.get_l3_agent_candidates.call_count)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def test__get_candidates_never_calls_get_l3_agent_candidates_for_dvr(self):"},{"line_number":288,"context_line":"        plugin \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a740942_c85e05e9","line":285,"in_reply_to":"7a740942_7aca3b70","updated":"2015-12-07 16:56:22.000000000","message":"Done","commit_id":"3d737168f3a5a0a82793e4f8dc44becc587ccce0"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4e965409a8e38d62c181f02b6f9c2c7c64677b56","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        router[\u0027distributed\u0027] \u003d True"},{"line_number":283,"context_line":"        plugin.get_l3_agents.return_value \u003d []"},{"line_number":284,"context_line":"        iter(self.scheduler._get_candidates(plugin, mock.MagicMock(), router))"},{"line_number":285,"context_line":"        self.assertNotEqual(1, plugin.get_l3_agent_candidates.call_count)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def test__get_candidates_never_calls_get_l3_agent_candidates_for_dvr(self):"},{"line_number":288,"context_line":"        plugin \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a740942_d479c6fd","line":285,"in_reply_to":"7a740942_d26479e6","updated":"2015-12-04 21:01:02.000000000","message":"Kevin I did not get your point here.","commit_id":"3d737168f3a5a0a82793e4f8dc44becc587ccce0"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"d25da0f5422d8903531b1637e99cfd2a74de8f5b","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        router[\u0027distributed\u0027] \u003d True"},{"line_number":283,"context_line":"        plugin.get_l3_agents.return_value \u003d []"},{"line_number":284,"context_line":"        iter(self.scheduler._get_candidates(plugin, mock.MagicMock(), router))"},{"line_number":285,"context_line":"        self.assertNotEqual(1, plugin.get_l3_agent_candidates.call_count)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def test__get_candidates_never_calls_get_l3_agent_candidates_for_dvr(self):"},{"line_number":288,"context_line":"        plugin \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a740942_f7b964cc","line":285,"in_reply_to":"7a740942_d479c6fd","updated":"2015-12-04 21:29:02.000000000","message":"Do you think this would be better. \"self.assertFalse(plugin.get_l3_agent_candidates.called)\"","commit_id":"3d737168f3a5a0a82793e4f8dc44becc587ccce0"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"00bc9ca7746756208b1e091184920c7bf65c8065","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        router[\u0027distributed\u0027] \u003d True"},{"line_number":283,"context_line":"        plugin.get_l3_agents.return_value \u003d []"},{"line_number":284,"context_line":"        iter(self.scheduler._get_candidates(plugin, mock.MagicMock(), router))"},{"line_number":285,"context_line":"        self.assertNotEqual(1, plugin.get_l3_agent_candidates.call_count)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def test__get_candidates_never_calls_get_l3_agent_candidates_for_dvr(self):"},{"line_number":288,"context_line":"        plugin \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a740942_7aca3b70","line":285,"in_reply_to":"7a740942_f7b964cc","updated":"2015-12-04 21:57:24.000000000","message":"Yes, or assertEqual(0, plugin.get_l3_agent_candidates.call_count)\n\nThe problem with the current code is that it will pass if it\u0027s called multiple times. The only thing it asserts is that is was not called precisely once.","commit_id":"3d737168f3a5a0a82793e4f8dc44becc587ccce0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"eb19a78beba69f7aa970f895eb279085d384c7ac","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        plugin \u003d mock.MagicMock()"},{"line_number":289,"context_line":"        # non-distributed router already hosted"},{"line_number":290,"context_line":"        plugin.get_l3_agents_hosting_routers.return_value \u003d [\u0027a1\u0027]"},{"line_number":291,"context_line":"        router \u003d {\u0027distributed\u0027: True, \u0027id\u0027: \u0027falafel\u0027}"},{"line_number":292,"context_line":"        # distributed router but no agents"},{"line_number":293,"context_line":"        plugin.get_l3_agents.return_value \u003d [\u0027a1\u0027]"},{"line_number":294,"context_line":"        self.scheduler._get_candidates(plugin, mock.MagicMock(), router)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_40b4b77e","line":291,"updated":"2015-12-08 14:25:51.000000000","message":"the comment above says non-distributed..","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"4f5a7d529c9511d5f7e70118563286df1007111e","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        plugin \u003d mock.MagicMock()"},{"line_number":289,"context_line":"        # non-distributed router already hosted"},{"line_number":290,"context_line":"        plugin.get_l3_agents_hosting_routers.return_value \u003d [\u0027a1\u0027]"},{"line_number":291,"context_line":"        router \u003d {\u0027distributed\u0027: True, \u0027id\u0027: \u0027falafel\u0027}"},{"line_number":292,"context_line":"        # distributed router but no agents"},{"line_number":293,"context_line":"        plugin.get_l3_agents.return_value \u003d [\u0027a1\u0027]"},{"line_number":294,"context_line":"        self.scheduler._get_candidates(plugin, mock.MagicMock(), router)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_958ddfd4","line":291,"in_reply_to":"7a740942_40b4b77e","updated":"2015-12-09 02:34:01.000000000","message":"+1, confusion comments should be fixed.","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"27cd45f8089b3cc8262409c62153ce7939c85afe","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        plugin \u003d mock.MagicMock()"},{"line_number":289,"context_line":"        # non-distributed router already hosted"},{"line_number":290,"context_line":"        plugin.get_l3_agents_hosting_routers.return_value \u003d [\u0027a1\u0027]"},{"line_number":291,"context_line":"        router \u003d {\u0027distributed\u0027: True, \u0027id\u0027: \u0027falafel\u0027}"},{"line_number":292,"context_line":"        # distributed router but no agents"},{"line_number":293,"context_line":"        plugin.get_l3_agents.return_value \u003d [\u0027a1\u0027]"},{"line_number":294,"context_line":"        self.scheduler._get_candidates(plugin, mock.MagicMock(), router)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_b3ba606d","line":291,"in_reply_to":"7a740942_958ddfd4","updated":"2015-12-14 18:06:06.000000000","message":"Done","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"eb19a78beba69f7aa970f895eb279085d384c7ac","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.scheduler._get_candidates(plugin, mock.MagicMock(), router)"},{"line_number":295,"context_line":"        self.assertFalse(plugin.get_l3_agent_candidates.called)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def test__get_candidates_calls_get_l3_agent_candidates_for_dvr(self):"},{"line_number":298,"context_line":"        plugin \u003d mock.MagicMock()"},{"line_number":299,"context_line":"        # non-distributed router already hosted"},{"line_number":300,"context_line":"        plugin.get_l3_agents_hosting_routers.return_value \u003d [\u0027a1\u0027, \u0027a2\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_a0147b4c","line":297,"updated":"2015-12-08 14:25:51.000000000","message":"tests names are confusing: first one says \u0027never\u0027, this one is the same but without \u0027never\u0027, so... what\u0027s the difference then?","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"76307732e9d021aeceda0de7f97dcccbe7cafe1f","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.scheduler._get_candidates(plugin, mock.MagicMock(), router)"},{"line_number":295,"context_line":"        self.assertFalse(plugin.get_l3_agent_candidates.called)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def test__get_candidates_calls_get_l3_agent_candidates_for_dvr(self):"},{"line_number":298,"context_line":"        plugin \u003d mock.MagicMock()"},{"line_number":299,"context_line":"        # non-distributed router already hosted"},{"line_number":300,"context_line":"        plugin.get_l3_agents_hosting_routers.return_value \u003d [\u0027a1\u0027, \u0027a2\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_9d241d0d","line":297,"in_reply_to":"7a740942_75fb9347","updated":"2015-12-09 08:22:48.000000000","message":"this is still confusing and does not reflect what test is supposed to test. The fix is about not checking agents that are already hosting the router (not passing them to get_l3_agent_candidates()). So I expected a test like: test__get_candidates_skips_already_scheduled_agents_for_dvr","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"27cd45f8089b3cc8262409c62153ce7939c85afe","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.scheduler._get_candidates(plugin, mock.MagicMock(), router)"},{"line_number":295,"context_line":"        self.assertFalse(plugin.get_l3_agent_candidates.called)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def test__get_candidates_calls_get_l3_agent_candidates_for_dvr(self):"},{"line_number":298,"context_line":"        plugin \u003d mock.MagicMock()"},{"line_number":299,"context_line":"        # non-distributed router already hosted"},{"line_number":300,"context_line":"        plugin.get_l3_agents_hosting_routers.return_value \u003d [\u0027a1\u0027, \u0027a2\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_13aa541a","line":297,"in_reply_to":"7a740942_9d241d0d","updated":"2015-12-14 18:06:06.000000000","message":"Done","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"4f5a7d529c9511d5f7e70118563286df1007111e","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.scheduler._get_candidates(plugin, mock.MagicMock(), router)"},{"line_number":295,"context_line":"        self.assertFalse(plugin.get_l3_agent_candidates.called)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def test__get_candidates_calls_get_l3_agent_candidates_for_dvr(self):"},{"line_number":298,"context_line":"        plugin \u003d mock.MagicMock()"},{"line_number":299,"context_line":"        # non-distributed router already hosted"},{"line_number":300,"context_line":"        plugin.get_l3_agents_hosting_routers.return_value \u003d [\u0027a1\u0027, \u0027a2\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_75fb9347","line":297,"in_reply_to":"7a740942_a0147b4c","updated":"2015-12-09 02:34:01.000000000","message":"I think Swami mean \u0027without\u0027 to \u0027never\u0027, but \u0027without\u0027 will get the line larger than 79 characters.\n\nHow about:\n    def test__get_candidates_with_calls_get_l3_agent_candidates_for_dvr(self):\nor\n    def test__get_candidates_wo_calls_get_l3_agent_candidates_for_dvr(self):","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"eb19a78beba69f7aa970f895eb279085d384c7ac","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        plugin \u003d mock.MagicMock()"},{"line_number":299,"context_line":"        # non-distributed router already hosted"},{"line_number":300,"context_line":"        plugin.get_l3_agents_hosting_routers.return_value \u003d [\u0027a1\u0027, \u0027a2\u0027]"},{"line_number":301,"context_line":"        router \u003d {\u0027distributed\u0027: True, \u0027id\u0027: \u0027falafel\u0027}"},{"line_number":302,"context_line":"        # distributed router but no agents"},{"line_number":303,"context_line":"        plugin.get_l3_agents.return_value \u003d [\u0027a1\u0027, \u0027a2\u0027, \u0027a3\u0027, \u0027a4\u0027, \u0027a5\u0027]"},{"line_number":304,"context_line":"        unscheduled_agents \u003d [\u0027a3\u0027, \u0027a4\u0027, \u0027a5\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_202acb90","line":301,"updated":"2015-12-08 14:25:51.000000000","message":"ditto","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"27cd45f8089b3cc8262409c62153ce7939c85afe","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        plugin \u003d mock.MagicMock()"},{"line_number":299,"context_line":"        # non-distributed router already hosted"},{"line_number":300,"context_line":"        plugin.get_l3_agents_hosting_routers.return_value \u003d [\u0027a1\u0027, \u0027a2\u0027]"},{"line_number":301,"context_line":"        router \u003d {\u0027distributed\u0027: True, \u0027id\u0027: \u0027falafel\u0027}"},{"line_number":302,"context_line":"        # distributed router but no agents"},{"line_number":303,"context_line":"        plugin.get_l3_agents.return_value \u003d [\u0027a1\u0027, \u0027a2\u0027, \u0027a3\u0027, \u0027a4\u0027, \u0027a5\u0027]"},{"line_number":304,"context_line":"        unscheduled_agents \u003d [\u0027a3\u0027, \u0027a4\u0027, \u0027a5\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a710552_f3678823","line":301,"in_reply_to":"7a740942_202acb90","updated":"2015-12-14 18:06:06.000000000","message":"Done","commit_id":"180fa574a5c955540630fb669b024743554833a6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c7cb4dc459f74b92741aacdc1199fb8af5d975a3","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        plugin \u003d mock.MagicMock()"},{"line_number":290,"context_line":"        # distributed router already hosted"},{"line_number":291,"context_line":"        plugin.get_l3_agents_hosting_routers.return_value \u003d [\u0027a1\u0027]"},{"line_number":292,"context_line":"        router \u003d {\u0027distributed\u0027: True, \u0027id\u0027: \u0027falafel\u0027}"},{"line_number":293,"context_line":"        plugin.get_l3_agents.return_value \u003d [\u0027a1\u0027]"},{"line_number":294,"context_line":"        self.scheduler._get_candidates(plugin, mock.MagicMock(), router)"},{"line_number":295,"context_line":"        self.assertFalse(plugin.get_l3_agent_candidates.called)"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a710552_1dd1dacd","line":292,"updated":"2015-12-15 10:24:13.000000000","message":"quite frankly i prefer humous\non a serious note can we use a uuid if possibly","commit_id":"fcc08cb6b915df1098c8013fa3a83c9bec202064"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"d0a0a604d935fb2d2364efb6bdcca3a61e80b062","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        plugin \u003d mock.MagicMock()"},{"line_number":290,"context_line":"        # distributed router already hosted"},{"line_number":291,"context_line":"        plugin.get_l3_agents_hosting_routers.return_value \u003d [\u0027a1\u0027]"},{"line_number":292,"context_line":"        router \u003d {\u0027distributed\u0027: True, \u0027id\u0027: \u0027falafel\u0027}"},{"line_number":293,"context_line":"        plugin.get_l3_agents.return_value \u003d [\u0027a1\u0027]"},{"line_number":294,"context_line":"        self.scheduler._get_candidates(plugin, mock.MagicMock(), router)"},{"line_number":295,"context_line":"        self.assertFalse(plugin.get_l3_agent_candidates.called)"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a710552_5fbf3bfb","line":292,"in_reply_to":"5a710552_1dd1dacd","updated":"2015-12-15 18:02:03.000000000","message":"Yes will change it to \"uuid\".","commit_id":"fcc08cb6b915df1098c8013fa3a83c9bec202064"}]}
