)]}'
{"neutron/db/l3_agentschedulers_db.py":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c7fdeabc3b12867f793a301a66423aeaebc67486","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: subnet_ids}}"},{"line_number":383,"context_line":"        ports \u003d core_plugin.get_ports(context, filters\u003dfilter)"},{"line_number":384,"context_line":"        for port in ports:"},{"line_number":385,"context_line":"            if ((port[\u0027device_owner\u0027] \u003d\u003d constants.DEVICE_OWNER_ROUTER_SNAT or"},{"line_number":386,"context_line":"                    n_utils.is_dvr_serviced(port[\u0027device_owner\u0027])) and"},{"line_number":387,"context_line":"                    l3_agent[\u0027host\u0027] \u003d\u003d port[\u0027binding:host_id\u0027]):"},{"line_number":388,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_0a4751bc","line":385,"updated":"2015-04-13 17:40:55.000000000","message":"I am not convinced with this fix. In this case you are saying that if the subnet has either the \"snat\" internal ports or the DVR serviceable ports then go ahead and create routers.\n\nIn a \"dvr_snat\" node we already create a router when gateway is enabled irrespective of whether it has a servicable dvr port or not.","commit_id":"0008db048a2e072c30bee1b726b84b8cfa5e4cfd"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"34e5b335dffb7601bc0d0f880f94c371deccd8f9","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: subnet_ids}}"},{"line_number":383,"context_line":"        ports \u003d core_plugin.get_ports(context, filters\u003dfilter)"},{"line_number":384,"context_line":"        for port in ports:"},{"line_number":385,"context_line":"            if ((port[\u0027device_owner\u0027] \u003d\u003d constants.DEVICE_OWNER_ROUTER_SNAT or"},{"line_number":386,"context_line":"                    n_utils.is_dvr_serviced(port[\u0027device_owner\u0027])) and"},{"line_number":387,"context_line":"                    l3_agent[\u0027host\u0027] \u003d\u003d port[\u0027binding:host_id\u0027]):"},{"line_number":388,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_45cc2a89","line":385,"in_reply_to":"7aaa499b_0a4751bc","updated":"2015-04-13 17:57:50.000000000","message":"What this will introduce is, will try to create a \"Router namespace\" on the compute node, even when there are no valid VMs in the network.\nThe \"condition\" for either \"csnat or dvr servicable ports\u0027 will introduce this issue.","commit_id":"0008db048a2e072c30bee1b726b84b8cfa5e4cfd"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"0ebdbb02411b19cd9478b3ac5d7552e161e04d0f","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        filter \u003d {\u0027fixed_ips\u0027: {\u0027subnet_id\u0027: subnet_ids}}"},{"line_number":383,"context_line":"        ports \u003d core_plugin.get_ports(context, filters\u003dfilter)"},{"line_number":384,"context_line":"        for port in ports:"},{"line_number":385,"context_line":"            if ((port[\u0027device_owner\u0027] \u003d\u003d constants.DEVICE_OWNER_ROUTER_SNAT or"},{"line_number":386,"context_line":"                    n_utils.is_dvr_serviced(port[\u0027device_owner\u0027])) and"},{"line_number":387,"context_line":"                    l3_agent[\u0027host\u0027] \u003d\u003d port[\u0027binding:host_id\u0027]):"},{"line_number":388,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_f7b64d3c","line":385,"in_reply_to":"7aaa499b_45cc2a89","updated":"2015-04-13 18:15:30.000000000","message":"I see your point, you\u0027re absolutely right. I\u0027ll see what I can do.","commit_id":"0008db048a2e072c30bee1b726b84b8cfa5e4cfd"}],"neutron/db/l3_dvr_db.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b371611ecc05b509751550d8a90ad4dd9e9b6dca","unresolved":false,"context_lines":[{"line_number":332,"context_line":"            if router.gw_port:"},{"line_number":333,"context_line":"                self.delete_csnat_router_interface_ports("},{"line_number":334,"context_line":"                    context.elevated(), router, subnet_id\u003dsubnet_id)"},{"line_number":335,"context_line":"            plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":336,"context_line":"                        constants.L3_ROUTER_NAT)"},{"line_number":337,"context_line":"            l3_agents \u003d plugin.get_l3_agents_hosting_routers(context,"},{"line_number":338,"context_line":"                                                             [router_id])"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ab451fb_091e550c","side":"PARENT","line":335,"updated":"2015-04-17 15:48:16.000000000","message":"I\u0027m not sure about this fix either.  This code is meant to explicitly unbind dvr routers from hypervisor hosts when a router port is removed.  How will that be done now?\n\nI think this problem is caused by a fundamental confusion in dvr router scheduling.  I think it is unfortanate that we create an explicit binding of dvr distributed routers to hypervisor l3 agents:  one that can is often confused with the explicit binding of the snat portion to a dvr_snat agent (which is more like legacy router scheduling).\n\nI think that the distributed portion of a router should be implicitly bound to a dvr l3 agent when dvr serviced ports on the same host coincide on a network that also has a router interface.\n\nThe bottom line is that there are two orthogonal scheduling problems in dvr.  One to schedule the snat or centralized part and the other to schedule the distributed part.  Yet, the code is using the same explicit binding mechanism for both.  This is why we have problems with scheduling.","commit_id":"071fb81d4709db434bb72f8542592ec5275446ed"}]}
