)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"49e22e8d13d53a8afbbb5a206b359c3461d22594","unresolved":false,"context_lines":[{"line_number":9,"context_line":"In check_ports_exist_on_l3agent we have an optimization fix"},{"line_number":10,"context_line":"that checks for the subnets associated with the router and if"},{"line_number":11,"context_line":"the subnets have dhcp enabled we go ahead and create the"},{"line_number":12,"context_line":"router if it is a dvr_snat agent."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"In this process we don\u0027t first check for the agent type, but"},{"line_number":15,"context_line":"we loop through the subnets and then call get_subnets which"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a8ffd7b_325b5330","line":12,"updated":"2015-11-26 08:25:06.000000000","message":"The assumption is actually wrong as node with dvr_snat agent is not necessary the same as node hosting dhcp for network. As a result we have dvr router scheduled to all nodes with dvr_snat agents while they might not actually host any dvr serviceable port. I\u0027d suggest to remove the wrong optimization and go with a round of rechecks to see if https://bugs.launchpad.net/neutron/+bug/1442494 is still actual.","commit_id":"be6e666ccc20924c602fb4d3c533b3c59dc16257"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9040567e9f7f7769036ce5840fc63d12a00e39a4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"In check_ports_exist_on_l3agent we have an optimization fix"},{"line_number":10,"context_line":"that checks for the subnets associated with the router and if"},{"line_number":11,"context_line":"the subnets have dhcp enabled we go ahead and create the"},{"line_number":12,"context_line":"router if it is a dvr_snat agent."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"In this process we don\u0027t first check for the agent type, but"},{"line_number":15,"context_line":"we loop through the subnets and then call get_subnets which"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a8ffd7b_377d9c1c","line":12,"in_reply_to":"9a8ffd7b_267e02af","updated":"2015-12-01 22:26:56.000000000","message":"Done","commit_id":"be6e666ccc20924c602fb4d3c533b3c59dc16257"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"cbef776f16cba2e90bcb5154ed0360d764501282","unresolved":false,"context_lines":[{"line_number":9,"context_line":"In check_ports_exist_on_l3agent we have an optimization fix"},{"line_number":10,"context_line":"that checks for the subnets associated with the router and if"},{"line_number":11,"context_line":"the subnets have dhcp enabled we go ahead and create the"},{"line_number":12,"context_line":"router if it is a dvr_snat agent."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"In this process we don\u0027t first check for the agent type, but"},{"line_number":15,"context_line":"we loop through the subnets and then call get_subnets which"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a8ffd7b_c7087430","line":12,"in_reply_to":"9a8ffd7b_325b5330","updated":"2015-11-30 17:35:38.000000000","message":"Yes I agree with your point.\nBut as per the bug 1442494, this was an issue with the upstream tempest test that was failing on a single node and to address that issue this fix was introduced.\n\nIn the case of non dvr-snat nodes the router scheduling will occur irrespective of this fix. This is very specific to the dvr-snat node.\n\nAre you suggesting right now to leave it as such and see if we still see the race condition and if not clean up the patch later?\n\nOr else just don\u0027t include this check in here since it is a wrong assumption and let us see if the gate breaks again with the race condition?\n\nPlease let me know your thoughts.","commit_id":"be6e666ccc20924c602fb4d3c533b3c59dc16257"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"07c8ad81326d70ac031984592d72927b3f3826a6","unresolved":false,"context_lines":[{"line_number":9,"context_line":"In check_ports_exist_on_l3agent we have an optimization fix"},{"line_number":10,"context_line":"that checks for the subnets associated with the router and if"},{"line_number":11,"context_line":"the subnets have dhcp enabled we go ahead and create the"},{"line_number":12,"context_line":"router if it is a dvr_snat agent."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"In this process we don\u0027t first check for the agent type, but"},{"line_number":15,"context_line":"we loop through the subnets and then call get_subnets which"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a8ffd7b_267e02af","line":12,"in_reply_to":"9a8ffd7b_c7087430","updated":"2015-12-01 09:37:11.000000000","message":"\u003e\u003e Or else just don\u0027t include this check in here since it is a wrong assumption and let us see if the gate breaks again with the race condition?\n\nYes, that\u0027s what I propose: remove the check and see if bug is still there. Please make it dependent on this patch: https://review.openstack.org/#/c/251718/ which fixes the regression introduced by commit 2ee08c3464c53abaf9bc5493132ad7958611e3b8. Note that bug 1442494 was filed after this regression, so might be related.","commit_id":"be6e666ccc20924c602fb4d3c533b3c59dc16257"}],"neutron/db/l3_agentschedulers_db.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"b09a82f1abc2ea0a5e3688ef8ee5a5464f855c4f","unresolved":false,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        if agent_mode \u003d\u003d constants.L3_AGENT_MODE_DVR_SNAT:"},{"line_number":461,"context_line":"            for subnet_id in subnet_ids:"},{"line_number":462,"context_line":"                subnet_dict \u003d core_plugin.get_subnet(context, subnet_id)"},{"line_number":463,"context_line":"                if subnet_dict[\u0027enable_dhcp\u0027]:"},{"line_number":464,"context_line":"                    return True"},{"line_number":465,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_5b3f1dd6","line":462,"updated":"2015-11-26 03:34:20.000000000","message":"the code here is going to query subnets table and fetch subnets objects, but those subnet objects are only used to check whether their enable_dhcp attribute is True or not.\n\nSo, why not directly query Subnets table with subnet_id and enable_dhcp\u003dTrue/1 as filter, and check whether at least one record exist.","commit_id":"a0c667dffa290d5450952141e4b2b28d145a4a01"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"3dcac6feabba1e24b8eba5ae5c7283e519fc1efd","unresolved":false,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        if agent_mode \u003d\u003d constants.L3_AGENT_MODE_DVR_SNAT:"},{"line_number":461,"context_line":"            for subnet_id in subnet_ids:"},{"line_number":462,"context_line":"                subnet_dict \u003d core_plugin.get_subnet(context, subnet_id)"},{"line_number":463,"context_line":"                if subnet_dict[\u0027enable_dhcp\u0027]:"},{"line_number":464,"context_line":"                    return True"},{"line_number":465,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_aff3639d","line":462,"in_reply_to":"9a8ffd7b_44ebbeb0","updated":"2015-11-26 05:59:20.000000000","message":"Ok, if you have plan for that, I can remove my -1 for now.","commit_id":"a0c667dffa290d5450952141e4b2b28d145a4a01"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"0fa8133fdedd6a20957a4afcc0f2f074a17d651a","unresolved":false,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        if agent_mode \u003d\u003d constants.L3_AGENT_MODE_DVR_SNAT:"},{"line_number":461,"context_line":"            for subnet_id in subnet_ids:"},{"line_number":462,"context_line":"                subnet_dict \u003d core_plugin.get_subnet(context, subnet_id)"},{"line_number":463,"context_line":"                if subnet_dict[\u0027enable_dhcp\u0027]:"},{"line_number":464,"context_line":"                    return True"},{"line_number":465,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_44ebbeb0","line":462,"in_reply_to":"9a8ffd7b_5b3f1dd6","updated":"2015-11-26 05:20:15.000000000","message":"I think that can be addressed in another patch.\nSince I don\u0027t want to add too many changes to one patch.","commit_id":"a0c667dffa290d5450952141e4b2b28d145a4a01"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"774c8cd656353587d86008e50d8b609a138b953a","unresolved":false,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        if agent_mode \u003d\u003d constants.L3_AGENT_MODE_DVR_SNAT:"},{"line_number":461,"context_line":"            for subnet_id in subnet_ids:"},{"line_number":462,"context_line":"                subnet_dict \u003d core_plugin.get_subnet(context, subnet_id)"},{"line_number":463,"context_line":"                if subnet_dict[\u0027enable_dhcp\u0027]:"},{"line_number":464,"context_line":"                    return True"},{"line_number":465,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_2fe9b380","line":462,"in_reply_to":"9a8ffd7b_aff3639d","updated":"2015-11-26 06:04:13.000000000","message":"Yes, I will work on it, once this gets in.","commit_id":"a0c667dffa290d5450952141e4b2b28d145a4a01"}],"neutron/tests/functional/services/l3_router/test_l3_dvr_router_plugin.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d0e28aa11074048acd5262245cb1ba309846a69a","unresolved":false,"context_lines":[{"line_number":467,"context_line":"                {\u0027subnet_id\u0027: subnet[\u0027subnet\u0027][\u0027id\u0027]})"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"            # since there are no vm ports on HOST, at this point the router"},{"line_number":470,"context_line":"            # should be scheduled to only dvr_snat agent"},{"line_number":471,"context_line":"            agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":472,"context_line":"                self.context, router[\u0027id\u0027])"},{"line_number":473,"context_line":"            self.assertEqual(0, len(agents[\u0027agents\u0027]))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_ee739f7e","line":470,"updated":"2015-12-02 12:58:41.000000000","message":"please update comment","commit_id":"83bab606edd1e0b9f8f3a9fbf6b20cf121d9f95f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a91e00d49cad5048a24a83219df59c7e306315bc","unresolved":false,"context_lines":[{"line_number":467,"context_line":"                {\u0027subnet_id\u0027: subnet[\u0027subnet\u0027][\u0027id\u0027]})"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"            # since there are no vm ports on HOST, at this point the router"},{"line_number":470,"context_line":"            # should be scheduled to only dvr_snat agent"},{"line_number":471,"context_line":"            agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":472,"context_line":"                self.context, router[\u0027id\u0027])"},{"line_number":473,"context_line":"            self.assertEqual(0, len(agents[\u0027agents\u0027]))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_49416ea8","line":470,"in_reply_to":"9a8ffd7b_ee739f7e","updated":"2015-12-02 18:30:42.000000000","message":"Done","commit_id":"83bab606edd1e0b9f8f3a9fbf6b20cf121d9f95f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d0e28aa11074048acd5262245cb1ba309846a69a","unresolved":false,"context_lines":[{"line_number":479,"context_line":"                    self.context, port[\u0027port\u0027][\u0027id\u0027],"},{"line_number":480,"context_line":"                    {\u0027port\u0027: {\u0027binding:host_id\u0027: HOST}})"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"                # now router should be scheduled to both agents"},{"line_number":483,"context_line":"                agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":484,"context_line":"                    self.context, router[\u0027id\u0027])"},{"line_number":485,"context_line":"                self.assertEqual(1, len(agents[\u0027agents\u0027]))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_ce66dbba","line":482,"updated":"2015-12-02 12:58:41.000000000","message":"ditto","commit_id":"83bab606edd1e0b9f8f3a9fbf6b20cf121d9f95f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a91e00d49cad5048a24a83219df59c7e306315bc","unresolved":false,"context_lines":[{"line_number":479,"context_line":"                    self.context, port[\u0027port\u0027][\u0027id\u0027],"},{"line_number":480,"context_line":"                    {\u0027port\u0027: {\u0027binding:host_id\u0027: HOST}})"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"                # now router should be scheduled to both agents"},{"line_number":483,"context_line":"                agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":484,"context_line":"                    self.context, router[\u0027id\u0027])"},{"line_number":485,"context_line":"                self.assertEqual(1, len(agents[\u0027agents\u0027]))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_693eb229","line":482,"in_reply_to":"9a8ffd7b_ce66dbba","updated":"2015-12-02 18:30:42.000000000","message":"Done","commit_id":"83bab606edd1e0b9f8f3a9fbf6b20cf121d9f95f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"829c67a259ff04682545e28bf1c64d7be77d04b6","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                self.context, router[\u0027id\u0027],"},{"line_number":467,"context_line":"                {\u0027subnet_id\u0027: subnet[\u0027subnet\u0027][\u0027id\u0027]})"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"            # since there are no vm ports on HOST, at this point the router"},{"line_number":470,"context_line":"            # should not be scheduled to any dvr_snat agent"},{"line_number":471,"context_line":"            agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":472,"context_line":"                self.context, router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_678ec42f","line":469,"updated":"2015-12-03 05:03:41.000000000","message":".. and router has no external gateway, at this point","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ed4e745e587fcf3a79ca3b94c88b83030a84fedb","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                self.context, router[\u0027id\u0027],"},{"line_number":467,"context_line":"                {\u0027subnet_id\u0027: subnet[\u0027subnet\u0027][\u0027id\u0027]})"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"            # since there are no vm ports on HOST, at this point the router"},{"line_number":470,"context_line":"            # should not be scheduled to any dvr_snat agent"},{"line_number":471,"context_line":"            agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":472,"context_line":"                self.context, router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_529afb15","line":469,"in_reply_to":"9a8ffd7b_678ec42f","updated":"2015-12-04 00:14:12.000000000","message":"Done","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"3efd690d98814a9d64bf3cc8b2e78c8065066f16","unresolved":false,"context_lines":[{"line_number":467,"context_line":"                {\u0027subnet_id\u0027: subnet[\u0027subnet\u0027][\u0027id\u0027]})"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"            # since there are no vm ports on HOST, at this point the router"},{"line_number":470,"context_line":"            # should not be scheduled to any dvr_snat agent"},{"line_number":471,"context_line":"            agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":472,"context_line":"                self.context, router[\u0027id\u0027])"},{"line_number":473,"context_line":"            self.assertEqual(0, len(agents[\u0027agents\u0027]))"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_e5a707ba","line":470,"updated":"2015-12-03 09:19:21.000000000","message":"should not be scheduled to any dvr or dvr_snat agents ? since setup will give us a dvr_snat agent, and we also have dvr agent here.","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ed4e745e587fcf3a79ca3b94c88b83030a84fedb","unresolved":false,"context_lines":[{"line_number":467,"context_line":"                {\u0027subnet_id\u0027: subnet[\u0027subnet\u0027][\u0027id\u0027]})"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"            # since there are no vm ports on HOST, at this point the router"},{"line_number":470,"context_line":"            # should not be scheduled to any dvr_snat agent"},{"line_number":471,"context_line":"            agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":472,"context_line":"                self.context, router[\u0027id\u0027])"},{"line_number":473,"context_line":"            self.assertEqual(0, len(agents[\u0027agents\u0027]))"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_f29e8706","line":470,"in_reply_to":"9a8ffd7b_e5a707ba","updated":"2015-12-04 00:14:12.000000000","message":"Done","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"829c67a259ff04682545e28bf1c64d7be77d04b6","unresolved":false,"context_lines":[{"line_number":479,"context_line":"                    self.context, port[\u0027port\u0027][\u0027id\u0027],"},{"line_number":480,"context_line":"                    {\u0027port\u0027: {\u0027binding:host_id\u0027: HOST}})"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"                # now router should be scheduled to an agent"},{"line_number":483,"context_line":"                agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":484,"context_line":"                    self.context, router[\u0027id\u0027])"},{"line_number":485,"context_line":"                self.assertEqual(1, len(agents[\u0027agents\u0027]))"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_a7702c41","line":482,"updated":"2015-12-03 05:03:41.000000000","message":"an agent -\u003e dvr_agent on host HOST","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ed4e745e587fcf3a79ca3b94c88b83030a84fedb","unresolved":false,"context_lines":[{"line_number":479,"context_line":"                    self.context, port[\u0027port\u0027][\u0027id\u0027],"},{"line_number":480,"context_line":"                    {\u0027port\u0027: {\u0027binding:host_id\u0027: HOST}})"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"                # now router should be scheduled to an agent"},{"line_number":483,"context_line":"                agents \u003d self.l3_plugin.list_l3_agents_hosting_router("},{"line_number":484,"context_line":"                    self.context, router[\u0027id\u0027])"},{"line_number":485,"context_line":"                self.assertEqual(1, len(agents[\u0027agents\u0027]))"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_12a47355","line":482,"in_reply_to":"9a8ffd7b_a7702c41","updated":"2015-12-04 00:14:12.000000000","message":"Done","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"}],"neutron/tests/unit/db/test_agentschedulers_db.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"3efd690d98814a9d64bf3cc8b2e78c8065066f16","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"            self.assertEqual(1, len(snat_agents))"},{"line_number":1130,"context_line":""},{"line_number":1131,"context_line":"    def _create_binded_port_for_subnet("},{"line_number":1132,"context_line":"            self, s_int, host1\u003dNone, host2\u003dNone):"},{"line_number":1133,"context_line":"        with self.port(subnet\u003ds_int,"},{"line_number":1134,"context_line":"                       device_owner\u003d\u0027compute:None\u0027) as port1,\\"},{"line_number":1135,"context_line":"                self.port(subnet\u003ds_int,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_45661352","line":1132,"updated":"2015-12-03 09:19:21.000000000","message":"no host1 or/and host2 is None using case ? If so, the if statement in L1137 and L1143 need be fixed.","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ed4e745e587fcf3a79ca3b94c88b83030a84fedb","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"            self.assertEqual(1, len(snat_agents))"},{"line_number":1130,"context_line":""},{"line_number":1131,"context_line":"    def _create_binded_port_for_subnet("},{"line_number":1132,"context_line":"            self, s_int, host1\u003dNone, host2\u003dNone):"},{"line_number":1133,"context_line":"        with self.port(subnet\u003ds_int,"},{"line_number":1134,"context_line":"                       device_owner\u003d\u0027compute:None\u0027) as port1,\\"},{"line_number":1135,"context_line":"                self.port(subnet\u003ds_int,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_92a7034f","line":1132,"in_reply_to":"9a8ffd7b_45661352","updated":"2015-12-04 00:14:12.000000000","message":"Done","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"829c67a259ff04682545e28bf1c64d7be77d04b6","unresolved":false,"context_lines":[{"line_number":1140,"context_line":"                                              port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1141,"context_line":"                self.deserialize("},{"line_number":1142,"context_line":"                    self.fmt, req.get_response(self.api))"},{"line_number":1143,"context_line":"            if host2 is not None:"},{"line_number":1144,"context_line":"                data \u003d {\u0027port\u0027: {\u0027binding:host_id\u0027: host2}}"},{"line_number":1145,"context_line":"                req \u003d self.new_update_request(\u0027ports\u0027, data,"},{"line_number":1146,"context_line":"                                              port2[\u0027port\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_47b700d8","line":1143,"updated":"2015-12-03 05:03:41.000000000","message":"would be more clear if function creates one port on a given host, can call it two times for different hosts where needed.","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ed4e745e587fcf3a79ca3b94c88b83030a84fedb","unresolved":false,"context_lines":[{"line_number":1140,"context_line":"                                              port1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":1141,"context_line":"                self.deserialize("},{"line_number":1142,"context_line":"                    self.fmt, req.get_response(self.api))"},{"line_number":1143,"context_line":"            if host2 is not None:"},{"line_number":1144,"context_line":"                data \u003d {\u0027port\u0027: {\u0027binding:host_id\u0027: host2}}"},{"line_number":1145,"context_line":"                req \u003d self.new_update_request(\u0027ports\u0027, data,"},{"line_number":1146,"context_line":"                                              port2[\u0027port\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_d2ad8b32","line":1143,"in_reply_to":"9a8ffd7b_47b700d8","updated":"2015-12-04 00:14:12.000000000","message":"Done","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"829c67a259ff04682545e28bf1c64d7be77d04b6","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"        with self.subnet() as s:"},{"line_number":1156,"context_line":"            net_id \u003d s[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":1157,"context_line":"            self._set_net_external(net_id)"},{"line_number":1158,"context_line":"            self._create_binded_port_for_subnet("},{"line_number":1159,"context_line":"                s, host1\u003dL3_HOSTA, host2\u003dL3_HOSTB)"},{"line_number":1160,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"},{"line_number":1161,"context_line":"                      \u0027external_gateway_info\u0027: {\u0027network_id\u0027: net_id},"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_a7d58ce5","line":1158,"updated":"2015-12-03 05:03:41.000000000","message":"this tests csnat rescheduling so we don\u0027t need dvr serviceable ports in this test at all","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"3efd690d98814a9d64bf3cc8b2e78c8065066f16","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"        with self.subnet() as s:"},{"line_number":1156,"context_line":"            net_id \u003d s[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":1157,"context_line":"            self._set_net_external(net_id)"},{"line_number":1158,"context_line":"            self._create_binded_port_for_subnet("},{"line_number":1159,"context_line":"                s, host1\u003dL3_HOSTA, host2\u003dL3_HOSTB)"},{"line_number":1160,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"},{"line_number":1161,"context_line":"                      \u0027external_gateway_info\u0027: {\u0027network_id\u0027: net_id},"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_20197d88","line":1158,"in_reply_to":"9a8ffd7b_a7d58ce5","updated":"2015-12-03 09:19:21.000000000","message":"+1, L1161 can make router be scheduled to agent, and I think it should be:\n    self.assertEqual(2, len(l3agents[\u0027agents\u0027]))\nfor both L1169 and L1174.","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ed4e745e587fcf3a79ca3b94c88b83030a84fedb","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"        with self.subnet() as s:"},{"line_number":1156,"context_line":"            net_id \u003d s[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":1157,"context_line":"            self._set_net_external(net_id)"},{"line_number":1158,"context_line":"            self._create_binded_port_for_subnet("},{"line_number":1159,"context_line":"                s, host1\u003dL3_HOSTA, host2\u003dL3_HOSTB)"},{"line_number":1160,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"},{"line_number":1161,"context_line":"                      \u0027external_gateway_info\u0027: {\u0027network_id\u0027: net_id},"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_5268bbf5","line":1158,"in_reply_to":"9a8ffd7b_a7d58ce5","updated":"2015-12-04 00:14:12.000000000","message":"Done","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"829c67a259ff04682545e28bf1c64d7be77d04b6","unresolved":false,"context_lines":[{"line_number":1185,"context_line":"            net_id \u003d s[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":1186,"context_line":"            self._set_net_external(net_id)"},{"line_number":1187,"context_line":""},{"line_number":1188,"context_line":"            self._create_binded_port_for_subnet("},{"line_number":1189,"context_line":"                s, host1\u003dL3_HOSTA, host2\u003dL3_HOSTB)"},{"line_number":1190,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"},{"line_number":1191,"context_line":"                      \u0027external_gateway_info\u0027: {\u0027network_id\u0027: net_id},"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_4705c077","line":1188,"updated":"2015-12-03 05:03:41.000000000","message":"ditto","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ed4e745e587fcf3a79ca3b94c88b83030a84fedb","unresolved":false,"context_lines":[{"line_number":1185,"context_line":"            net_id \u003d s[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":1186,"context_line":"            self._set_net_external(net_id)"},{"line_number":1187,"context_line":""},{"line_number":1188,"context_line":"            self._create_binded_port_for_subnet("},{"line_number":1189,"context_line":"                s, host1\u003dL3_HOSTA, host2\u003dL3_HOSTB)"},{"line_number":1190,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"},{"line_number":1191,"context_line":"                      \u0027external_gateway_info\u0027: {\u0027network_id\u0027: net_id},"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_d286ebb8","line":1188,"in_reply_to":"9a8ffd7b_4705c077","updated":"2015-12-04 00:14:12.000000000","message":"Done","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"3efd690d98814a9d64bf3cc8b2e78c8065066f16","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"                self.adminContext, [r[\u0027id\u0027]])[0][\u0027l3_agent\u0027]"},{"line_number":1203,"context_line":"            # NOTE: This will only remove the snat namespace and not"},{"line_number":1204,"context_line":"            # the router namespace since we have a valid dvr serviceable"},{"line_number":1205,"context_line":"            # port serviced by the agent."},{"line_number":1206,"context_line":"            self.l3plugin.remove_router_from_l3_agent("},{"line_number":1207,"context_line":"                self.adminContext, csnat_agent[\u0027id\u0027], r[\u0027id\u0027])"},{"line_number":1208,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_bb703c73","line":1205,"updated":"2015-12-03 09:19:21.000000000","message":"I\u0027m not sure it make sense here, as Oleg mentioned, it\u0027s csnat rescheduling test here, I think the port we should consider in this case is external gateway, not compute device.","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ed4e745e587fcf3a79ca3b94c88b83030a84fedb","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"                self.adminContext, [r[\u0027id\u0027]])[0][\u0027l3_agent\u0027]"},{"line_number":1203,"context_line":"            # NOTE: This will only remove the snat namespace and not"},{"line_number":1204,"context_line":"            # the router namespace since we have a valid dvr serviceable"},{"line_number":1205,"context_line":"            # port serviced by the agent."},{"line_number":1206,"context_line":"            self.l3plugin.remove_router_from_l3_agent("},{"line_number":1207,"context_line":"                self.adminContext, csnat_agent[\u0027id\u0027], r[\u0027id\u0027])"},{"line_number":1208,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_f2b5277e","line":1205,"in_reply_to":"9a8ffd7b_bb703c73","updated":"2015-12-04 00:14:12.000000000","message":"This is already handled here, so no need to add another gateway port.","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"3efd690d98814a9d64bf3cc8b2e78c8065066f16","unresolved":false,"context_lines":[{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"            l3agents \u003d self.l3plugin.list_l3_agents_hosting_router("},{"line_number":1210,"context_line":"                self.adminContext, r[\u0027id\u0027])"},{"line_number":1211,"context_line":"            self.assertEqual(2, len(l3agents[\u0027agents\u0027]))"},{"line_number":1212,"context_line":"            self.assertFalse(self.l3plugin.get_snat_bindings("},{"line_number":1213,"context_line":"                self.adminContext, [r[\u0027id\u0027]]))"},{"line_number":1214,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_9bcf787e","line":1211,"updated":"2015-12-03 09:19:21.000000000","message":"Per above comments, I this we should keep expected value to 1.","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ed4e745e587fcf3a79ca3b94c88b83030a84fedb","unresolved":false,"context_lines":[{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"            l3agents \u003d self.l3plugin.list_l3_agents_hosting_router("},{"line_number":1210,"context_line":"                self.adminContext, r[\u0027id\u0027])"},{"line_number":1211,"context_line":"            self.assertEqual(2, len(l3agents[\u0027agents\u0027]))"},{"line_number":1212,"context_line":"            self.assertFalse(self.l3plugin.get_snat_bindings("},{"line_number":1213,"context_line":"                self.adminContext, [r[\u0027id\u0027]]))"},{"line_number":1214,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_b2b0ff8c","line":1211,"in_reply_to":"9a8ffd7b_9bcf787e","updated":"2015-12-04 00:14:12.000000000","message":"Done","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6d50468dc3014a6c01a05ea7342a349a34d3c51f","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"                self.subnet(cidr\u003d\u002720.0.0.0/24\u0027) as s_ext:"},{"line_number":1098,"context_line":"            net_id \u003d s_ext[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":1099,"context_line":"            self._set_net_external(net_id)"},{"line_number":1100,"context_line":"            self._create_binded_port_for_subnet(s_int, host\u003dL3_HOSTA)"},{"line_number":1101,"context_line":"            self._create_binded_port_for_subnet(s_int, host\u003dL3_HOSTB)"},{"line_number":1102,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"},{"line_number":1103,"context_line":"                      \u0027admin_state_up\u0027: True,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_cd1abe6e","line":1100,"updated":"2015-12-04 08:26:53.000000000","message":"we don\u0027t need binded dvr serviceable ports in this test. Please update 1110-1112 and 1122-11245 accordingly","commit_id":"f290e41e0b9e93673471c18a8bbac6eee4ef132c"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"df923ebd0cefc51c15fc53b257f7d935a592f9bf","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"                self.subnet(cidr\u003d\u002720.0.0.0/24\u0027) as s_ext:"},{"line_number":1098,"context_line":"            net_id \u003d s_ext[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":1099,"context_line":"            self._set_net_external(net_id)"},{"line_number":1100,"context_line":"            self._create_binded_port_for_subnet(s_int, host\u003dL3_HOSTA)"},{"line_number":1101,"context_line":"            self._create_binded_port_for_subnet(s_int, host\u003dL3_HOSTB)"},{"line_number":1102,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"},{"line_number":1103,"context_line":"                      \u0027admin_state_up\u0027: True,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_66ae2b87","line":1100,"in_reply_to":"7a740942_cd1abe6e","updated":"2015-12-04 18:34:13.000000000","message":"Done","commit_id":"f290e41e0b9e93673471c18a8bbac6eee4ef132c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6d50468dc3014a6c01a05ea7342a349a34d3c51f","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"            self.assertEqual(1, len(snat_agents))"},{"line_number":1130,"context_line":""},{"line_number":1131,"context_line":"    def _create_binded_port_for_subnet("},{"line_number":1132,"context_line":"            self, s_int, host\u003dNone):"},{"line_number":1133,"context_line":"        with self.port(subnet\u003ds_int,"},{"line_number":1134,"context_line":"                       device_owner\u003d\u0027compute:None\u0027) as port:"},{"line_number":1135,"context_line":"            if host is not None:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_b290f1ed","line":1132,"updated":"2015-12-04 08:26:53.000000000","message":"this is misleading, why should one call create_\"binded\"_port_for_subnet with host\u003dNone, Consider making it required parameter.","commit_id":"f290e41e0b9e93673471c18a8bbac6eee4ef132c"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"df923ebd0cefc51c15fc53b257f7d935a592f9bf","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"            self.assertEqual(1, len(snat_agents))"},{"line_number":1130,"context_line":""},{"line_number":1131,"context_line":"    def _create_binded_port_for_subnet("},{"line_number":1132,"context_line":"            self, s_int, host\u003dNone):"},{"line_number":1133,"context_line":"        with self.port(subnet\u003ds_int,"},{"line_number":1134,"context_line":"                       device_owner\u003d\u0027compute:None\u0027) as port:"},{"line_number":1135,"context_line":"            if host is not None:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_a6cbb352","line":1132,"in_reply_to":"7a740942_b290f1ed","updated":"2015-12-04 18:34:13.000000000","message":"If I address your first comment, then this may go away.","commit_id":"f290e41e0b9e93673471c18a8bbac6eee4ef132c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c9de5f65dfd87d1c9d0e6d0a839d0504e8efc8fb","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"                self.subnet(cidr\u003d\u002720.0.0.0/24\u0027) as s_ext:"},{"line_number":1098,"context_line":"            net_id \u003d s_ext[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":1099,"context_line":"            self._set_net_external(net_id)"},{"line_number":1100,"context_line":""},{"line_number":1101,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"},{"line_number":1102,"context_line":"                      \u0027admin_state_up\u0027: True,"},{"line_number":1103,"context_line":"                      \u0027distributed\u0027: True}"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_f391669a","side":"PARENT","line":1100,"updated":"2015-12-06 07:00:39.000000000","message":"unrelated","commit_id":"87ce73141dddb840ffc523f253fdf87aef11d1c7"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"8c5309a5fe86bc7a8a35e6f5e9c6bfd3c3a6a2b2","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"                self.subnet(cidr\u003d\u002720.0.0.0/24\u0027) as s_ext:"},{"line_number":1098,"context_line":"            net_id \u003d s_ext[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":1099,"context_line":"            self._set_net_external(net_id)"},{"line_number":1100,"context_line":""},{"line_number":1101,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"},{"line_number":1102,"context_line":"                      \u0027admin_state_up\u0027: True,"},{"line_number":1103,"context_line":"                      \u0027distributed\u0027: True}"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_600a6f23","side":"PARENT","line":1100,"in_reply_to":"7a740942_f391669a","updated":"2015-12-07 02:05:10.000000000","message":"Done","commit_id":"87ce73141dddb840ffc523f253fdf87aef11d1c7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c9de5f65dfd87d1c9d0e6d0a839d0504e8efc8fb","unresolved":false,"context_lines":[{"line_number":1135,"context_line":"        with self.subnet() as s:"},{"line_number":1136,"context_line":"            net_id \u003d s[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":1137,"context_line":"            self._set_net_external(net_id)"},{"line_number":1138,"context_line":""},{"line_number":1139,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"},{"line_number":1140,"context_line":"                      \u0027external_gateway_info\u0027: {\u0027network_id\u0027: net_id},"},{"line_number":1141,"context_line":"                      \u0027admin_state_up\u0027: True,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_138d127b","side":"PARENT","line":1138,"updated":"2015-12-06 07:00:39.000000000","message":"unrelated","commit_id":"87ce73141dddb840ffc523f253fdf87aef11d1c7"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"8c5309a5fe86bc7a8a35e6f5e9c6bfd3c3a6a2b2","unresolved":false,"context_lines":[{"line_number":1135,"context_line":"        with self.subnet() as s:"},{"line_number":1136,"context_line":"            net_id \u003d s[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":1137,"context_line":"            self._set_net_external(net_id)"},{"line_number":1138,"context_line":""},{"line_number":1139,"context_line":"            router \u003d {\u0027name\u0027: \u0027router1\u0027,"},{"line_number":1140,"context_line":"                      \u0027external_gateway_info\u0027: {\u0027network_id\u0027: net_id},"},{"line_number":1141,"context_line":"                      \u0027admin_state_up\u0027: True,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_45098530","side":"PARENT","line":1138,"in_reply_to":"7a740942_138d127b","updated":"2015-12-07 02:05:10.000000000","message":"Done","commit_id":"87ce73141dddb840ffc523f253fdf87aef11d1c7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c9de5f65dfd87d1c9d0e6d0a839d0504e8efc8fb","unresolved":false,"context_lines":[{"line_number":1105,"context_line":"            # add router interface first"},{"line_number":1106,"context_line":"            self.l3plugin.add_router_interface(self.adminContext, r[\u0027id\u0027],"},{"line_number":1107,"context_line":"                {\u0027subnet_id\u0027: s_int[\u0027subnet\u0027][\u0027id\u0027]})"},{"line_number":1108,"context_line":"            # Check if the router is scheduled to any of the agents"},{"line_number":1109,"context_line":"            l3agents \u003d self._list_l3_agents_hosting_router(r[\u0027id\u0027])"},{"line_number":1110,"context_line":"            self.assertEqual(0, len(l3agents[\u0027agents\u0027]))"},{"line_number":1111,"context_line":"            # check that snat is not scheduled as router is not connected to"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_33984ec0","line":1108,"updated":"2015-12-06 07:00:39.000000000","message":"is not scheduled","commit_id":"f6883518be1d7c1d723044d8524a885316699523"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"8c5309a5fe86bc7a8a35e6f5e9c6bfd3c3a6a2b2","unresolved":false,"context_lines":[{"line_number":1105,"context_line":"            # add router interface first"},{"line_number":1106,"context_line":"            self.l3plugin.add_router_interface(self.adminContext, r[\u0027id\u0027],"},{"line_number":1107,"context_line":"                {\u0027subnet_id\u0027: s_int[\u0027subnet\u0027][\u0027id\u0027]})"},{"line_number":1108,"context_line":"            # Check if the router is scheduled to any of the agents"},{"line_number":1109,"context_line":"            l3agents \u003d self._list_l3_agents_hosting_router(r[\u0027id\u0027])"},{"line_number":1110,"context_line":"            self.assertEqual(0, len(l3agents[\u0027agents\u0027]))"},{"line_number":1111,"context_line":"            # check that snat is not scheduled as router is not connected to"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_a0005702","line":1108,"in_reply_to":"7a740942_33984ec0","updated":"2015-12-07 02:05:10.000000000","message":"Done","commit_id":"f6883518be1d7c1d723044d8524a885316699523"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c9de5f65dfd87d1c9d0e6d0a839d0504e8efc8fb","unresolved":false,"context_lines":[{"line_number":1117,"context_line":"            # connect router to external network"},{"line_number":1118,"context_line":"            self.l3plugin.update_router(self.adminContext, r[\u0027id\u0027],"},{"line_number":1119,"context_line":"                {\u0027router\u0027: {\u0027external_gateway_info\u0027: {\u0027network_id\u0027: net_id}}})"},{"line_number":1120,"context_line":"            # router should still be scheduled to both dvr_snat agents"},{"line_number":1121,"context_line":"            l3agents \u003d self._list_l3_agents_hosting_router(r[\u0027id\u0027])"},{"line_number":1122,"context_line":"            self.assertEqual(1, len(l3agents[\u0027agents\u0027]))"},{"line_number":1123,"context_line":"            # now snat portion should be scheduled as router is connected"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_53939aa3","line":1120,"updated":"2015-12-06 07:00:39.000000000","message":"to one of dvr_snat agents","commit_id":"f6883518be1d7c1d723044d8524a885316699523"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"8c5309a5fe86bc7a8a35e6f5e9c6bfd3c3a6a2b2","unresolved":false,"context_lines":[{"line_number":1117,"context_line":"            # connect router to external network"},{"line_number":1118,"context_line":"            self.l3plugin.update_router(self.adminContext, r[\u0027id\u0027],"},{"line_number":1119,"context_line":"                {\u0027router\u0027: {\u0027external_gateway_info\u0027: {\u0027network_id\u0027: net_id}}})"},{"line_number":1120,"context_line":"            # router should still be scheduled to both dvr_snat agents"},{"line_number":1121,"context_line":"            l3agents \u003d self._list_l3_agents_hosting_router(r[\u0027id\u0027])"},{"line_number":1122,"context_line":"            self.assertEqual(1, len(l3agents[\u0027agents\u0027]))"},{"line_number":1123,"context_line":"            # now snat portion should be scheduled as router is connected"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_e507511a","line":1120,"in_reply_to":"7a740942_53939aa3","updated":"2015-12-07 02:05:10.000000000","message":"Done","commit_id":"f6883518be1d7c1d723044d8524a885316699523"}],"neutron/tests/unit/scheduler/test_l3_agent_scheduler.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"3efd690d98814a9d64bf3cc8b2e78c8065066f16","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        self.plugin.get_ports \u003d mock.Mock(return_value\u003d[])"},{"line_number":691,"context_line":"        return l3_agent"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"    def test_check_ports_exist_on_l3agent_no_subnets(self):"},{"line_number":694,"context_line":"        l3_agent \u003d self._prepare_check_ports_exist_tests()"},{"line_number":695,"context_line":"        # no subnets"},{"line_number":696,"context_line":"        val \u003d self.check_ports_exist_on_l3agent("}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_d76074d1","line":693,"updated":"2015-12-03 09:19:21.000000000","message":"please also remove this test case.","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ed4e745e587fcf3a79ca3b94c88b83030a84fedb","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        self.plugin.get_ports \u003d mock.Mock(return_value\u003d[])"},{"line_number":691,"context_line":"        return l3_agent"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"    def test_check_ports_exist_on_l3agent_no_subnets(self):"},{"line_number":694,"context_line":"        l3_agent \u003d self._prepare_check_ports_exist_tests()"},{"line_number":695,"context_line":"        # no subnets"},{"line_number":696,"context_line":"        val \u003d self.check_ports_exist_on_l3agent("}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_7281378f","line":693,"in_reply_to":"9a8ffd7b_d76074d1","updated":"2015-12-04 00:14:12.000000000","message":"Done","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"3efd690d98814a9d64bf3cc8b2e78c8065066f16","unresolved":false,"context_lines":[{"line_number":703,"context_line":"        self.plugin.get_subnet_ids_on_router \u003d mock.Mock("},{"line_number":704,"context_line":"            return_value\u003d[str(uuid.uuid4())])"},{"line_number":705,"context_line":"        val \u003d self.check_ports_exist_on_l3agent(self.adminContext,"},{"line_number":706,"context_line":"                                                l3_agent, [])"},{"line_number":707,"context_line":"        self.assertFalse(val)"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"    def test_check_ports_exist_on_l3agent_subnet_match(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a8ffd7b_f7b25848","line":706,"updated":"2015-12-03 09:19:21.000000000","message":"[] is invalid now, use some other mock value instead.","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ed4e745e587fcf3a79ca3b94c88b83030a84fedb","unresolved":false,"context_lines":[{"line_number":703,"context_line":"        self.plugin.get_subnet_ids_on_router \u003d mock.Mock("},{"line_number":704,"context_line":"            return_value\u003d[str(uuid.uuid4())])"},{"line_number":705,"context_line":"        val \u003d self.check_ports_exist_on_l3agent(self.adminContext,"},{"line_number":706,"context_line":"                                                l3_agent, [])"},{"line_number":707,"context_line":"        self.assertFalse(val)"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"    def test_check_ports_exist_on_l3agent_subnet_match(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_d274abd0","line":706,"in_reply_to":"9a8ffd7b_f7b25848","updated":"2015-12-04 00:14:12.000000000","message":"Done","commit_id":"af4482f8b0c1427724b90aa95a0893d99a3c8d1d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6d50468dc3014a6c01a05ea7342a349a34d3c51f","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        self.plugin.get_ports \u003d mock.Mock(return_value\u003d[])"},{"line_number":691,"context_line":"        return l3_agent"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"    def test_check_ports_exist_on_l3agent_no_subnet_match(self):"},{"line_number":694,"context_line":"        l3_agent \u003d self._prepare_check_ports_exist_tests()"},{"line_number":695,"context_line":"        # no matching subnet"},{"line_number":696,"context_line":"        subnet_ids \u003d [str(uuid.uuid4())]"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_ed41ba3a","line":693,"updated":"2015-12-04 08:26:53.000000000","message":"is this still relevant?","commit_id":"f290e41e0b9e93673471c18a8bbac6eee4ef132c"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"df923ebd0cefc51c15fc53b257f7d935a592f9bf","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        self.plugin.get_ports \u003d mock.Mock(return_value\u003d[])"},{"line_number":691,"context_line":"        return l3_agent"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"    def test_check_ports_exist_on_l3agent_no_subnet_match(self):"},{"line_number":694,"context_line":"        l3_agent \u003d self._prepare_check_ports_exist_tests()"},{"line_number":695,"context_line":"        # no matching subnet"},{"line_number":696,"context_line":"        subnet_ids \u003d [str(uuid.uuid4())]"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_06eba7b1","line":693,"in_reply_to":"7a740942_ed41ba3a","updated":"2015-12-04 18:34:13.000000000","message":"Yes it seems it is not required as well. I have removed it.","commit_id":"f290e41e0b9e93673471c18a8bbac6eee4ef132c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c9de5f65dfd87d1c9d0e6d0a839d0504e8efc8fb","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        self.plugin.get_ports \u003d mock.Mock(return_value\u003d[])"},{"line_number":691,"context_line":"        return l3_agent"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"    def test_check_ports_exist_on_l3agent_subnet_match(self):"},{"line_number":694,"context_line":"        l3_agent \u003d self._prepare_check_ports_exist_tests()"},{"line_number":695,"context_line":"        # matching subnet"},{"line_number":696,"context_line":"        port \u003d {\u0027subnet_id\u0027: str(uuid.uuid4()),"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_d3d46a48","line":693,"updated":"2015-12-06 07:00:39.000000000","message":"the test is irrelevant after the fix","commit_id":"f6883518be1d7c1d723044d8524a885316699523"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"8c5309a5fe86bc7a8a35e6f5e9c6bfd3c3a6a2b2","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        self.plugin.get_ports \u003d mock.Mock(return_value\u003d[])"},{"line_number":691,"context_line":"        return l3_agent"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"    def test_check_ports_exist_on_l3agent_subnet_match(self):"},{"line_number":694,"context_line":"        l3_agent \u003d self._prepare_check_ports_exist_tests()"},{"line_number":695,"context_line":"        # matching subnet"},{"line_number":696,"context_line":"        port \u003d {\u0027subnet_id\u0027: str(uuid.uuid4()),"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_85168d53","line":693,"in_reply_to":"7a740942_d3d46a48","updated":"2015-12-07 02:05:10.000000000","message":"Done","commit_id":"f6883518be1d7c1d723044d8524a885316699523"}]}
