)]}'
{"neutron/common/utils.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"742e88c2927938350b9896d11ea2a195aa9218fe","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        return call"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"def get_other_dvr_serviced_device_owners():"},{"line_number":371,"context_line":"    \"\"\"Return device_owner names for ports that should be serviced by DVR"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    This doesn\u0027t return DEVICE_OWNER_COMPUTE_PREFIX since it is a"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_e9499fd1","line":370,"updated":"2015-12-31 10:43:15.000000000","message":"the name of the method here is confusing","commit_id":"226c999de3e342bf7ce667e21f4ab685b7fd5622"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9724309140ccd3423fcbdd74c174b0c70a626be4","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        return call"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"def get_other_dvr_serviced_device_owners():"},{"line_number":371,"context_line":"    \"\"\"Return device_owner names for ports that should be serviced by DVR"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    This doesn\u0027t return DEVICE_OWNER_COMPUTE_PREFIX since it is a"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_9e74d89c","line":370,"in_reply_to":"fa69d971_e9499fd1","updated":"2015-12-31 11:19:47.000000000","message":"If remove \u0027other\u0027 it will be confusing as it doesn\u0027t return all dvr serviceable device owners which I described in the docstring. Any suggestions are welcome","commit_id":"226c999de3e342bf7ce667e21f4ab685b7fd5622"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d0fe1dfa953428236017ae540551229ab8e287b8","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    prefix, not a complete device_owner name, so should be handled"},{"line_number":375,"context_line":"    separately (see is_dvr_serviced() below)"},{"line_number":376,"context_line":"    \"\"\""},{"line_number":377,"context_line":"    return [n_const.DEVICE_OWNER_LOADBALANCER,"},{"line_number":378,"context_line":"            n_const.DEVICE_OWNER_LOADBALANCERV2,"},{"line_number":379,"context_line":"            n_const.DEVICE_OWNER_DHCP]"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_86920d4a","line":377,"range":{"start_line":377,"start_character":11,"end_line":377,"end_character":12},"updated":"2016-01-08 21:18:41.000000000","message":"I had a slight preference to the tuple here.  ;)","commit_id":"226c999de3e342bf7ce667e21f4ab685b7fd5622"}],"neutron/db/l3_agentschedulers_db.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9d32b60ac72b8bf6fd500507921fad1409973211","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: subnet_ids},"},{"line_number":467,"context_line":"                  \u0027binding:host_id\u0027: [l3_agent[\u0027host\u0027]]}"},{"line_number":468,"context_line":"        ports \u003d core_plugin.get_ports(context, filters\u003dfilter)"},{"line_number":469,"context_line":"        for port in ports:"},{"line_number":470,"context_line":"            if n_utils.is_dvr_serviced(port[\u0027device_owner\u0027]):"},{"line_number":471,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_e3e3bf03","line":468,"updated":"2015-11-26 09:34:44.000000000","message":"get_ports() is an overkill, this can be optimized more, I can upload new patch set if that\u0027s ok with you.","commit_id":"ed7af85d0d3e1409bb80221c5c96874750d7c8f0"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"f8942ba4425cafd19e382a96a8ddfb9126802e41","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: subnet_ids},"},{"line_number":467,"context_line":"                  \u0027binding:host_id\u0027: [l3_agent[\u0027host\u0027]]}"},{"line_number":468,"context_line":"        ports \u003d core_plugin.get_ports(context, filters\u003dfilter)"},{"line_number":469,"context_line":"        for port in ports:"},{"line_number":470,"context_line":"            if n_utils.is_dvr_serviced(port[\u0027device_owner\u0027]):"},{"line_number":471,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_aa6c1537","line":468,"in_reply_to":"9a8ffd7b_4716c4a8","updated":"2015-11-30 17:52:01.000000000","message":"Oleg do you think the alternate approach is going to provide a higher performance impact for the scale.\nIf not can we have that as a separate patch.","commit_id":"ed7af85d0d3e1409bb80221c5c96874750d7c8f0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f81834b23d0148512ef8a81017a3443e73ef3cc3","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: subnet_ids},"},{"line_number":467,"context_line":"                  \u0027binding:host_id\u0027: [l3_agent[\u0027host\u0027]]}"},{"line_number":468,"context_line":"        ports \u003d core_plugin.get_ports(context, filters\u003dfilter)"},{"line_number":469,"context_line":"        for port in ports:"},{"line_number":470,"context_line":"            if n_utils.is_dvr_serviced(port[\u0027device_owner\u0027]):"},{"line_number":471,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_6cdce946","line":468,"in_reply_to":"9a8ffd7b_aa6c1537","updated":"2015-12-01 09:59:29.000000000","message":"I\u0027m thinking about a single db request which will say if there are any ports of certain criteria in db or not. No port fetching and iterating through results should be beneficial (including scale). Should be able to come up with a patch set later today.","commit_id":"ed7af85d0d3e1409bb80221c5c96874750d7c8f0"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"cb5ad7ac7e48fc0234dc96f94fcc35ad2604292e","unresolved":false,"context_lines":[{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: subnet_ids},"},{"line_number":467,"context_line":"                  \u0027binding:host_id\u0027: [l3_agent[\u0027host\u0027]]}"},{"line_number":468,"context_line":"        ports \u003d core_plugin.get_ports(context, filters\u003dfilter)"},{"line_number":469,"context_line":"        for port in ports:"},{"line_number":470,"context_line":"            if n_utils.is_dvr_serviced(port[\u0027device_owner\u0027]):"},{"line_number":471,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_4716c4a8","line":468,"in_reply_to":"9a8ffd7b_e3e3bf03","updated":"2015-11-30 17:31:11.000000000","message":"oleg, yes you have mentioned in the previous review about this.\nIf you have a patch handy can you push it.","commit_id":"ed7af85d0d3e1409bb80221c5c96874750d7c8f0"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"9fe938d8e70cbe96346db65b1bfdcf07d6a9e9ae","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            models_v2.Port.device_owner.in_("},{"line_number":461,"context_line":"                n_utils.get_other_dvr_serviced_device_owners()))"},{"line_number":462,"context_line":"        ports_query \u003d ports_query.filter(owner_filter)"},{"line_number":463,"context_line":"        return ports_query.first() is not None"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def get_l3_agent_candidates(self, context, sync_router, l3_agents,"},{"line_number":466,"context_line":"                                ignore_admin_state\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_dd8e5378","line":463,"updated":"2015-12-03 10:02:39.000000000","message":"Nice changing!","commit_id":"c2885b8e2f073f64bd7a979c904179d2b3df2d93"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"479a846f77e18215132243eb771c6886f76e79df","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            models_v2.Port.device_owner.in_("},{"line_number":461,"context_line":"                n_utils.get_other_dvr_serviced_device_owners()))"},{"line_number":462,"context_line":"        ports_query \u003d ports_query.filter(owner_filter)"},{"line_number":463,"context_line":"        return ports_query.first() is not None"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def get_l3_agent_candidates(self, context, sync_router, l3_agents,"},{"line_number":466,"context_line":"                                ignore_admin_state\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_7cc4b03f","line":463,"in_reply_to":"9a8ffd7b_dd8e5378","updated":"2015-12-03 23:10:34.000000000","message":"Looks good right now.","commit_id":"c2885b8e2f073f64bd7a979c904179d2b3df2d93"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d0fe1dfa953428236017ae540551229ab8e287b8","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                if agentschedulers_db.AgentSchedulerDbMixin.is_eligible_agent("},{"line_number":457,"context_line":"                    active, l3_agent)]"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def check_ports_exist_on_l3agent(self, context, l3_agent, subnet_ids):"},{"line_number":460,"context_line":"        \"\"\""},{"line_number":461,"context_line":"        This function checks for existence of dvr serviceable"},{"line_number":462,"context_line":"        ports on the host, running the input l3agent."}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_66b6f9dd","line":459,"range":{"start_line":459,"start_character":36,"end_line":459,"end_character":38},"updated":"2016-01-08 21:18:41.000000000","message":"gratuitous whitespace change.  :\u0027(","commit_id":"226c999de3e342bf7ce667e21f4ab685b7fd5622"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"742e88c2927938350b9896d11ea2a195aa9218fe","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        \"\"\""},{"line_number":464,"context_line":"        # db query will return ports for all subnets if subnet_ids is empty,"},{"line_number":465,"context_line":"        # so need to check first"},{"line_number":466,"context_line":"        if not subnet_ids:"},{"line_number":467,"context_line":"            return False"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_c917fba1","line":466,"updated":"2015-12-31 10:43:15.000000000","message":"where is this tested?","commit_id":"226c999de3e342bf7ce667e21f4ab685b7fd5622"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"9724309140ccd3423fcbdd74c174b0c70a626be4","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        \"\"\""},{"line_number":464,"context_line":"        # db query will return ports for all subnets if subnet_ids is empty,"},{"line_number":465,"context_line":"        # so need to check first"},{"line_number":466,"context_line":"        if not subnet_ids:"},{"line_number":467,"context_line":"            return False"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_febb940c","line":466,"in_reply_to":"fa69d971_c917fba1","updated":"2015-12-31 11:19:47.000000000","message":"It is not explicitly tested since all callers of the method first check subnet_ids for emptyness. I just thought it wouldn\u0027t be superfluous here.","commit_id":"226c999de3e342bf7ce667e21f4ab685b7fd5622"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d0fe1dfa953428236017ae540551229ab8e287b8","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        \"\"\""},{"line_number":464,"context_line":"        # db query will return ports for all subnets if subnet_ids is empty,"},{"line_number":465,"context_line":"        # so need to check first"},{"line_number":466,"context_line":"        if not subnet_ids:"},{"line_number":467,"context_line":"            return False"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_a6db911a","line":466,"in_reply_to":"fa69d971_febb940c","updated":"2016-01-08 21:18:41.000000000","message":"It is a bit off topic for the patch.","commit_id":"226c999de3e342bf7ce667e21f4ab685b7fd5622"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d0fe1dfa953428236017ae540551229ab8e287b8","unresolved":false,"context_lines":[{"line_number":467,"context_line":"            return False"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"        core_plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":470,"context_line":"        filters \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: subnet_ids},"},{"line_number":471,"context_line":"                   portbindings.HOST_ID: [l3_agent[\u0027host\u0027]]}"},{"line_number":472,"context_line":"        ports_query \u003d core_plugin._get_ports_query(context, filters\u003dfilters)"},{"line_number":473,"context_line":"        owner_filter \u003d or_("}],"source_content_type":"text/x-python","patch_set":12,"id":"fa69d971_e6f8a97e","line":470,"range":{"start_line":470,"start_character":14,"end_line":470,"end_character":15},"updated":"2016-01-08 21:18:41.000000000","message":"A bit off-topic too.","commit_id":"226c999de3e342bf7ce667e21f4ab685b7fd5622"}],"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":"9fe938d8e70cbe96346db65b1bfdcf07d6a9e9ae","unresolved":false,"context_lines":[{"line_number":715,"context_line":"                \u0027id\u0027: 1234}"},{"line_number":716,"context_line":"        subnet \u003d {\u0027id\u0027: str(uuid.uuid4()),"},{"line_number":717,"context_line":"                  \u0027enable_dhcp\u0027: False}"},{"line_number":718,"context_line":"        self.plugin.get_ports.return_value \u003d [port]"},{"line_number":719,"context_line":"        self.plugin.get_subnet \u003d mock.Mock(return_value\u003dsubnet)"},{"line_number":720,"context_line":"        val \u003d self.check_ports_exist_on_l3agent(self.adminContext,"},{"line_number":721,"context_line":"                                                l3_agent, [port[\u0027subnet_id\u0027]])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_1dcdbb65","side":"PARENT","line":718,"updated":"2015-12-03 10:02:39.000000000","message":"I prefer you can add two cases for query return ports and no port cases.","commit_id":"83bab606edd1e0b9f8f3a9fbf6b20cf121d9f95f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ec1b62f30cc32e59ae625934b549f5dca2631d0f","unresolved":false,"context_lines":[{"line_number":715,"context_line":"                \u0027id\u0027: 1234}"},{"line_number":716,"context_line":"        subnet \u003d {\u0027id\u0027: str(uuid.uuid4()),"},{"line_number":717,"context_line":"                  \u0027enable_dhcp\u0027: False}"},{"line_number":718,"context_line":"        self.plugin.get_ports.return_value \u003d [port]"},{"line_number":719,"context_line":"        self.plugin.get_subnet \u003d mock.Mock(return_value\u003dsubnet)"},{"line_number":720,"context_line":"        val \u003d self.check_ports_exist_on_l3agent(self.adminContext,"},{"line_number":721,"context_line":"                                                l3_agent, [port[\u0027subnet_id\u0027]])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_b107f8c8","side":"PARENT","line":718,"in_reply_to":"9a8ffd7b_1dcdbb65","updated":"2015-12-03 11:02:49.000000000","message":"What do you mean? Mock db query? It is tested in tests.unit.db.test_agentschedulers_db","commit_id":"83bab606edd1e0b9f8f3a9fbf6b20cf121d9f95f"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"28b1e1b7e955ba6d161a51a1d17e503ea79f4889","unresolved":false,"context_lines":[{"line_number":715,"context_line":"                \u0027id\u0027: 1234}"},{"line_number":716,"context_line":"        subnet \u003d {\u0027id\u0027: str(uuid.uuid4()),"},{"line_number":717,"context_line":"                  \u0027enable_dhcp\u0027: False}"},{"line_number":718,"context_line":"        self.plugin.get_ports.return_value \u003d [port]"},{"line_number":719,"context_line":"        self.plugin.get_subnet \u003d mock.Mock(return_value\u003dsubnet)"},{"line_number":720,"context_line":"        val \u003d self.check_ports_exist_on_l3agent(self.adminContext,"},{"line_number":721,"context_line":"                                                l3_agent, [port[\u0027subnet_id\u0027]])"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_49912946","side":"PARENT","line":718,"in_reply_to":"9a8ffd7b_b107f8c8","updated":"2015-12-14 15:36:46.000000000","message":"Checked again and I found, yes, Oleg, you\u0027re right. Sorry for my previous rash comment.\n\n@Swami\nConsider again, I think this patch set is more close to what we need indeed. Sorry for my previous rash comment confusing you, can you revert to this set ?","commit_id":"83bab606edd1e0b9f8f3a9fbf6b20cf121d9f95f"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"77bb8eb2adcdb0366af4710768b34fd54aba9588","unresolved":false,"context_lines":[{"line_number":679,"context_line":"        agent_list \u003d [self.l3_dvr_snat_agent]"},{"line_number":680,"context_line":"        self._check_get_l3_agent_candidates(router, agent_list, HOST_DVR_SNAT)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    def _prepare_check_ports_exist_tests(self):"},{"line_number":683,"context_line":"        l3_agent \u003d agents_db.Agent()"},{"line_number":684,"context_line":"        l3_agent.admin_state_up \u003d True"},{"line_number":685,"context_line":"        l3_agent.host \u003d \u0027host_1\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_05597a5a","side":"PARENT","line":682,"range":{"start_line":682,"start_character":8,"end_line":682,"end_character":40},"updated":"2015-12-17 11:11:28.000000000","message":"Move this deletion at [1], will make the code clearer. \n\n[1] https://review.openstack.org/#/c/250075","commit_id":"8a4c637337dfb0b3ab9f0f5344a1cf37c82da6d3"}]}
