)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mark McClain \u003cmark.mcclain@dreamhost.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-02-26 19:44:32 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"initial example of simplified LBaaS agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I10a67da11840477ccf063b98149f4f77248802a1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAM3%2F%2BkFs%3D","line":7,"updated":"2013-02-27 08:45:55.000000000","message":"let\u0027s redo the commit message here to indicate that we\u0027re getting close to merge.  we\u0027d want a message appropriate for someone looking back at this commit in a commit log.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"}],"bin/quantum-lbaas-agent":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":"sys.path.insert(0, os.getcwd())"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from quantum.plugins.services.loadbalancer.agent import main"},{"line_number":24,"context_line":"main()"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAM3%2F%2Bj04%3D","line":24,"updated":"2013-02-27 12:43:01.000000000","message":"2 new lines between 23 and 24","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":"sys.path.insert(0, os.getcwd())"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from quantum.plugins.services.loadbalancer.agent import main"},{"line_number":24,"context_line":"main()"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAM3%2F%2BjV4%3D","line":24,"in_reply_to":"AAAAM3%2F%2Bj04%3D","updated":"2013-02-27 18:48:39.000000000","message":"Done","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"}],"etc/lbaas_agent.ini":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"# Where to store load balancer state files.  This directory must be writable by"},{"line_number":6,"context_line":"# the user executing the agent."},{"line_number":7,"context_line":"# state_path \u003d /var/lib/quantum"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"# The LBaaS agent will resync its state with Quantum to recover from any"},{"line_number":10,"context_line":"# transient notification or rpc errors. The interval is number of"}],"source_content_type":"text/x-properties","patch_set":4,"id":"AAAAM3%2F%2Bk%2Bs%3D","line":7,"updated":"2013-02-26 22:40:48.000000000","message":"I\u0027m wondering if this should be removed as it was removed in all the other .ini files except the .conf ? https://review.openstack.org/#/c/22849/","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"# Where to store load balancer state files.  This directory must be writable by"},{"line_number":6,"context_line":"# the user executing the agent."},{"line_number":7,"context_line":"# state_path \u003d /var/lib/quantum"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"# The LBaaS agent will resync its state with Quantum to recover from any"},{"line_number":10,"context_line":"# transient notification or rpc errors. The interval is number of"}],"source_content_type":"text/x-properties","patch_set":4,"id":"AAAAM3%2F%2BkD0%3D","line":7,"in_reply_to":"AAAAM3%2F%2Bk%2Bs%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS\u003dy and"},{"line_number":27,"context_line":"# iproute2 package that supports namespaces)."},{"line_number":28,"context_line":"use_namespaces \u003d True"}],"source_content_type":"text/x-properties","patch_set":4,"id":"AAAAM3%2F%2Bk%2Bg%3D","line":28,"updated":"2013-02-26 22:40:48.000000000","message":"Shouldn\u0027t this be commented out as true is the default.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS\u003dy and"},{"line_number":27,"context_line":"# iproute2 package that supports namespaces)."},{"line_number":28,"context_line":"use_namespaces \u003d True"}],"source_content_type":"text/x-properties","patch_set":4,"id":"AAAAM3%2F%2BkDw%3D","line":28,"in_reply_to":"AAAAM3%2F%2Bk%2Bg%3D","updated":"2013-02-27 09:15:43.000000000","message":"yep. done.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":11,"context_line":"interface_driver \u003d quantum.agent.linux.interface.OVSInterfaceDriver"},{"line_number":12,"context_line":"# OVS based plugins(Ryu, NEC, NVP, BigSwitch/Floodlight) that use OVS"},{"line_number":13,"context_line":"# as OpenFlow switch and check port status"},{"line_number":14,"context_line":"#ovs_use_veth \u003d True"},{"line_number":15,"context_line":"# LinuxBridge"},{"line_number":16,"context_line":"#interface_driver \u003d quantum.agent.linux.interface.BridgeInterfaceDriver"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"AAAAM3%2F%2Bjyo%3D","line":14,"updated":"2013-02-27 12:43:01.000000000","message":"space","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":11,"context_line":"interface_driver \u003d quantum.agent.linux.interface.OVSInterfaceDriver"},{"line_number":12,"context_line":"# OVS based plugins(Ryu, NEC, NVP, BigSwitch/Floodlight) that use OVS"},{"line_number":13,"context_line":"# as OpenFlow switch and check port status"},{"line_number":14,"context_line":"#ovs_use_veth \u003d True"},{"line_number":15,"context_line":"# LinuxBridge"},{"line_number":16,"context_line":"#interface_driver \u003d quantum.agent.linux.interface.BridgeInterfaceDriver"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-properties","patch_set":6,"id":"AAAAM3%2F%2BjVw%3D","line":14,"in_reply_to":"AAAAM3%2F%2Bjyo%3D","updated":"2013-02-27 18:48:39.000000000","message":"Done","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":13,"context_line":"# as OpenFlow switch and check port status"},{"line_number":14,"context_line":"#ovs_use_veth \u003d True"},{"line_number":15,"context_line":"# LinuxBridge"},{"line_number":16,"context_line":"#interface_driver \u003d quantum.agent.linux.interface.BridgeInterfaceDriver"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# The agent requires a driver to manage the loadbalancer.  HAProxy is the"},{"line_number":19,"context_line":"# opensource version."}],"source_content_type":"text/x-properties","patch_set":6,"id":"AAAAM3%2F%2Bjyk%3D","line":16,"updated":"2013-02-27 12:43:01.000000000","message":"space","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":13,"context_line":"# as OpenFlow switch and check port status"},{"line_number":14,"context_line":"#ovs_use_veth \u003d True"},{"line_number":15,"context_line":"# LinuxBridge"},{"line_number":16,"context_line":"#interface_driver \u003d quantum.agent.linux.interface.BridgeInterfaceDriver"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# The agent requires a driver to manage the loadbalancer.  HAProxy is the"},{"line_number":19,"context_line":"# opensource version."}],"source_content_type":"text/x-properties","patch_set":6,"id":"AAAAM3%2F%2BjVs%3D","line":16,"in_reply_to":"AAAAM3%2F%2Bjyk%3D","updated":"2013-02-27 18:48:39.000000000","message":"Done","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# The agent requires a driver to manage the loadbalancer.  HAProxy is the"},{"line_number":19,"context_line":"# opensource version."},{"line_number":20,"context_line":"device_driver \u003d quantum.plugins.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS\u003dy and"},{"line_number":23,"context_line":"# iproute2 package that supports namespaces)."}],"source_content_type":"text/x-properties","patch_set":13,"id":"AAAANH%2F%2F%2FrU%3D","line":20,"updated":"2013-02-28 02:15:38.000000000","message":"agent_loadbalancer","commit_id":"fa643d6cb58c956781719cc7234085cf403e61fe"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# The agent requires a driver to manage the loadbalancer.  HAProxy is the"},{"line_number":19,"context_line":"# opensource version."},{"line_number":20,"context_line":"device_driver \u003d quantum.plugins.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS\u003dy and"},{"line_number":23,"context_line":"# iproute2 package that supports namespaces)."}],"source_content_type":"text/x-properties","patch_set":13,"id":"AAAANH%2F%2F%2Fow%3D","line":20,"in_reply_to":"AAAANH%2F%2F%2FrU%3D","updated":"2013-02-28 02:53:08.000000000","message":"Done","commit_id":"fa643d6cb58c956781719cc7234085cf403e61fe"}],"etc/loadbalancer_agent.ini":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":20,"context_line":"#interface_driver \u003d quantum.agent.linux.interface.BridgeInterfaceDriver"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# The agent can use other DHCP drivers.  Dnsmasq is the simplest and requires"},{"line_number":23,"context_line":"# no additional setup of the DHCP server."},{"line_number":24,"context_line":"device_driver \u003d quantum.plugins.services.loadbalancer.drivers.haproxy.ns_driver.HaproxyNSDriver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS\u003dy and"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAM3%2F%2BoqQ%3D","line":23,"updated":"2013-02-24 18:44:09.000000000","message":"comment is still DHCP specific","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":20,"context_line":"#interface_driver \u003d quantum.agent.linux.interface.BridgeInterfaceDriver"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# The agent can use other DHCP drivers.  Dnsmasq is the simplest and requires"},{"line_number":23,"context_line":"# no additional setup of the DHCP server."},{"line_number":24,"context_line":"device_driver \u003d quantum.plugins.services.loadbalancer.drivers.haproxy.ns_driver.HaproxyNSDriver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS\u003dy and"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAM3%2F%2BomI%3D","line":23,"in_reply_to":"AAAAM3%2F%2BoqQ%3D","updated":"2013-02-24 19:14:14.000000000","message":"Oops.  Fixed.","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Show debugging output in log (sets DEBUG log level output)"},{"line_number":3,"context_line":"# debug \u003d true"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"# Where to store load balancer state files.  This directory must be writable by"}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAM3%2F%2BoQM%3D","line":2,"updated":"2013-02-25 09:10:39.000000000","message":"i would make the name of this file consistent with quantum-lbaas-agent file name.","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Show debugging output in log (sets DEBUG log level output)"},{"line_number":3,"context_line":"# debug \u003d true"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"# Where to store load balancer state files.  This directory must be writable by"}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAM3%2F%2BnmI%3D","line":2,"in_reply_to":"AAAAM3%2F%2BoQM%3D","updated":"2013-02-25 17:48:23.000000000","message":"Good call.  Done","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1f47413a6ff9fa126b10a532065f462ad2004ee1","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# The agent requires a driver to manage the loadbalancer.  HAProxy is the"},{"line_number":23,"context_line":"# opensource version."},{"line_number":24,"context_line":"device_driver \u003d quantum.plugins.services.loadbalancer.drivers.haproxy.ns_driver.HaproxyNSDriver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS\u003dy and"},{"line_number":27,"context_line":"# iproute2 package that supports namespaces)."}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAM3%2F%2BoEI%3D","line":24,"updated":"2013-02-25 14:35:33.000000000","message":"ns_driver \u003d\u003e namespace_driver (to match current filename)","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# The agent requires a driver to manage the loadbalancer.  HAProxy is the"},{"line_number":23,"context_line":"# opensource version."},{"line_number":24,"context_line":"device_driver \u003d quantum.plugins.services.loadbalancer.drivers.haproxy.ns_driver.HaproxyNSDriver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Allow overlapping IP (Must have kernel build with CONFIG_NET_NS\u003dy and"},{"line_number":27,"context_line":"# iproute2 package that supports namespaces)."}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAM3%2F%2BnmE%3D","line":24,"in_reply_to":"AAAAM3%2F%2BoEI%3D","updated":"2013-02-25 17:48:23.000000000","message":"Sorry.  I forgot to resync my running config with the template.  Fixed","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"}],"quantum/agent/loadbalancer/agent.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            vif_driver \u003d importutils.import_object(conf.interface_driver, conf)"},{"line_number":87,"context_line":"        except ImportError:"},{"line_number":88,"context_line":"            msg \u003d _(\u0027Error importing interface driver: %s\u0027)"},{"line_number":89,"context_line":"            raise SystemExit(msg % conf.interface_driver)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            self.driver \u003d importutils.import_object("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Boo0%3D","line":89,"updated":"2013-02-24 18:44:09.000000000","message":"is the content of this file specific to namespace agents?  it kind of seems like it, if we do things like importing the vif-driver.  Mostly just wondering from a naming perspective.  A comment in main() below seems to imply that interface_driver may be optional, but from this it seems required.","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            vif_driver \u003d importutils.import_object(conf.interface_driver, conf)"},{"line_number":87,"context_line":"        except ImportError:"},{"line_number":88,"context_line":"            msg \u003d _(\u0027Error importing interface driver: %s\u0027)"},{"line_number":89,"context_line":"            raise SystemExit(msg % conf.interface_driver)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            self.driver \u003d importutils.import_object("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BomE%3D","line":89,"in_reply_to":"AAAAM3%2F%2Boo0%3D","updated":"2013-02-24 19:14:14.000000000","message":"Yeah that\u0027s a mismatch.  Should be optional.","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1f47413a6ff9fa126b10a532065f462ad2004ee1","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            )"},{"line_number":106,"context_line":"        except ImportError:"},{"line_number":107,"context_line":"            msg \u003d _(\u0027Error importing loadbalancer device driver: %s\u0027)"},{"line_number":108,"context_line":"            raise SystemExit(msg % interface_driver)"},{"line_number":109,"context_line":"        ctx \u003d context.get_admin_context_without_session()"},{"line_number":110,"context_line":"        self.plugin_rpc \u003d api.LbaasAgentApi("},{"line_number":111,"context_line":"            topics.LOADBALANCER_PLUGIN,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BoEY%3D","line":108,"updated":"2013-02-25 14:35:33.000000000","message":"conf.device_driver","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"            )"},{"line_number":106,"context_line":"        except ImportError:"},{"line_number":107,"context_line":"            msg \u003d _(\u0027Error importing loadbalancer device driver: %s\u0027)"},{"line_number":108,"context_line":"            raise SystemExit(msg % interface_driver)"},{"line_number":109,"context_line":"        ctx \u003d context.get_admin_context_without_session()"},{"line_number":110,"context_line":"        self.plugin_rpc \u003d api.LbaasAgentApi("},{"line_number":111,"context_line":"            topics.LOADBALANCER_PLUGIN,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bnl0%3D","line":108,"in_reply_to":"AAAAM3%2F%2BoEY%3D","updated":"2013-02-25 17:48:23.000000000","message":"Done","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"}],"quantum/agent/loadbalancer/api.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from quantum.openstack.common.rpc import proxy"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"class LbaasPluginApi(proxy.RpcProxy):"},{"line_number":5,"context_line":"    \"\"\"Agent side of the plugin API.\"\"\""},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Booo%3D","line":4,"updated":"2013-02-24 18:44:09.000000000","message":"the true \"plugin api\" is between the API layer and the rest of the code, so we should probably rename this to something else.  LbaaSAgentAPI?","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from quantum.openstack.common.rpc import proxy"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"class LbaasPluginApi(proxy.RpcProxy):"},{"line_number":5,"context_line":"    \"\"\"Agent side of the plugin API.\"\"\""},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bol0%3D","line":4,"in_reply_to":"AAAAM3%2F%2Booo%3D","updated":"2013-02-24 19:14:14.000000000","message":"Good point.  Fixed.","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"        self.context \u003d context"},{"line_number":12,"context_line":"        self.host \u003d host"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    def get_ready_devices(self):"},{"line_number":15,"context_line":"        return self.call("},{"line_number":16,"context_line":"            self.context,"},{"line_number":17,"context_line":"            self.make_msg(\u0027get_ready_devices\u0027, host\u003dself.host),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Book%3D","line":14,"updated":"2013-02-24 18:44:09.000000000","message":"at this point in the review, i don\u0027t understand what this means.  maybe add a comment?","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":11,"context_line":"        self.context \u003d context"},{"line_number":12,"context_line":"        self.host \u003d host"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    def get_ready_devices(self):"},{"line_number":15,"context_line":"        return self.call("},{"line_number":16,"context_line":"            self.context,"},{"line_number":17,"context_line":"            self.make_msg(\u0027get_ready_devices\u0027, host\u003dself.host),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Boh0%3D","line":14,"in_reply_to":"AAAAM3%2F%2Bol4%3D","updated":"2013-02-24 21:30:42.000000000","message":"mmm... ok, yeah, can\u0027t think of an obvious name ether. maybe just add a comment for now.","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":11,"context_line":"        self.context \u003d context"},{"line_number":12,"context_line":"        self.host \u003d host"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    def get_ready_devices(self):"},{"line_number":15,"context_line":"        return self.call("},{"line_number":16,"context_line":"            self.context,"},{"line_number":17,"context_line":"            self.make_msg(\u0027get_ready_devices\u0027, host\u003dself.host),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bol4%3D","line":14,"in_reply_to":"AAAAM3%2F%2Book%3D","updated":"2013-02-24 19:14:14.000000000","message":"I can add a comment, but this needs a better name.  Basically this method asks the Quantum server what logical devices are active or pending_(create|update).  I originally started with get_active_devices, but it actually return pending one. Suggestions?","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"}],"quantum/db/loadbalancer/loadbalancer_db.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                               cascade\u003d\"all, delete-orphan\")"},{"line_number":115,"context_line":"    monitors \u003d orm.relationship(\"PoolMonitorAssociation\", backref\u003d\"pools\","},{"line_number":116,"context_line":"                                cascade\u003d\"all, delete-orphan\")"},{"line_number":117,"context_line":"    port \u003d orm.relationship(Vip, backref\u003d\u0027pool\u0027)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BooE%3D","line":117,"updated":"2013-02-24 18:44:09.000000000","message":"i\u0027m confused by the \u0027port\u0027 name here... wouldn\u0027t this be a reference to the vip object?","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                               cascade\u003d\"all, delete-orphan\")"},{"line_number":115,"context_line":"    monitors \u003d orm.relationship(\"PoolMonitorAssociation\", backref\u003d\"pools\","},{"line_number":116,"context_line":"                                cascade\u003d\"all, delete-orphan\")"},{"line_number":117,"context_line":"    port \u003d orm.relationship(Vip, backref\u003d\u0027pool\u0027)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bolo%3D","line":117,"in_reply_to":"AAAAM3%2F%2BooE%3D","updated":"2013-02-24 19:14:14.000000000","message":"you should be I used the wrong name here :) \nfixed","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":414,"context_line":"            else:"},{"line_number":415,"context_line":"                self._delete_session_persistence(context, id)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"            old_pool_id \u003d vip_db[\u0027pool_id\u0027]"},{"line_number":418,"context_line":"            if v:"},{"line_number":419,"context_line":"                vip_db.update(v)"},{"line_number":420,"context_line":"                # If the pool_id is changed, we need to update"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk5k%3D","line":417,"updated":"2013-02-26 22:40:48.000000000","message":"This is not used anymore.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":414,"context_line":"            else:"},{"line_number":415,"context_line":"                self._delete_session_persistence(context, id)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"            old_pool_id \u003d vip_db[\u0027pool_id\u0027]"},{"line_number":418,"context_line":"            if v:"},{"line_number":419,"context_line":"                vip_db.update(v)"},{"line_number":420,"context_line":"                # If the pool_id is changed, we need to update"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkDs%3D","line":417,"in_reply_to":"AAAAM3%2F%2Bk5k%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":423,"context_line":"                    new_pool \u003d self._get_resource(context, Pool, v[\u0027pool_id\u0027])"},{"line_number":424,"context_line":"                    self.assert_modification_allowed(new_pool)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"                    # make the pool matches the tenant_id"},{"line_number":427,"context_line":"                    if new_pool[\u0027tenant_id\u0027] !\u003d vip_db[\u0027tenant_id\u0027]:"},{"line_number":428,"context_line":"                        raise q_exc.NotAuthorized()"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk%2BU%3D","line":426,"updated":"2013-02-26 22:40:48.000000000","message":"nit: check that the pool matches the tenant_id.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":423,"context_line":"                    new_pool \u003d self._get_resource(context, Pool, v[\u0027pool_id\u0027])"},{"line_number":424,"context_line":"                    self.assert_modification_allowed(new_pool)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"                    # make the pool matches the tenant_id"},{"line_number":427,"context_line":"                    if new_pool[\u0027tenant_id\u0027] !\u003d vip_db[\u0027tenant_id\u0027]:"},{"line_number":428,"context_line":"                        raise q_exc.NotAuthorized()"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkDo%3D","line":426,"in_reply_to":"AAAAM3%2F%2Bk%2BU%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":423,"context_line":"                    new_pool \u003d self._get_resource(context, Pool, v[\u0027pool_id\u0027])"},{"line_number":424,"context_line":"                    self.assert_modification_allowed(new_pool)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"                    # make the pool matches the tenant_id"},{"line_number":427,"context_line":"                    if new_pool[\u0027tenant_id\u0027] !\u003d vip_db[\u0027tenant_id\u0027]:"},{"line_number":428,"context_line":"                        raise q_exc.NotAuthorized()"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkLU%3D","line":426,"updated":"2013-02-27 07:29:06.000000000","message":"make sure","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":423,"context_line":"                    new_pool \u003d self._get_resource(context, Pool, v[\u0027pool_id\u0027])"},{"line_number":424,"context_line":"                    self.assert_modification_allowed(new_pool)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"                    # make the pool matches the tenant_id"},{"line_number":427,"context_line":"                    if new_pool[\u0027tenant_id\u0027] !\u003d vip_db[\u0027tenant_id\u0027]:"},{"line_number":428,"context_line":"                        raise q_exc.NotAuthorized()"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkBM%3D","line":426,"in_reply_to":"AAAAM3%2F%2BkLU%3D","updated":"2013-02-27 09:39:51.000000000","message":"Done","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":620,"context_line":"                raise loadbalancer.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    def get_pool_health_monitor(self, context, id, pool_id, fields\u003dNone):"},{"line_number":623,"context_line":"        # XXX look into why pool_id is ignored"},{"line_number":624,"context_line":"        healthmonitor \u003d self._get_resource(context, HealthMonitor, id)"},{"line_number":625,"context_line":"        return self._make_health_monitor_dict(healthmonitor, fields)"},{"line_number":626,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkK4%3D","line":623,"updated":"2013-02-27 07:29:06.000000000","message":"probably better to have a TODO and your user-id.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":620,"context_line":"                raise loadbalancer.HealthMonitorNotFound(monitor_id\u003did)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    def get_pool_health_monitor(self, context, id, pool_id, fields\u003dNone):"},{"line_number":623,"context_line":"        # XXX look into why pool_id is ignored"},{"line_number":624,"context_line":"        healthmonitor \u003d self._get_resource(context, HealthMonitor, id)"},{"line_number":625,"context_line":"        return self._make_health_monitor_dict(healthmonitor, fields)"},{"line_number":626,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkBI%3D","line":623,"in_reply_to":"AAAAM3%2F%2BkK4%3D","updated":"2013-02-27 09:39:51.000000000","message":"Good call. Fixed.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":"    protocol_port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":70,"context_line":"    protocol \u003d sa.Column(sa.Enum(\"HTTP\", \"HTTPS\", \"TCP\", name\u003d\"lb_protocols\"),"},{"line_number":71,"context_line":"                         nullable\u003dFalse)"},{"line_number":72,"context_line":"    pool_id \u003d sa.Column(sa.String(36), nullable\u003dFalse, unique\u003dTrue)"},{"line_number":73,"context_line":"    session_persistence \u003d orm.relationship(SessionPersistence,"},{"line_number":74,"context_line":"                                           uselist\u003dFalse,"},{"line_number":75,"context_line":"                                           backref\u003d\"vips\","}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjMk%3D","line":72,"updated":"2013-02-27 18:55:47.000000000","message":"This change should be addressed in the commit message also. This patch looks including not only driver addition but some code improvement.","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":"    protocol_port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":70,"context_line":"    protocol \u003d sa.Column(sa.Enum(\"HTTP\", \"HTTPS\", \"TCP\", name\u003d\"lb_protocols\"),"},{"line_number":71,"context_line":"                         nullable\u003dFalse)"},{"line_number":72,"context_line":"    pool_id \u003d sa.Column(sa.String(36), nullable\u003dFalse, unique\u003dTrue)"},{"line_number":73,"context_line":"    session_persistence \u003d orm.relationship(SessionPersistence,"},{"line_number":74,"context_line":"                                           uselist\u003dFalse,"},{"line_number":75,"context_line":"                                           backref\u003d\"vips\","}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjHM%3D","line":72,"in_reply_to":"AAAAM3%2F%2BjMk%3D","updated":"2013-02-27 19:23:53.000000000","message":"Done","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":114,"context_line":"                               cascade\u003d\"all, delete-orphan\")"},{"line_number":115,"context_line":"    monitors \u003d orm.relationship(\"PoolMonitorAssociation\", backref\u003d\"pools\","},{"line_number":116,"context_line":"                                cascade\u003d\"all, delete-orphan\")"},{"line_number":117,"context_line":"    vip \u003d orm.relationship(Vip, backref\u003d\u0027pool\u0027)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class HealthMonitor(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjMg%3D","line":117,"updated":"2013-02-27 18:55:47.000000000","message":"ditto","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":358,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, v)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":361,"context_line":"            # validate that the pool has same tenant"},{"line_number":362,"context_line":"            if v[\u0027pool_id\u0027]:"},{"line_number":363,"context_line":"                pool \u003d self._get_resource(context, Pool, v[\u0027pool_id\u0027])"},{"line_number":364,"context_line":"                if pool[\u0027tenant_id\u0027] !\u003d tenant_id:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2Bjyc%3D","line":361,"updated":"2013-02-27 12:43:01.000000000","message":"maybe have this is a separate func it is repeated below too - 425-435","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":358,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, v)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":361,"context_line":"            # validate that the pool has same tenant"},{"line_number":362,"context_line":"            if v[\u0027pool_id\u0027]:"},{"line_number":363,"context_line":"                pool \u003d self._get_resource(context, Pool, v[\u0027pool_id\u0027])"},{"line_number":364,"context_line":"                if pool[\u0027tenant_id\u0027] !\u003d tenant_id:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjME%3D","line":361,"in_reply_to":"AAAAM3%2F%2Bjyc%3D","updated":"2013-02-27 18:48:39.000000000","message":"I\u0027ll file a bug for this to refactor assert_modification_allowed().","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"}],"quantum/db/migration/alembic_migrations/versions/54c2c487e913_lbaas.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":68,"context_line":"        sa.ForeignKeyConstraint([\u0027monitor_id\u0027], [u\u0027healthmonitors.id\u0027], ),"},{"line_number":69,"context_line":"        sa.ForeignKeyConstraint([\u0027pool_id\u0027], [u\u0027pools.id\u0027], ),"},{"line_number":70,"context_line":"        sa.PrimaryKeyConstraint(u\u0027pool_id\u0027, u\u0027monitor_id\u0027)"},{"line_number":71,"context_line":"    )"},{"line_number":72,"context_line":"    op.create_table("},{"line_number":73,"context_line":"        u\u0027sessionpersistences\u0027,"},{"line_number":74,"context_line":"        sa.Column(u\u0027vip_id\u0027, sa.String(36), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjMA%3D","line":71,"updated":"2013-02-27 18:55:47.000000000","message":"adding vip for pool is not needed here?","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":68,"context_line":"        sa.ForeignKeyConstraint([\u0027monitor_id\u0027], [u\u0027healthmonitors.id\u0027], ),"},{"line_number":69,"context_line":"        sa.ForeignKeyConstraint([\u0027pool_id\u0027], [u\u0027pools.id\u0027], ),"},{"line_number":70,"context_line":"        sa.PrimaryKeyConstraint(u\u0027pool_id\u0027, u\u0027monitor_id\u0027)"},{"line_number":71,"context_line":"    )"},{"line_number":72,"context_line":"    op.create_table("},{"line_number":73,"context_line":"        u\u0027sessionpersistences\u0027,"},{"line_number":74,"context_line":"        sa.Column(u\u0027vip_id\u0027, sa.String(36), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjG8%3D","line":71,"in_reply_to":"AAAAM3%2F%2BjMA%3D","updated":"2013-02-27 19:23:53.000000000","message":"Not sure that I understand your concern.","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"}],"quantum/plugins/services/agent_loadbalancer/plugin.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":125,"context_line":"        port_update \u003d {"},{"line_number":126,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":127,"context_line":"            \u0027device_owner\u0027: \u0027quantum:\u0027 + constants.LOADBALANCER,"},{"line_number":128,"context_line":"            \u0027device_id\u0027: str(uuid.uuid5(uuid.NAMESPACE_DNS, str(host)))"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        self.plugin._core_plugin.update_port("},{"line_number":131,"context_line":"            context,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAANH%2F%2F%2FrE%3D","line":128,"updated":"2013-02-28 02:18:34.000000000","message":"these still need tenant_id, as I mentioned in previous patch-set.","commit_id":"fa643d6cb58c956781719cc7234085cf403e61fe"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":125,"context_line":"        port_update \u003d {"},{"line_number":126,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":127,"context_line":"            \u0027device_owner\u0027: \u0027quantum:\u0027 + constants.LOADBALANCER,"},{"line_number":128,"context_line":"            \u0027device_id\u0027: str(uuid.uuid5(uuid.NAMESPACE_DNS, str(host)))"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        self.plugin._core_plugin.update_port("},{"line_number":131,"context_line":"            context,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAANH%2F%2F%2Fos%3D","line":128,"in_reply_to":"AAAANH%2F%2F%2FrE%3D","updated":"2013-02-28 02:53:08.000000000","message":"Done","commit_id":"fa643d6cb58c956781719cc7234085cf403e61fe"}],"quantum/plugins/services/loadbalancer/agent/__init__.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":7,"context_line":"#    a copy of the License at"},{"line_number":8,"context_line":"#"},{"line_number":9,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":10,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkKM%3D","line":7,"updated":"2013-02-27 07:29:06.000000000","message":"We need to reach a final decision in terms of directory hierarchy.... the concern I have is that the current hierarchy assumes that there are not multiple forms of plugin within services/loadbalancer.  If there\u0027s one thing I\u0027ve learned as PTL its that people will have all different ways in which they want to implement a plugin model.  For loadbalancing, there\u0027s atleast one other sane model, which is that you are a plugin that just proxies requests to another API that implements the load balancing.  In that model, there would not be an agent, or any need for the RPC, but it would use the DB models here.  So I would suggest dropping this existing code into a named plugin, for example, the rpc-agent directory, since this is an agent-based approach that relies on RPC (though I\u0027m terrible at naming, so i\u0027m open to pretty much any other suggestion).","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":7,"context_line":"#    a copy of the License at"},{"line_number":8,"context_line":"#"},{"line_number":9,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":10,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkBE%3D","line":7,"in_reply_to":"AAAAM3%2F%2BkKM%3D","updated":"2013-02-27 09:39:51.000000000","message":"Yeah.  I\u0027m terrible at naming too.  It would have to be rpc_agent.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"}],"quantum/plugins/services/loadbalancer/agent/manager.py":[{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":113,"context_line":"            )"},{"line_number":114,"context_line":"        except ImportError:"},{"line_number":115,"context_line":"            msg \u003d _(\u0027Error importing loadbalancer device driver: %s\u0027)"},{"line_number":116,"context_line":"            raise SystemExit(msg % device_driver)"},{"line_number":117,"context_line":"        ctx \u003d context.get_admin_context_without_session()"},{"line_number":118,"context_line":"        self.plugin_rpc \u003d api.LbaasAgentApi("},{"line_number":119,"context_line":"            topics.LOADBALANCER_PLUGIN,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BmIg%3D","line":116,"updated":"2013-02-26 11:27:53.000000000","message":"device_driver is not set","commit_id":"20d48adf01cce7dde13ff438623958bb8f0b5d35"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"e22458df4eeb3eb589bb419786b01f9673e28c2a","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        self.needs_resync \u003d False"},{"line_number":124,"context_line":"        self.cache \u003d DeviceCache()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def initialize_service_hook(self, started_by):"},{"line_number":127,"context_line":"        self.sync_state()"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @periodic_task.periodic_task"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Blnc%3D","line":126,"updated":"2013-02-26 17:39:36.000000000","message":"started_by is not in use","commit_id":"20d48adf01cce7dde13ff438623958bb8f0b5d35"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":141,"context_line":"                    self.plugin_rpc.update_pool_stats(pool_id, stats)"},{"line_number":142,"context_line":"        except Exception:"},{"line_number":143,"context_line":"            LOG.exception(_(\u0027Error upating stats\u0027))"},{"line_number":144,"context_line":"            seld.need_resync \u003d True"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _vip_plug_callback(self, action, port):"},{"line_number":147,"context_line":"        if action \u003d\u003d \u0027plug\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BmIc%3D","line":144,"updated":"2013-02-26 11:27:53.000000000","message":"misspelling seld -\u003e self","commit_id":"20d48adf01cce7dde13ff438623958bb8f0b5d35"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":161,"context_line":"                self.refresh_device(pool_id)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        except Exception, e:"},{"line_number":164,"context_line":"            raise"},{"line_number":165,"context_line":"            LOG.exception(_(\u0027Unable to retrieve ready devices\u0027))"},{"line_number":166,"context_line":"            self.needs_resync \u003d True"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BmIQ%3D","line":164,"updated":"2013-02-26 11:27:53.000000000","message":"next line is unreachable (debugging?)","commit_id":"20d48adf01cce7dde13ff438623958bb8f0b5d35"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Mark McClain, DreamHostimport collections"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import socket"},{"line_number":21,"context_line":"import weakref"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk5g%3D","line":19,"updated":"2013-02-26 22:40:48.000000000","message":"unused","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Mark McClain, DreamHostimport collections"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import socket"},{"line_number":21,"context_line":"import weakref"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkDg%3D","line":19,"in_reply_to":"AAAAM3%2F%2Bk5g%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"# @author: Mark McClain, DreamHostimport collections"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import socket"},{"line_number":21,"context_line":"import weakref"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk5c%3D","line":20,"updated":"2013-02-26 22:40:48.000000000","message":"ditto","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"# @author: Mark McClain, DreamHostimport collections"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import socket"},{"line_number":21,"context_line":"import weakref"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkDc%3D","line":20,"in_reply_to":"AAAAM3%2F%2Bk5c%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from quantum.agent.common import config"},{"line_number":26,"context_line":"from quantum.agent.linux import ip_lib"},{"line_number":27,"context_line":"from quantum.common import topics"},{"line_number":28,"context_line":"from quantum import context"},{"line_number":29,"context_line":"from quantum.openstack.common import importutils"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk5Y%3D","line":26,"updated":"2013-02-26 22:40:48.000000000","message":"ditto","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from quantum.agent.common import config"},{"line_number":26,"context_line":"from quantum.agent.linux import ip_lib"},{"line_number":27,"context_line":"from quantum.common import topics"},{"line_number":28,"context_line":"from quantum import context"},{"line_number":29,"context_line":"from quantum.openstack.common import importutils"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkDY%3D","line":26,"in_reply_to":"AAAAM3%2F%2Bk5Y%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":78,"context_line":"            self.device_ids.remove(device)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def remove_by_pool_id(self, pool_id):"},{"line_number":81,"context_line":"        d \u003d self.pool_lookup.get(port_id)"},{"line_number":82,"context_line":"        if d:"},{"line_number":83,"context_line":"            self.device_ids.remove(d)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk5U%3D","line":81,"updated":"2013-02-26 22:40:48.000000000","message":"pool_id","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":78,"context_line":"            self.device_ids.remove(device)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def remove_by_pool_id(self, pool_id):"},{"line_number":81,"context_line":"        d \u003d self.pool_lookup.get(port_id)"},{"line_number":82,"context_line":"        if d:"},{"line_number":83,"context_line":"            self.device_ids.remove(d)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkDU%3D","line":81,"in_reply_to":"AAAAM3%2F%2Bk5U%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":99,"context_line":"            vif_driver \u003d importutils.import_object(conf.interface_driver, conf)"},{"line_number":100,"context_line":"        except ImportError:"},{"line_number":101,"context_line":"            # the driver is optional"},{"line_number":102,"context_line":"            msg \u003d _(\u0027Error importing interface driver: %s\u0027)"},{"line_number":103,"context_line":"            LOG.warn(msg)"},{"line_number":104,"context_line":"            vif_driver \u003d None"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkFY%3D","line":102,"updated":"2013-02-27 09:40:20.000000000","message":"% interface_driver","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"                self._vip_plug_callback"},{"line_number":113,"context_line":"            )"},{"line_number":114,"context_line":"        except ImportError:"},{"line_number":115,"context_line":"            msg \u003d _(\u0027Error importing loadbalancer device driver: %s\u0027)"},{"line_number":116,"context_line":"            raise SystemExit(msg % device_driver)"},{"line_number":117,"context_line":"        ctx \u003d context.get_admin_context_without_session()"},{"line_number":118,"context_line":"        self.plugin_rpc \u003d api.LbaasAgentApi("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkFQ%3D","line":115,"updated":"2013-02-27 09:40:20.000000000","message":"Is it worth add logging before exit?","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"                self._vip_plug_callback"},{"line_number":113,"context_line":"            )"},{"line_number":114,"context_line":"        except ImportError:"},{"line_number":115,"context_line":"            msg \u003d _(\u0027Error importing loadbalancer device driver: %s\u0027)"},{"line_number":116,"context_line":"            raise SystemExit(msg % device_driver)"},{"line_number":117,"context_line":"        ctx \u003d context.get_admin_context_without_session()"},{"line_number":118,"context_line":"        self.plugin_rpc \u003d api.LbaasAgentApi("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BjXE%3D","line":115,"in_reply_to":"AAAAM3%2F%2BkFQ%3D","updated":"2013-02-27 17:31:02.000000000","message":"We haven\u0027t in the other other agents as this will get logged to the upstart log or console if invoked interactively","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":113,"context_line":"            )"},{"line_number":114,"context_line":"        except ImportError:"},{"line_number":115,"context_line":"            msg \u003d _(\u0027Error importing loadbalancer device driver: %s\u0027)"},{"line_number":116,"context_line":"            raise SystemExit(msg % device_driver)"},{"line_number":117,"context_line":"        ctx \u003d context.get_admin_context_without_session()"},{"line_number":118,"context_line":"        self.plugin_rpc \u003d api.LbaasAgentApi("},{"line_number":119,"context_line":"            topics.LOADBALANCER_PLUGIN,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk5Q%3D","line":116,"updated":"2013-02-26 22:40:48.000000000","message":"conf.device_driver","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":113,"context_line":"            )"},{"line_number":114,"context_line":"        except ImportError:"},{"line_number":115,"context_line":"            msg \u003d _(\u0027Error importing loadbalancer device driver: %s\u0027)"},{"line_number":116,"context_line":"            raise SystemExit(msg % device_driver)"},{"line_number":117,"context_line":"        ctx \u003d context.get_admin_context_without_session()"},{"line_number":118,"context_line":"        self.plugin_rpc \u003d api.LbaasAgentApi("},{"line_number":119,"context_line":"            topics.LOADBALANCER_PLUGIN,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkDQ%3D","line":116,"in_reply_to":"AAAAM3%2F%2Bk5Q%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":141,"context_line":"                    self.plugin_rpc.update_pool_stats(pool_id, stats)"},{"line_number":142,"context_line":"        except Exception:"},{"line_number":143,"context_line":"            LOG.exception(_(\u0027Error upating stats\u0027))"},{"line_number":144,"context_line":"            seld.need_resync \u003d True"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _vip_plug_callback(self, action, port):"},{"line_number":147,"context_line":"        if action \u003d\u003d \u0027plug\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk5I%3D","line":144,"updated":"2013-02-26 22:40:48.000000000","message":"s/seld/self","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":141,"context_line":"                    self.plugin_rpc.update_pool_stats(pool_id, stats)"},{"line_number":142,"context_line":"        except Exception:"},{"line_number":143,"context_line":"            LOG.exception(_(\u0027Error upating stats\u0027))"},{"line_number":144,"context_line":"            seld.need_resync \u003d True"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _vip_plug_callback(self, action, port):"},{"line_number":147,"context_line":"        if action \u003d\u003d \u0027plug\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkDM%3D","line":144,"in_reply_to":"AAAAM3%2F%2Bk5I%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":160,"context_line":"            for pool_id in ready_logical_devices:"},{"line_number":161,"context_line":"                self.refresh_device(pool_id)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        except Exception, e:"},{"line_number":164,"context_line":"            raise"},{"line_number":165,"context_line":"            LOG.exception(_(\u0027Unable to retrieve ready devices\u0027))"},{"line_number":166,"context_line":"            self.needs_resync \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk48%3D","line":163,"updated":"2013-02-26 22:40:48.000000000","message":"drop , e:","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":160,"context_line":"            for pool_id in ready_logical_devices:"},{"line_number":161,"context_line":"                self.refresh_device(pool_id)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        except Exception, e:"},{"line_number":164,"context_line":"            raise"},{"line_number":165,"context_line":"            LOG.exception(_(\u0027Unable to retrieve ready devices\u0027))"},{"line_number":166,"context_line":"            self.needs_resync \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkDI%3D","line":163,"in_reply_to":"AAAAM3%2F%2Bk48%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":161,"context_line":"                self.refresh_device(pool_id)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        except Exception, e:"},{"line_number":164,"context_line":"            raise"},{"line_number":165,"context_line":"            LOG.exception(_(\u0027Unable to retrieve ready devices\u0027))"},{"line_number":166,"context_line":"            self.needs_resync \u003d True"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk%2BI%3D","line":164,"updated":"2013-02-26 22:40:48.000000000","message":"raise before logging and setting needs_resync?","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":161,"context_line":"                self.refresh_device(pool_id)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        except Exception, e:"},{"line_number":164,"context_line":"            raise"},{"line_number":165,"context_line":"            LOG.exception(_(\u0027Unable to retrieve ready devices\u0027))"},{"line_number":166,"context_line":"            self.needs_resync \u003d True"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkDE%3D","line":164,"in_reply_to":"AAAAM3%2F%2Bk%2BI%3D","updated":"2013-02-27 09:15:43.000000000","message":"This was a testing build and I wanted recoverable exceptions to raise.  I\u0027ve removed this in the final version.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":198,"context_line":"        except NotImplementedError:"},{"line_number":199,"context_line":"            pass  # Not all drivers will support this"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def reload_pool(self, context, pool_id\u003dNone, host\u003dNone):"},{"line_number":202,"context_line":"        if pool_id:"},{"line_number":203,"context_line":"            self.refresh_device(pool_id)"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk%2BA%3D","line":201,"updated":"2013-02-26 22:40:48.000000000","message":"the host param seems like it\u0027s not used can we remove it?","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":198,"context_line":"        except NotImplementedError:"},{"line_number":199,"context_line":"            pass  # Not all drivers will support this"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def reload_pool(self, context, pool_id\u003dNone, host\u003dNone):"},{"line_number":202,"context_line":"        if pool_id:"},{"line_number":203,"context_line":"            self.refresh_device(pool_id)"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkDA%3D","line":201,"in_reply_to":"AAAAM3%2F%2Bk%2BA%3D","updated":"2013-02-27 09:15:43.000000000","message":"it\u0027s passed so I have to accept it","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":202,"context_line":"        if pool_id:"},{"line_number":203,"context_line":"            self.refresh_device(pool_id)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def modify_pool(self, context, pool_id\u003dNone, host\u003dNone):"},{"line_number":206,"context_line":"        if self.cache.get_by_pool_id(pool_id):"},{"line_number":207,"context_line":"            self.refresh_device(pool_id)"},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk98%3D","line":205,"updated":"2013-02-26 22:40:48.000000000","message":"ditto","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":206,"context_line":"        if self.cache.get_by_pool_id(pool_id):"},{"line_number":207,"context_line":"            self.refresh_device(pool_id)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def destroy_pool(self, context, pool_id\u003dNone, host\u003dNone):"},{"line_number":210,"context_line":"        if self.cache.get_by_pool_id(pool_id):"},{"line_number":211,"context_line":"            self.destroy_device(pool_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk94%3D","line":209,"updated":"2013-02-26 22:40:48.000000000","message":"ditto","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":51,"context_line":"]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class DeviceCache(object):"},{"line_number":55,"context_line":"    \"\"\"Manage a cache of known devices.\"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    class Device(object):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkGo%3D","line":54,"updated":"2013-02-27 08:45:55.000000000","message":"I think in the API this is called a \"LogicalDevice\", so it may make sense to call this LogicalDeviceCache.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":51,"context_line":"]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class DeviceCache(object):"},{"line_number":55,"context_line":"    \"\"\"Manage a cache of known devices.\"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    class Device(object):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkBA%3D","line":54,"in_reply_to":"AAAAM3%2F%2BkGo%3D","updated":"2013-02-27 09:39:51.000000000","message":"Good call. Done","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":129,"context_line":"    @periodic_task.periodic_task"},{"line_number":130,"context_line":"    def periodic_resync(self, context):"},{"line_number":131,"context_line":"        if self.needs_resync:"},{"line_number":132,"context_line":"            self.needs_resync \u003d True"},{"line_number":133,"context_line":"            self.sync_state()"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @periodic_task.periodic_task(ticks_between_runs\u003d6)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkGU%3D","line":132,"updated":"2013-02-27 08:45:55.000000000","message":"i\u0027m confused by this... doesn\u0027t this imply that needs_rsync is already true if we\u0027re in this block?","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":129,"context_line":"    @periodic_task.periodic_task"},{"line_number":130,"context_line":"    def periodic_resync(self, context):"},{"line_number":131,"context_line":"        if self.needs_resync:"},{"line_number":132,"context_line":"            self.needs_resync \u003d True"},{"line_number":133,"context_line":"            self.sync_state()"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @periodic_task.periodic_task(ticks_between_runs\u003d6)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkAw%3D","line":132,"in_reply_to":"AAAAM3%2F%2BkGU%3D","updated":"2013-02-27 09:39:51.000000000","message":"It should have been False here.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":132,"context_line":"            self.needs_resync \u003d True"},{"line_number":133,"context_line":"            self.sync_state()"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @periodic_task.periodic_task(ticks_between_runs\u003d6)"},{"line_number":136,"context_line":"    def collect_stats(self, context):"},{"line_number":137,"context_line":"        try:"},{"line_number":138,"context_line":"            for pool_id in self.cache.get_pool_ids():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkGQ%3D","line":135,"updated":"2013-02-27 08:45:55.000000000","message":"did we have some kind of periodic_interval config value somewhere that we could use here?","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":132,"context_line":"            self.needs_resync \u003d True"},{"line_number":133,"context_line":"            self.sync_state()"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @periodic_task.periodic_task(ticks_between_runs\u003d6)"},{"line_number":136,"context_line":"    def collect_stats(self, context):"},{"line_number":137,"context_line":"        try:"},{"line_number":138,"context_line":"            for pool_id in self.cache.get_pool_ids():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkAs%3D","line":135,"in_reply_to":"AAAAM3%2F%2BkGQ%3D","updated":"2013-02-27 09:39:51.000000000","message":"Yeah the value is configured on the service.  This is the pattern from oslo I\u0027m open to changing.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":163,"context_line":"        except Exception, e:"},{"line_number":164,"context_line":"            LOG.exception(_(\u0027Unable to retrieve ready devices\u0027))"},{"line_number":165,"context_line":"            self.needs_resync \u003d True"},{"line_number":166,"context_line":"            raise SystemExit(\u0027SYNC\u0027)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        self.remove_orphans()"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkGM%3D","line":166,"updated":"2013-02-27 08:45:55.000000000","message":"not clear why we would exit here... or was this more for debugging?\n\nsame below.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":163,"context_line":"        except Exception, e:"},{"line_number":164,"context_line":"            LOG.exception(_(\u0027Unable to retrieve ready devices\u0027))"},{"line_number":165,"context_line":"            self.needs_resync \u003d True"},{"line_number":166,"context_line":"            raise SystemExit(\u0027SYNC\u0027)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        self.remove_orphans()"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkAc%3D","line":166,"in_reply_to":"AAAAM3%2F%2BkGM%3D","updated":"2013-02-27 09:39:51.000000000","message":"debugging code that has been removed.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":198,"context_line":"        try:"},{"line_number":199,"context_line":"            self.driver.reap_orphans()"},{"line_number":200,"context_line":"        except NotImplementedError:"},{"line_number":201,"context_line":"            pass  # Not all drivers will support this"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def reload_pool(self, context, pool_id\u003dNone, host\u003dNone):"},{"line_number":204,"context_line":"        if pool_id:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkGA%3D","line":201,"updated":"2013-02-27 08:45:55.000000000","message":"cleaner just to have all implement this, with many choosing to pass?","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":198,"context_line":"        try:"},{"line_number":199,"context_line":"            self.driver.reap_orphans()"},{"line_number":200,"context_line":"        except NotImplementedError:"},{"line_number":201,"context_line":"            pass  # Not all drivers will support this"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def reload_pool(self, context, pool_id\u003dNone, host\u003dNone):"},{"line_number":204,"context_line":"        if pool_id:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkAU%3D","line":201,"in_reply_to":"AAAAM3%2F%2BkGA%3D","updated":"2013-02-27 09:39:51.000000000","message":"I prefer the explict NotImplemented so that a test suite can be written to test the drivers correctly.  Could also change it to call hasattr() first and only invoke if it is there.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":107,"context_line":"            vif_driver \u003d importutils.import_object(conf.interface_driver, conf)"},{"line_number":108,"context_line":"        except ImportError:"},{"line_number":109,"context_line":"            # the driver is optional"},{"line_number":110,"context_line":"            msg \u003d _(\u0027Error importing interface driver: %s\u0027)"},{"line_number":111,"context_line":"            LOG.warn(msg)"},{"line_number":112,"context_line":"            vif_driver \u003d None"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjyU%3D","line":110,"updated":"2013-02-27 12:43:01.000000000","message":"%s for ?\n\nmissing conf.interface_driver\n\nit may be worth exiting here - this is what we have done with dhcp and l3 agents","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":107,"context_line":"            vif_driver \u003d importutils.import_object(conf.interface_driver, conf)"},{"line_number":108,"context_line":"        except ImportError:"},{"line_number":109,"context_line":"            # the driver is optional"},{"line_number":110,"context_line":"            msg \u003d _(\u0027Error importing interface driver: %s\u0027)"},{"line_number":111,"context_line":"            LOG.warn(msg)"},{"line_number":112,"context_line":"            vif_driver \u003d None"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjVM%3D","line":110,"in_reply_to":"AAAAM3%2F%2BjyU%3D","updated":"2013-02-27 18:48:39.000000000","message":"Good suggestion.  Fixed.","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"}],"quantum/plugins/services/loadbalancer/constants.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"LB_METHOD_ROUND_ROBIN \u003d \u0027ROUND_ROBIN\u0027"},{"line_number":19,"context_line":"LB_METHOD_LEAST_CONNECTION \u003d \u0027LEAST_CONNECTIONS\u0027"},{"line_number":20,"context_line":"LB_METHOD_SOURCE_IP \u003d \u0027SOURCE_IP\u0027"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"PROTOCOL_TCP \u003d \u0027TCP\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk9s%3D","line":19,"updated":"2013-02-26 22:40:48.000000000","message":"Should this be LB_METHOD_LEAST_CONNECTIONS or LEAST_CONNECTIONS ? Seems that the const should be the same plural form.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"LB_METHOD_ROUND_ROBIN \u003d \u0027ROUND_ROBIN\u0027"},{"line_number":19,"context_line":"LB_METHOD_LEAST_CONNECTION \u003d \u0027LEAST_CONNECTIONS\u0027"},{"line_number":20,"context_line":"LB_METHOD_SOURCE_IP \u003d \u0027SOURCE_IP\u0027"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"PROTOCOL_TCP \u003d \u0027TCP\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkC8%3D","line":19,"in_reply_to":"AAAAM3%2F%2Bk9s%3D","updated":"2013-02-27 09:15:43.000000000","message":"Go suggest. I\u0027ve made it plural","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"}],"quantum/plugins/services/loadbalancer/drivers/haproxy/cfg.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    ]"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    if protocol \u003d\u003d constants.PROTOCOL_HTTP:"},{"line_number":85,"context_line":"        opts.append(\u0027option forwardfor\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    return itertools.chain("},{"line_number":88,"context_line":"        [\u0027frontend %s\u0027 % config[\u0027pool\u0027][\u0027id\u0027]],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BooA%3D","line":85,"updated":"2013-02-24 18:44:09.000000000","message":"is this just saying it adds an x-forwarded-for header?","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":"    ]"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    if protocol \u003d\u003d constants.PROTOCOL_HTTP:"},{"line_number":85,"context_line":"        opts.append(\u0027option forwardfor\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    return itertools.chain("},{"line_number":88,"context_line":"        [\u0027frontend %s\u0027 % config[\u0027pool\u0027][\u0027id\u0027]],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bohw%3D","line":85,"in_reply_to":"AAAAM3%2F%2BolY%3D","updated":"2013-02-24 21:30:42.000000000","message":"i guess it makes sense.  was just originally confused by the option name.","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    ]"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    if protocol \u003d\u003d constants.PROTOCOL_HTTP:"},{"line_number":85,"context_line":"        opts.append(\u0027option forwardfor\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    return itertools.chain("},{"line_number":88,"context_line":"        [\u0027frontend %s\u0027 % config[\u0027pool\u0027][\u0027id\u0027]],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BolY%3D","line":85,"in_reply_to":"AAAAM3%2F%2BooA%3D","updated":"2013-02-24 19:14:14.000000000","message":"yeah... the spec didn\u0027t say whether to include this or not, but it seems it we don\u0027t we\u0027ll loose the remote address.  Should I drop it?","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        opts.append(\u0027option forwardfor\u0027)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    # add the first health_monitor (if available)"},{"line_number":106,"context_line":"    server_addon, health_opts \u003d _get_health_option(config)"},{"line_number":107,"context_line":"    opt.extend(health_opts)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    # add the members"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bon8%3D","line":106,"updated":"2013-02-24 18:44:09.000000000","message":"is this supposed to be _get_server_health_option?","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        opts.append(\u0027option forwardfor\u0027)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    # add the first health_monitor (if available)"},{"line_number":106,"context_line":"    server_addon, health_opts \u003d _get_health_option(config)"},{"line_number":107,"context_line":"    opt.extend(health_opts)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    # add the members"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BolQ%3D","line":106,"in_reply_to":"AAAAM3%2F%2Bon8%3D","updated":"2013-02-24 19:14:14.000000000","message":"Yep.  Fixed","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    )"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"def _get_ip_from_port(port):"},{"line_number":123,"context_line":"    for fixed_ip in port[\u0027fixed_ips\u0027]:"},{"line_number":124,"context_line":"        return fixed_ip[\u0027ip_address\u0027]"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bon4%3D","line":122,"updated":"2013-02-24 18:44:09.000000000","message":"should we warn if there\u0027s more than one IP?","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    )"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"def _get_ip_from_port(port):"},{"line_number":123,"context_line":"    for fixed_ip in port[\u0027fixed_ips\u0027]:"},{"line_number":124,"context_line":"        return fixed_ip[\u0027ip_address\u0027]"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BolU%3D","line":122,"in_reply_to":"AAAAM3%2F%2Bon4%3D","updated":"2013-02-24 19:14:14.000000000","message":"yeah.. thinking about this one I probably should create more than one front end that connects to the same backend","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2013 New Dream Network, LLC (DreamHost)"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk9g%3D","line":2,"updated":"2013-02-26 22:40:48.000000000","message":"nit: idk which way is right but most files have a new line here not a #","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2013 New Dream Network, LLC (DreamHost)"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkC0%3D","line":2,"in_reply_to":"AAAAM3%2F%2Bk9g%3D","updated":"2013-02-27 09:15:43.000000000","message":"Yeah not sure what is right... we have both in source tree","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Mark McClain, DreamHost"},{"line_number":18,"context_line":"import itertools"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from quantum.agent.linux import utils"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk9Y%3D","line":17,"updated":"2013-02-26 22:40:48.000000000","message":"new line here?","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Mark McClain, DreamHost"},{"line_number":18,"context_line":"import itertools"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from quantum.agent.linux import utils"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkC4%3D","line":17,"in_reply_to":"AAAAM3%2F%2Bk9Y%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"PROTOCOL_MAP \u003d {"},{"line_number":25,"context_line":"    constants.PROTOCOL_TCP: \u0027tcp\u0027,"},{"line_number":26,"context_line":"    constants.PROTOCOL_HTTP: \u0027http\u0027,"},{"line_number":27,"context_line":"    constants.PROTOCOL_HTTPS: \u0027tcp\u0027,"},{"line_number":28,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk8c%3D","line":25,"updated":"2013-02-26 22:40:48.000000000","message":"can we used the const on both sides and perhaps add .lower() where we need it?","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"PROTOCOL_MAP \u003d {"},{"line_number":25,"context_line":"    constants.PROTOCOL_TCP: \u0027tcp\u0027,"},{"line_number":26,"context_line":"    constants.PROTOCOL_HTTP: \u0027http\u0027,"},{"line_number":27,"context_line":"    constants.PROTOCOL_HTTPS: \u0027tcp\u0027,"},{"line_number":28,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkCw%3D","line":25,"in_reply_to":"AAAAM3%2F%2Bk8c%3D","updated":"2013-02-27 09:15:43.000000000","message":"long term yes.. I think the API should case insensitive for these values.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"    constants.PROTOCOL_HTTPS: \u0027tcp\u0027,"},{"line_number":28,"context_line":"}"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"BALANCE_MAP \u003d {"},{"line_number":31,"context_line":"    constants.LB_METHOD_ROUND_ROBIN: \u0027roundrobin\u0027,"},{"line_number":32,"context_line":"    constants.LB_METHOD_LEAST_CONNECTION: \u0027leastconn\u0027,"},{"line_number":33,"context_line":"    constants.LB_METHOD_SOURCE_IP: \u0027source\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk8U%3D","line":30,"updated":"2013-02-26 22:40:48.000000000","message":"ditto","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":"}"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"BALANCE_MAP \u003d {"},{"line_number":31,"context_line":"    constants.LB_METHOD_ROUND_ROBIN: \u0027roundrobin\u0027,"},{"line_number":32,"context_line":"    constants.LB_METHOD_LEAST_CONNECTION: \u0027leastconn\u0027,"},{"line_number":33,"context_line":"    constants.LB_METHOD_SOURCE_IP: \u0027source\u0027"},{"line_number":34,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk78%3D","line":31,"updated":"2013-02-26 22:40:48.000000000","message":"The const values in the files you used here are slightly different. I.e \n\nroundrobin is defined as round_robin","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":"}"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"BALANCE_MAP \u003d {"},{"line_number":31,"context_line":"    constants.LB_METHOD_ROUND_ROBIN: \u0027roundrobin\u0027,"},{"line_number":32,"context_line":"    constants.LB_METHOD_LEAST_CONNECTION: \u0027leastconn\u0027,"},{"line_number":33,"context_line":"    constants.LB_METHOD_SOURCE_IP: \u0027source\u0027"},{"line_number":34,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkCs%3D","line":31,"in_reply_to":"AAAAM3%2F%2Bk78%3D","updated":"2013-02-27 09:15:43.000000000","message":"Right that is a difference between the API spec and HAProxy\u0027s config options.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"BALANCE_MAP \u003d {"},{"line_number":31,"context_line":"    constants.LB_METHOD_ROUND_ROBIN: \u0027roundrobin\u0027,"},{"line_number":32,"context_line":"    constants.LB_METHOD_LEAST_CONNECTION: \u0027leastconn\u0027,"},{"line_number":33,"context_line":"    constants.LB_METHOD_SOURCE_IP: \u0027source\u0027"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk7w%3D","line":32,"updated":"2013-02-26 22:40:48.000000000","message":"leastconn the const is LEAST_CONNECTIONS","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"BALANCE_MAP \u003d {"},{"line_number":31,"context_line":"    constants.LB_METHOD_ROUND_ROBIN: \u0027roundrobin\u0027,"},{"line_number":32,"context_line":"    constants.LB_METHOD_LEAST_CONNECTION: \u0027leastconn\u0027,"},{"line_number":33,"context_line":"    constants.LB_METHOD_SOURCE_IP: \u0027source\u0027"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkCo%3D","line":32,"in_reply_to":"AAAAM3%2F%2Bk7w%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":33,"context_line":"    constants.LB_METHOD_SOURCE_IP: \u0027source\u0027"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"ACTIVE \u003d \u0027ACTIVE\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def save_config(conf_path, logical_config, socket_path\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk8Y%3D","line":36,"updated":"2013-02-26 22:40:48.000000000","message":"should we add this to the const file and remove it here?","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":33,"context_line":"    constants.LB_METHOD_SOURCE_IP: \u0027source\u0027"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"ACTIVE \u003d \u0027ACTIVE\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def save_config(conf_path, logical_config, socket_path\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkCU%3D","line":36,"in_reply_to":"AAAAM3%2F%2Bk8Y%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    if socket_path:"},{"line_number":57,"context_line":"        opts.append(\u0027stats socket %s mode 0666 level user\u0027 % socket_path)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    return itertools.chain([\u0027global\u0027], (\u0027\\t\u0027 + o for o in opts))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkE0%3D","line":58,"updated":"2013-02-27 09:40:20.000000000","message":"Consider adding \u0027pidfile\u0027 option with certain pid_path to the global section.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    if socket_path:"},{"line_number":57,"context_line":"        opts.append(\u0027stats socket %s mode 0666 level user\u0027 % socket_path)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    return itertools.chain([\u0027global\u0027], (\u0027\\t\u0027 + o for o in opts))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BjWo%3D","line":58,"in_reply_to":"AAAAM3%2F%2BkE0%3D","updated":"2013-02-27 17:31:02.000000000","message":"The pidfile path is passed as part of the command invocation.  It takes precedence over config file.  Not sure duplication is something we should do.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":71,"context_line":"    ]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    if config[\u0027vip\u0027][\u0027connection_limit\u0027] \u003e\u003d 0:"},{"line_number":74,"context_line":"        opts.append(\u0027maxconn %s\u0027 % config[\u0027vip\u0027][\u0027connection_limit\u0027])"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    return itertools.chain([\u0027defaults\u0027], (\u0027\\t\u0027 + o for o in opts))"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkD8%3D","line":74,"updated":"2013-02-27 09:40:20.000000000","message":"I think this is a frontend option so consider moving it to _build_frontend()","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":71,"context_line":"    ]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    if config[\u0027vip\u0027][\u0027connection_limit\u0027] \u003e\u003d 0:"},{"line_number":74,"context_line":"        opts.append(\u0027maxconn %s\u0027 % config[\u0027vip\u0027][\u0027connection_limit\u0027])"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    return itertools.chain([\u0027defaults\u0027], (\u0027\\t\u0027 + o for o in opts))"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BjWg%3D","line":74,"in_reply_to":"AAAAM3%2F%2BkD8%3D","updated":"2013-02-27 17:31:02.000000000","message":"Good suggestion.  Done.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":118,"context_line":"    opts.extend("},{"line_number":119,"context_line":"        ((\u0027server %(id)s %(address)s:%(protocol_port)s \u0027"},{"line_number":120,"context_line":"         \u0027weight %(weight)s\u0027) % member) + server_addon"},{"line_number":121,"context_line":"        for member in config[\u0027members\u0027] if member[\u0027status\u0027] \u003d\u003d ACTIVE"},{"line_number":122,"context_line":"    )"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    return itertools.chain("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkCA%3D","line":121,"updated":"2013-02-27 09:40:20.000000000","message":"think that member[\u0027admin_state_up\u0027] should be reflected in the server config string as well (may use \u0027disabled\u0027 or simply don\u0027t include servers which admin state is down)","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":118,"context_line":"    opts.extend("},{"line_number":119,"context_line":"        ((\u0027server %(id)s %(address)s:%(protocol_port)s \u0027"},{"line_number":120,"context_line":"         \u0027weight %(weight)s\u0027) % member) + server_addon"},{"line_number":121,"context_line":"        for member in config[\u0027members\u0027] if member[\u0027status\u0027] \u003d\u003d ACTIVE"},{"line_number":122,"context_line":"    )"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    return itertools.chain("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BjWU%3D","line":121,"in_reply_to":"AAAAM3%2F%2BkCA%3D","updated":"2013-02-27 17:31:02.000000000","message":"Good catch. I\u0027ve added that check.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":127,"context_line":"    )"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def _get_ip_from_port(port):"},{"line_number":131,"context_line":"    for fixed_ip in port[\u0027fixed_ips\u0027]:"},{"line_number":132,"context_line":"        return fixed_ip[\u0027ip_address\u0027]"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk7g%3D","line":130,"updated":"2013-02-26 22:40:48.000000000","message":"This function actually gets the first ip from port i\u0027m not sure if we want to change the name","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":127,"context_line":"    )"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def _get_ip_from_port(port):"},{"line_number":131,"context_line":"    for fixed_ip in port[\u0027fixed_ips\u0027]:"},{"line_number":132,"context_line":"        return fixed_ip[\u0027ip_address\u0027]"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkCQ%3D","line":130,"in_reply_to":"AAAAM3%2F%2Bk7g%3D","updated":"2013-02-27 09:15:43.000000000","message":"good suggestion fixed.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":135,"context_line":"def _get_server_health_option(config):"},{"line_number":136,"context_line":"    \"\"\"return the first active health option\"\"\""},{"line_number":137,"context_line":"    for monitor in config[\u0027healthmonitors\u0027]:"},{"line_number":138,"context_line":"        if monitor[\u0027status\u0027] \u003d\u003d ACTIVE:"},{"line_number":139,"context_line":"            break"},{"line_number":140,"context_line":"    else:"},{"line_number":141,"context_line":"        return \u0027\u0027, []"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkBQ%3D","line":138,"updated":"2013-02-27 09:40:20.000000000","message":"check for monitor[\u0027admin_state_up\u0027] here too","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":135,"context_line":"def _get_server_health_option(config):"},{"line_number":136,"context_line":"    \"\"\"return the first active health option\"\"\""},{"line_number":137,"context_line":"    for monitor in config[\u0027healthmonitors\u0027]:"},{"line_number":138,"context_line":"        if monitor[\u0027status\u0027] \u003d\u003d ACTIVE:"},{"line_number":139,"context_line":"            break"},{"line_number":140,"context_line":"    else:"},{"line_number":141,"context_line":"        return \u0027\u0027, []"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BjWQ%3D","line":138,"in_reply_to":"AAAAM3%2F%2BkBQ%3D","updated":"2013-02-27 17:31:02.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":141,"context_line":"        return \u0027\u0027, []"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    server_addon \u003d \u0027 check inter %(delay)ds fall %(max_retries)d\u0027 % monitor"},{"line_number":144,"context_line":"    opts \u003d []"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    if monitor[\u0027type\u0027] \u003d\u003d constants.HEALTH_MONITOR_HTTP:"},{"line_number":147,"context_line":"        opts.append(\u0027option httpchk %(method)s %(url_path)s\u0027 % monitor)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bj90%3D","line":144,"updated":"2013-02-27 09:40:20.000000000","message":"think that \u0027timeout connect\u0027 option should be appended to reflect monitor[\u0027timeout\u0027]","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":141,"context_line":"        return \u0027\u0027, []"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    server_addon \u003d \u0027 check inter %(delay)ds fall %(max_retries)d\u0027 % monitor"},{"line_number":144,"context_line":"    opts \u003d []"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    if monitor[\u0027type\u0027] \u003d\u003d constants.HEALTH_MONITOR_HTTP:"},{"line_number":147,"context_line":"        opts.append(\u0027option httpchk %(method)s %(url_path)s\u0027 % monitor)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BjWI%3D","line":144,"in_reply_to":"AAAAM3%2F%2Bj90%3D","updated":"2013-02-27 17:31:02.000000000","message":"Good suggestion.  Done.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":148,"context_line":"    opts \u003d []"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    if monitor[\u0027type\u0027] \u003d\u003d constants.HEALTH_MONITOR_HTTP:"},{"line_number":151,"context_line":"        opts.append(\u0027option httpchk %(http_method)s %(url_path)s\u0027 % monitor)"},{"line_number":152,"context_line":"    elif monitor[\u0027type\u0027] \u003d\u003d constants.HEALTH_MONITOR_HTTPS:"},{"line_number":153,"context_line":"        opts.append(\u0027option ssl-hello-chk\u0027)"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2Bj58%3D","line":151,"updated":"2013-02-27 10:14:26.000000000","message":"Need \u0027http-check expect\u0027 option here to reflect monitor[\u0027expected codes\u0027]","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":148,"context_line":"    opts \u003d []"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    if monitor[\u0027type\u0027] \u003d\u003d constants.HEALTH_MONITOR_HTTP:"},{"line_number":151,"context_line":"        opts.append(\u0027option httpchk %(http_method)s %(url_path)s\u0027 % monitor)"},{"line_number":152,"context_line":"    elif monitor[\u0027type\u0027] \u003d\u003d constants.HEALTH_MONITOR_HTTPS:"},{"line_number":153,"context_line":"        opts.append(\u0027option ssl-hello-chk\u0027)"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjM8%3D","line":151,"in_reply_to":"AAAAM3%2F%2Bj58%3D","updated":"2013-02-27 18:48:39.000000000","message":"Fixed.","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":150,"context_line":"    if monitor[\u0027type\u0027] \u003d\u003d constants.HEALTH_MONITOR_HTTP:"},{"line_number":151,"context_line":"        opts.append(\u0027option httpchk %(http_method)s %(url_path)s\u0027 % monitor)"},{"line_number":152,"context_line":"    elif monitor[\u0027type\u0027] \u003d\u003d constants.HEALTH_MONITOR_HTTPS:"},{"line_number":153,"context_line":"        opts.append(\u0027option ssl-hello-chk\u0027)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    return server_addon, opts"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2Bj6Q%3D","line":153,"updated":"2013-02-27 10:14:26.000000000","message":"In order to reflect \u0027http_method\u0027, \u0027url_path\u0027 and \u0027expected_codes\u0027 parameters of HTTPS monitor consider combination of \u0027option httpchk\u0027, \u0027http-check expect rstatus\u0027 and \u0027option ssl-hello-chk\u0027 options","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":150,"context_line":"    if monitor[\u0027type\u0027] \u003d\u003d constants.HEALTH_MONITOR_HTTP:"},{"line_number":151,"context_line":"        opts.append(\u0027option httpchk %(http_method)s %(url_path)s\u0027 % monitor)"},{"line_number":152,"context_line":"    elif monitor[\u0027type\u0027] \u003d\u003d constants.HEALTH_MONITOR_HTTPS:"},{"line_number":153,"context_line":"        opts.append(\u0027option ssl-hello-chk\u0027)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    return server_addon, opts"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjM4%3D","line":153,"in_reply_to":"AAAAM3%2F%2Bj6Q%3D","updated":"2013-02-27 18:48:39.000000000","message":"Done","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"}],"quantum/plugins/services/loadbalancer/drivers/haproxy/namespace_driver.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        pid_path \u003d self._get_state_file_path(pool_id, \u0027pid\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        extra_args \u003d [\u0027-sf\u0027]"},{"line_number":35,"context_line":"        extra_args.extend(p.strip() for p in open(pid_path, \u0027r\u0027))"},{"line_number":36,"context_line":"        self._execute(logical_config, extra_args)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _execute(self, logical_config, extra_cmd_args\u003d()):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bonw%3D","line":35,"updated":"2013-02-24 18:44:09.000000000","message":"i don\u0027t follow","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":32,"context_line":"        pid_path \u003d self._get_state_file_path(pool_id, \u0027pid\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        extra_args \u003d [\u0027-sf\u0027]"},{"line_number":35,"context_line":"        extra_args.extend(p.strip() for p in open(pid_path, \u0027r\u0027))"},{"line_number":36,"context_line":"        self._execute(logical_config, extra_args)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _execute(self, logical_config, extra_cmd_args\u003d()):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bohs%3D","line":35,"in_reply_to":"AAAAM3%2F%2BolM%3D","updated":"2013-02-24 21:30:42.000000000","message":"ah, ok.","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        pid_path \u003d self._get_state_file_path(pool_id, \u0027pid\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        extra_args \u003d [\u0027-sf\u0027]"},{"line_number":35,"context_line":"        extra_args.extend(p.strip() for p in open(pid_path, \u0027r\u0027))"},{"line_number":36,"context_line":"        self._execute(logical_config, extra_args)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _execute(self, logical_config, extra_cmd_args\u003d()):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BolM%3D","line":35,"in_reply_to":"AAAAM3%2F%2Bonw%3D","updated":"2013-02-24 19:14:14.000000000","message":"HAProxy to restart without interrupting connections requires that the pids be sent as argument in the cmd line.  Goofy isn\u0027t it?","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        extra_args.extend(p.strip() for p in open(pid_path, \u0027r\u0027))"},{"line_number":36,"context_line":"        self._execute(logical_config, extra_args)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _execute(self, logical_config, extra_cmd_args\u003d()):"},{"line_number":39,"context_line":"        pool_id \u003d logical_config[\u0027pool\u0027][\u0027id\u0027]"},{"line_number":40,"context_line":"        namespace \u003d get_ns_name(pool_id)"},{"line_number":41,"context_line":"        conf_path \u003d self._get_state_file_path(pool_id, \u0027conf\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bon0%3D","line":38,"updated":"2013-02-24 18:44:09.000000000","message":"i\u0027d probably go for a more descriptive name to distinguish it from other general linux execute functions.","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        extra_args.extend(p.strip() for p in open(pid_path, \u0027r\u0027))"},{"line_number":36,"context_line":"        self._execute(logical_config, extra_args)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _execute(self, logical_config, extra_cmd_args\u003d()):"},{"line_number":39,"context_line":"        pool_id \u003d logical_config[\u0027pool\u0027][\u0027id\u0027]"},{"line_number":40,"context_line":"        namespace \u003d get_ns_name(pool_id)"},{"line_number":41,"context_line":"        conf_path \u003d self._get_state_file_path(pool_id, \u0027conf\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BolI%3D","line":38,"in_reply_to":"AAAAM3%2F%2Bon0%3D","updated":"2013-02-24 19:14:14.000000000","message":"Done","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        sock_path \u003d self._get_state_file_name(config[\u0027pool\u0027][\u0027id\u0027], \u0027sock\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        hacfg.save_config(conf_path, logical_config, sock_path)"},{"line_number":46,"context_line":"        cmd \u003d [\u0027haproxy\u0027, \u0027-f\u0027, conf_path, \u0027-p\u0027, pid]"},{"line_number":47,"context_line":"        cmd.extend(extra_cmd_args)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        ns \u003d ip_lib.IPWrapper(self.root_helper, namespace)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Bono%3D","line":46,"updated":"2013-02-24 18:44:09.000000000","message":"pid_path?","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        sock_path \u003d self._get_state_file_name(config[\u0027pool\u0027][\u0027id\u0027], \u0027sock\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        hacfg.save_config(conf_path, logical_config, sock_path)"},{"line_number":46,"context_line":"        cmd \u003d [\u0027haproxy\u0027, \u0027-f\u0027, conf_path, \u0027-p\u0027, pid]"},{"line_number":47,"context_line":"        cmd.extend(extra_cmd_args)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        ns \u003d ip_lib.IPWrapper(self.root_helper, namespace)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BolE%3D","line":46,"in_reply_to":"AAAAM3%2F%2Bono%3D","updated":"2013-02-24 19:14:14.000000000","message":"Oops. Fixed.","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"d538627dced3cafeaf3fb4c7a7eeadec931a2aa6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                        LOG.exception("},{"line_number":68,"context_line":"                            _(\u0027Unable to kill haproxy process: %s\u0027),"},{"line_number":69,"context_line":"                            pid"},{"line_number":70,"context_line":"                        )"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        if pool_id in self.pool_to_port_id:"},{"line_number":73,"context_line":"            self._unplug(namespace, self.pool_to_port_id[pool_id])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BonY%3D","line":70,"updated":"2013-02-24 18:44:09.000000000","message":"at some point, we can probably pull this type of thing out into a util file.","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7098060120fc4f8ed8083daeaf0cfed10e2ef3e9","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                        LOG.exception("},{"line_number":68,"context_line":"                            _(\u0027Unable to kill haproxy process: %s\u0027),"},{"line_number":69,"context_line":"                            pid"},{"line_number":70,"context_line":"                        )"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        if pool_id in self.pool_to_port_id:"},{"line_number":73,"context_line":"            self._unplug(namespace, self.pool_to_port_id[pool_id])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BolA%3D","line":70,"in_reply_to":"AAAAM3%2F%2BonY%3D","updated":"2013-02-24 19:14:14.000000000","message":"Yeah.  I might move this into utils.py","commit_id":"18923dc232d6d43bebc62073ec86b10275807acd"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1f47413a6ff9fa126b10a532065f462ad2004ee1","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def destroy(self, pool_id):"},{"line_number":57,"context_line":"        namespace \u003d get_ns_name(pool_id)"},{"line_number":58,"context_line":"        ns \u003d ip_lib.IPWrapper(self.root_helper, namespace)"},{"line_number":59,"context_line":"        pid_path \u003d self._get_states_file_path(pool_id, \u0027pid\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if os.path.exists(pid_path):"},{"line_number":62,"context_line":"            with open(pid_path, \u0027r\u0027) as pids:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bn9c%3D","line":59,"updated":"2013-02-25 14:35:33.000000000","message":"_get_state_file_path","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def destroy(self, pool_id):"},{"line_number":57,"context_line":"        namespace \u003d get_ns_name(pool_id)"},{"line_number":58,"context_line":"        ns \u003d ip_lib.IPWrapper(self.root_helper, namespace)"},{"line_number":59,"context_line":"        pid_path \u003d self._get_states_file_path(pool_id, \u0027pid\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if os.path.exists(pid_path):"},{"line_number":62,"context_line":"            with open(pid_path, \u0027r\u0027) as pids:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bnlk%3D","line":59,"in_reply_to":"AAAAM3%2F%2Bn9c%3D","updated":"2013-02-25 17:48:23.000000000","message":"Done","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1f47413a6ff9fa126b10a532065f462ad2004ee1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                for pid in pids:"},{"line_number":64,"context_line":"                    pid \u003d pid.strip()"},{"line_number":65,"context_line":"                    try:"},{"line_number":66,"context_line":"                        ns.execute([\u0027kill\u0027, \u0027-9\u0027, pid.strip()])"},{"line_number":67,"context_line":"                    except RuntimeError:"},{"line_number":68,"context_line":"                        LOG.exception("},{"line_number":69,"context_line":"                            _(\u0027Unable to kill haproxy process: %s\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bn8U%3D","line":66,"updated":"2013-02-25 14:35:33.000000000","message":"ns.netns.execute","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":63,"context_line":"                for pid in pids:"},{"line_number":64,"context_line":"                    pid \u003d pid.strip()"},{"line_number":65,"context_line":"                    try:"},{"line_number":66,"context_line":"                        ns.execute([\u0027kill\u0027, \u0027-9\u0027, pid.strip()])"},{"line_number":67,"context_line":"                    except RuntimeError:"},{"line_number":68,"context_line":"                        LOG.exception("},{"line_number":69,"context_line":"                            _(\u0027Unable to kill haproxy process: %s\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bnlg%3D","line":66,"in_reply_to":"AAAAM3%2F%2Bn8U%3D","updated":"2013-02-25 17:48:23.000000000","message":"Done","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"e22458df4eeb3eb589bb419786b01f9673e28c2a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"NS_PREFIX \u003d \u0027qlbaas-\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class HaproxyNSDriver(object):"},{"line_number":34,"context_line":"    def __init__(self, root_helper, state_path, vif_driver, vip_plug_callback):"},{"line_number":35,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":36,"context_line":"        self.state_path \u003d state_path"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Blkc%3D","line":33,"updated":"2013-02-26 17:42:11.000000000","message":"Abstract base class should be defined for CRUD methods.","commit_id":"20d48adf01cce7dde13ff438623958bb8f0b5d35"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        if ip_lib.device_exists(interface_name, self.root_helper, namespace):"},{"line_number":128,"context_line":"            if not reuse_existing:"},{"line_number":129,"context_line":"                raise exceptions.PreexistingDeviceFailure("},{"line_number":130,"context_line":"                    dev_name\u003dinterface_name"},{"line_number":131,"context_line":"                )"},{"line_number":132,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BmIk%3D","line":129,"updated":"2013-02-26 11:27:53.000000000","message":"reference to \u0027exceptions\u0027 is not declared","commit_id":"20d48adf01cce7dde13ff438623958bb8f0b5d35"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import socket"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantum.agent.linux import interface"},{"line_number":23,"context_line":"from quantum.agent.linux import ip_lib"},{"line_number":24,"context_line":"from quantum.agent.linux import utils"},{"line_number":25,"context_line":"from quantum.openstack.common import importutils"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk7A%3D","line":22,"updated":"2013-02-26 22:40:48.000000000","message":"unused","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import socket"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantum.agent.linux import interface"},{"line_number":23,"context_line":"from quantum.agent.linux import ip_lib"},{"line_number":24,"context_line":"from quantum.agent.linux import utils"},{"line_number":25,"context_line":"from quantum.openstack.common import importutils"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkCM%3D","line":22,"in_reply_to":"AAAAM3%2F%2Bk7A%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantum.agent.linux import interface"},{"line_number":23,"context_line":"from quantum.agent.linux import ip_lib"},{"line_number":24,"context_line":"from quantum.agent.linux import utils"},{"line_number":25,"context_line":"from quantum.openstack.common import importutils"},{"line_number":26,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":27,"context_line":"from quantum.plugins.services.loadbalancer.drivers.haproxy import cfg as hacfg"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk68%3D","line":24,"updated":"2013-02-26 22:40:48.000000000","message":"ditto","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantum.agent.linux import interface"},{"line_number":23,"context_line":"from quantum.agent.linux import ip_lib"},{"line_number":24,"context_line":"from quantum.agent.linux import utils"},{"line_number":25,"context_line":"from quantum.openstack.common import importutils"},{"line_number":26,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":27,"context_line":"from quantum.plugins.services.loadbalancer.drivers.haproxy import cfg as hacfg"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkCI%3D","line":24,"in_reply_to":"AAAAM3%2F%2Bk68%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":"from quantum.agent.linux import interface"},{"line_number":23,"context_line":"from quantum.agent.linux import ip_lib"},{"line_number":24,"context_line":"from quantum.agent.linux import utils"},{"line_number":25,"context_line":"from quantum.openstack.common import importutils"},{"line_number":26,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":27,"context_line":"from quantum.plugins.services.loadbalancer.drivers.haproxy import cfg as hacfg"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk64%3D","line":25,"updated":"2013-02-26 22:40:48.000000000","message":"ditto","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":"from quantum.agent.linux import interface"},{"line_number":23,"context_line":"from quantum.agent.linux import ip_lib"},{"line_number":24,"context_line":"from quantum.agent.linux import utils"},{"line_number":25,"context_line":"from quantum.openstack.common import importutils"},{"line_number":26,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":27,"context_line":"from quantum.plugins.services.loadbalancer.drivers.haproxy import cfg as hacfg"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkCE%3D","line":25,"in_reply_to":"AAAAM3%2F%2Bk64%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"from quantum.plugins.services.loadbalancer.drivers.haproxy import cfg as hacfg"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":"NS_PREFIX \u003d \u0027qlbaas-\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class HaproxyNSDriver(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk7M%3D","line":30,"updated":"2013-02-26 22:40:48.000000000","message":"move to constants?","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"from quantum.plugins.services.loadbalancer.drivers.haproxy import cfg as hacfg"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":"NS_PREFIX \u003d \u0027qlbaas-\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class HaproxyNSDriver(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkB0%3D","line":30,"in_reply_to":"AAAAM3%2F%2Bk7M%3D","updated":"2013-02-27 09:15:43.000000000","message":"This value is located in the l3 and dhcp agents.  I\u0027ll make a note to file a bug for later clean-up.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        if ip_lib.device_exists(interface_name, self.root_helper, namespace):"},{"line_number":128,"context_line":"            if not reuse_existing:"},{"line_number":129,"context_line":"                raise exceptions.PreexistingDeviceFailure("},{"line_number":130,"context_line":"                    dev_name\u003dinterface_name"},{"line_number":131,"context_line":"                )"},{"line_number":132,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk6o%3D","line":129,"updated":"2013-02-26 22:40:48.000000000","message":"exceptions is undefined in this file.","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        if ip_lib.device_exists(interface_name, self.root_helper, namespace):"},{"line_number":128,"context_line":"            if not reuse_existing:"},{"line_number":129,"context_line":"                raise exceptions.PreexistingDeviceFailure("},{"line_number":130,"context_line":"                    dev_name\u003dinterface_name"},{"line_number":131,"context_line":"                )"},{"line_number":132,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkBw%3D","line":129,"in_reply_to":"AAAAM3%2F%2Bk6o%3D","updated":"2013-02-27 09:15:43.000000000","message":"good catch.. fixed","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"        return False"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def get_stats(self, pool_id):"},{"line_number":115,"context_line":"        pass"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def reap_orphans(self):"},{"line_number":118,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkE4%3D","line":115,"updated":"2013-02-27 08:45:55.000000000","message":"did mirantis code have support for stats?  if so, we should at least file a bug on this.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"        return False"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def get_stats(self, pool_id):"},{"line_number":115,"context_line":"        pass"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def reap_orphans(self):"},{"line_number":118,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkAI%3D","line":115,"in_reply_to":"AAAAM3%2F%2BkE4%3D","updated":"2013-02-27 09:39:51.000000000","message":"will do","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"        pass"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def reap_orphans(self):"},{"line_number":118,"context_line":"        raise NotImplementedError()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def _get_state_file_path(self, pool_id, kind, ensure_state_dir\u003dTrue):"},{"line_number":121,"context_line":"        \"\"\"Returns the file name for a given kind of config file.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkE8%3D","line":118,"updated":"2013-02-27 08:45:55.000000000","message":"why not just pass?","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"        pass"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def reap_orphans(self):"},{"line_number":118,"context_line":"        raise NotImplementedError()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def _get_state_file_path(self, pool_id, kind, ensure_state_dir\u003dTrue):"},{"line_number":121,"context_line":"        \"\"\"Returns the file name for a given kind of config file.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkAE%3D","line":118,"in_reply_to":"AAAAM3%2F%2BkE8%3D","updated":"2013-02-27 09:39:51.000000000","message":"Since this was the first driver I wanted to make the method interface clear.  I\u0027ll file a bug to clean this up.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Mark McClain, DreamHost"},{"line_number":18,"context_line":"import netaddr"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import shutil"},{"line_number":21,"context_line":"import socket"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjyM%3D","line":18,"updated":"2013-02-27 12:43:01.000000000","message":"new line","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Mark McClain, DreamHost"},{"line_number":18,"context_line":"import netaddr"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import shutil"},{"line_number":21,"context_line":"import socket"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjMw%3D","line":18,"in_reply_to":"AAAAM3%2F%2BjyM%3D","updated":"2013-02-27 18:48:39.000000000","message":"oops.. this is in wrong place.  fixed","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":163,"context_line":"    return NS_PREFIX + namespace_id"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"def kill_pids_in_file(pid_path):"},{"line_number":167,"context_line":"    if os.path.exists(pid_path):"},{"line_number":168,"context_line":"        with open(pid_path, \u0027r\u0027) as pids:"},{"line_number":169,"context_line":"            for pid in pids:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2Bj0g%3D","line":166,"updated":"2013-02-27 12:08:53.000000000","message":"why isn\u0027t it a private method of a driver. Is it used anywhere else?","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":163,"context_line":"    return NS_PREFIX + namespace_id"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"def kill_pids_in_file(pid_path):"},{"line_number":167,"context_line":"    if os.path.exists(pid_path):"},{"line_number":168,"context_line":"        with open(pid_path, \u0027r\u0027) as pids:"},{"line_number":169,"context_line":"            for pid in pids:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjMY%3D","line":166,"in_reply_to":"AAAAM3%2F%2Bj0g%3D","updated":"2013-02-27 18:48:39.000000000","message":"This is used in the driver.  I left it public because the method can stand on it\u0027s own.","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":169,"context_line":"            for pid in pids:"},{"line_number":170,"context_line":"                pid \u003d pid.strip()"},{"line_number":171,"context_line":"                try:"},{"line_number":172,"context_line":"                    ns.netns.execute([\u0027kill\u0027, \u0027-9\u0027, pid.strip()])"},{"line_number":173,"context_line":"                except RuntimeError:"},{"line_number":174,"context_line":"                    LOG.exception("},{"line_number":175,"context_line":"                        _(\u0027Unable to kill haproxy process: %s\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2Bj0o%3D","line":172,"updated":"2013-02-27 12:08:53.000000000","message":"seems that ns should be at least a function argument rather than a global variable","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":169,"context_line":"            for pid in pids:"},{"line_number":170,"context_line":"                pid \u003d pid.strip()"},{"line_number":171,"context_line":"                try:"},{"line_number":172,"context_line":"                    ns.netns.execute([\u0027kill\u0027, \u0027-9\u0027, pid.strip()])"},{"line_number":173,"context_line":"                except RuntimeError:"},{"line_number":174,"context_line":"                    LOG.exception("},{"line_number":175,"context_line":"                        _(\u0027Unable to kill haproxy process: %s\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjMI%3D","line":172,"in_reply_to":"AAAAM3%2F%2Bj0o%3D","updated":"2013-02-27 18:48:39.000000000","message":"It\u0027s not a global variable.  There is a parameter missing. Fixed.","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"}],"quantum/plugins/services/loadbalancer/plugin.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1f47413a6ff9fa126b10a532065f462ad2004ee1","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def destroy_pool(self, context, pool_id):"},{"line_number":179,"context_line":"        return self.cast("},{"line_number":180,"context_line":"            self.make_msg(\u0027destroy_pool\u0027, pool_id\u003dpool_id, host\u003dself.host),"},{"line_number":181,"context_line":"            topic\u003dself.topic"},{"line_number":182,"context_line":"        )"},{"line_number":183,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bn%2BA%3D","line":180,"updated":"2013-02-25 14:35:33.000000000","message":"context is missing","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def destroy_pool(self, context, pool_id):"},{"line_number":179,"context_line":"        return self.cast("},{"line_number":180,"context_line":"            self.make_msg(\u0027destroy_pool\u0027, pool_id\u003dpool_id, host\u003dself.host),"},{"line_number":181,"context_line":"            topic\u003dself.topic"},{"line_number":182,"context_line":"        )"},{"line_number":183,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnlI%3D","line":180,"in_reply_to":"AAAAM3%2F%2Bn%2BA%3D","updated":"2013-02-25 17:48:23.000000000","message":"Done","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1f47413a6ff9fa126b10a532065f462ad2004ee1","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def modify_pool(self, context, pool_id):"},{"line_number":185,"context_line":"        return self.cast("},{"line_number":186,"context_line":"            self.make_msg(\u0027modify_pool\u0027, pool_id\u003dpool_id, host\u003dself.host),"},{"line_number":187,"context_line":"            topic\u003dself.topic"},{"line_number":188,"context_line":"        )"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bn98%3D","line":186,"updated":"2013-02-25 14:35:33.000000000","message":"context is missing","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def modify_pool(self, context, pool_id):"},{"line_number":185,"context_line":"        return self.cast("},{"line_number":186,"context_line":"            self.make_msg(\u0027modify_pool\u0027, pool_id\u003dpool_id, host\u003dself.host),"},{"line_number":187,"context_line":"            topic\u003dself.topic"},{"line_number":188,"context_line":"        )"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BnlQ%3D","line":186,"in_reply_to":"AAAAM3%2F%2Bn98%3D","updated":"2013-02-25 17:48:23.000000000","message":"Done","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1f47413a6ff9fa126b10a532065f462ad2004ee1","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        )"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb):"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    \"\"\""},{"line_number":194,"context_line":"    Implementation of the Quantum Loadbalancer Service Plugin."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bn6o%3D","line":191,"updated":"2013-02-25 14:35:33.000000000","message":"It\u0027s better to use composition rather than inheritance (regardless the fact that other plugins derive from corresponding db_plugins).\nPlugin is not an extension of Db plugin, e.g. it\u0027s not a \"is a\" relation. \nMaking Db plugin a property of the plugin reduces the coupling of the code, it also will make the code clearer without a number of super() calls.","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":188,"context_line":"        )"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb):"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    \"\"\""},{"line_number":194,"context_line":"    Implementation of the Quantum Loadbalancer Service Plugin."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bnk0%3D","line":191,"in_reply_to":"AAAAM3%2F%2Bn6o%3D","updated":"2013-02-25 17:48:23.000000000","message":"Inheritance was not my first choice either, but I wanted to be consistent with the rest of the Quantum code base.  In Havana, I\u0027d like to revisit the construction of this plugin.","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1f47413a6ff9fa126b10a532065f462ad2004ee1","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def create_member(self, context, member):"},{"line_number":272,"context_line":"        m \u003d super(LoadBalancerPlugin, self).create_member(context, member)"},{"line_number":273,"context_line":"        self.agent_rpc.modify_pool(context, pool_id)"},{"line_number":274,"context_line":"        return m"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def update_member(self, context, id, member):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bn94%3D","line":273,"updated":"2013-02-25 14:35:33.000000000","message":"m[\u0027pool_id\u0027]","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def create_member(self, context, member):"},{"line_number":272,"context_line":"        m \u003d super(LoadBalancerPlugin, self).create_member(context, member)"},{"line_number":273,"context_line":"        self.agent_rpc.modify_pool(context, pool_id)"},{"line_number":274,"context_line":"        return m"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def update_member(self, context, id, member):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bnkk%3D","line":273,"in_reply_to":"AAAAM3%2F%2Bn94%3D","updated":"2013-02-25 17:48:23.000000000","message":"This is why I need to finalize the unit tests.","commit_id":"245496f4435edc2991ca515a204f8fca131ac2cf"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":256,"context_line":"        return p"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def update_pool(self, context, id, pool):"},{"line_number":259,"context_line":"        LOG.debug(_(\"Update pool: %s\"), p[\u0027id\u0027])"},{"line_number":260,"context_line":"        pool[\u0027pool\u0027][\u0027status\u0027] \u003d constants.PENDING_UPDATE"},{"line_number":261,"context_line":"        p \u003d super(LoadBalancerPlugin, self).update_pool(context, id, pool)"},{"line_number":262,"context_line":"        if p[\u0027status\u0027] in ACTIVE_PENDING:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BmI0%3D","line":259,"updated":"2013-02-26 11:27:53.000000000","message":"variable \u0027p\u0027 is not set, should be \u0027pool\u0027 instead","commit_id":"20d48adf01cce7dde13ff438623958bb8f0b5d35"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":"import uuid"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":"import sqlalchemy"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from quantum.common import rpc as q_rpc"},{"line_number":24,"context_line":"from quantum.common import topics"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk6k%3D","line":21,"updated":"2013-02-26 22:40:48.000000000","message":"unused","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":"import uuid"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":"import sqlalchemy"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from quantum.common import rpc as q_rpc"},{"line_number":24,"context_line":"from quantum.common import topics"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkBo%3D","line":21,"in_reply_to":"AAAAM3%2F%2Bk6k%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"from quantum.common import topics"},{"line_number":25,"context_line":"from quantum.db import api as qdbapi"},{"line_number":26,"context_line":"from quantum.db.loadbalancer import loadbalancer_db"},{"line_number":27,"context_line":"from quantum.extensions import loadbalancer"},{"line_number":28,"context_line":"from quantum import manager"},{"line_number":29,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":30,"context_line":"from quantum.openstack.common import rpc"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk6g%3D","line":27,"updated":"2013-02-26 22:40:48.000000000","message":"ditto","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"from quantum.common import topics"},{"line_number":25,"context_line":"from quantum.db import api as qdbapi"},{"line_number":26,"context_line":"from quantum.db.loadbalancer import loadbalancer_db"},{"line_number":27,"context_line":"from quantum.extensions import loadbalancer"},{"line_number":28,"context_line":"from quantum import manager"},{"line_number":29,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":30,"context_line":"from quantum.openstack.common import rpc"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkBk%3D","line":27,"in_reply_to":"AAAAM3%2F%2Bk6g%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"from quantum.db import api as qdbapi"},{"line_number":26,"context_line":"from quantum.db.loadbalancer import loadbalancer_db"},{"line_number":27,"context_line":"from quantum.extensions import loadbalancer"},{"line_number":28,"context_line":"from quantum import manager"},{"line_number":29,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":30,"context_line":"from quantum.openstack.common import rpc"},{"line_number":31,"context_line":"from quantum.openstack.common.rpc import proxy"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk6c%3D","line":28,"updated":"2013-02-26 22:40:48.000000000","message":"ditto","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"from quantum.db import api as qdbapi"},{"line_number":26,"context_line":"from quantum.db.loadbalancer import loadbalancer_db"},{"line_number":27,"context_line":"from quantum.extensions import loadbalancer"},{"line_number":28,"context_line":"from quantum import manager"},{"line_number":29,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":30,"context_line":"from quantum.openstack.common import rpc"},{"line_number":31,"context_line":"from quantum.openstack.common.rpc import proxy"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkBg%3D","line":28,"in_reply_to":"AAAAM3%2F%2Bk6c%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":67,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":68,"context_line":"            qry \u003d context.session.query(loadbalancer_db.Pool)"},{"line_number":69,"context_line":"            qry \u003d qry.filter_by(id\u003dpool_id)"},{"line_number":70,"context_line":"            pool \u003d qry.one()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            if activate:"},{"line_number":73,"context_line":"                # set all resources to active"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkJI%3D","line":70,"updated":"2013-02-27 07:29:06.000000000","message":"i\u0027m confused as to why pool_Id can ever validly be None as indicated above.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":67,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":68,"context_line":"            qry \u003d context.session.query(loadbalancer_db.Pool)"},{"line_number":69,"context_line":"            qry \u003d qry.filter_by(id\u003dpool_id)"},{"line_number":70,"context_line":"            pool \u003d qry.one()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            if activate:"},{"line_number":73,"context_line":"                # set all resources to active"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bj%2F8%3D","line":70,"in_reply_to":"AAAAM3%2F%2BkJI%3D","updated":"2013-02-27 09:39:51.000000000","message":"The args are passed by keyword via RPC, so I had to default to something.  The sql query will ensure that it is not None.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def pool_destroyed(self, context, pool_id\u003dNone, host\u003dNone):"},{"line_number":118,"context_line":"        \"\"\"Indicate that a pool has been destroyed.\"\"\""},{"line_number":119,"context_line":"        pass"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def plug_vip_port(self, context, port_id\u003dNone, host\u003dNone):"},{"line_number":122,"context_line":"        if not port_id:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkIE%3D","line":119,"updated":"2013-02-27 07:29:06.000000000","message":"is this TBD? or is not action needed?","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def pool_destroyed(self, context, pool_id\u003dNone, host\u003dNone):"},{"line_number":118,"context_line":"        \"\"\"Indicate that a pool has been destroyed.\"\"\""},{"line_number":119,"context_line":"        pass"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def plug_vip_port(self, context, port_id\u003dNone, host\u003dNone):"},{"line_number":122,"context_line":"        if not port_id:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bj%2Fs%3D","line":119,"in_reply_to":"AAAAM3%2F%2BkIE%3D","updated":"2013-02-27 09:39:51.000000000","message":"It\u0027s TBD for plugins that want to use an even more async model.  I\u0027ve added a comment.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":122,"context_line":"        if not port_id:"},{"line_number":123,"context_line":"            return"},{"line_number":124,"context_line":"        port_update \u003d {"},{"line_number":125,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":126,"context_line":"            \u0027device_owner\u0027: constants.LOADBALANCER,"},{"line_number":127,"context_line":"            \u0027device_id\u0027: str(uuid.uuid5(uuid.NAMESPACE_DNS, str(host)))"},{"line_number":128,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkMY%3D","line":125,"updated":"2013-02-27 06:40:27.000000000","message":"I don\u0027t think there\u0027s a need to toggle admin state here or below.  Admin state is a tenant-facing knob that they can use to disable an API entity that otherwise would be operational (without having to delete it and lose state).  What you\u0027re doing seems to map more that \"status\".","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":122,"context_line":"        if not port_id:"},{"line_number":123,"context_line":"            return"},{"line_number":124,"context_line":"        port_update \u003d {"},{"line_number":125,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":126,"context_line":"            \u0027device_owner\u0027: constants.LOADBALANCER,"},{"line_number":127,"context_line":"            \u0027device_id\u0027: str(uuid.uuid5(uuid.NAMESPACE_DNS, str(host)))"},{"line_number":128,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bj%2FE%3D","line":125,"in_reply_to":"AAAAM3%2F%2BkMY%3D","updated":"2013-02-27 09:39:51.000000000","message":"The VIP creation creates with admin_state_up:False port to hold the allocation.  That is why I\u0027m manipulating this here.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":123,"context_line":"            return"},{"line_number":124,"context_line":"        port_update \u003d {"},{"line_number":125,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":126,"context_line":"            \u0027device_owner\u0027: constants.LOADBALANCER,"},{"line_number":127,"context_line":"            \u0027device_id\u0027: str(uuid.uuid5(uuid.NAMESPACE_DNS, str(host)))"},{"line_number":128,"context_line":"        }"},{"line_number":129,"context_line":"        self.plugin._core_plugin.update_port("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkMU%3D","line":126,"updated":"2013-02-27 06:40:27.000000000","message":"mentioned this in another patch, but this should be of the form quantum:XXX","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":123,"context_line":"            return"},{"line_number":124,"context_line":"        port_update \u003d {"},{"line_number":125,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":126,"context_line":"            \u0027device_owner\u0027: constants.LOADBALANCER,"},{"line_number":127,"context_line":"            \u0027device_id\u0027: str(uuid.uuid5(uuid.NAMESPACE_DNS, str(host)))"},{"line_number":128,"context_line":"        }"},{"line_number":129,"context_line":"        self.plugin._core_plugin.update_port("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bj%2B8%3D","line":126,"in_reply_to":"AAAAM3%2F%2BkMU%3D","updated":"2013-02-27 09:39:51.000000000","message":"Done","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":124,"context_line":"        port_update \u003d {"},{"line_number":125,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":126,"context_line":"            \u0027device_owner\u0027: constants.LOADBALANCER,"},{"line_number":127,"context_line":"            \u0027device_id\u0027: str(uuid.uuid5(uuid.NAMESPACE_DNS, str(host)))"},{"line_number":128,"context_line":"        }"},{"line_number":129,"context_line":"        self.plugin._core_plugin.update_port("},{"line_number":130,"context_line":"            context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkMQ%3D","line":127,"updated":"2013-02-27 06:40:27.000000000","message":"i\u0027m not sure we\u0027re totally consistent here, but I thought we usually pick a logical device to include in this field (e.g., the UUID of the pool, as I mentioned in the other patch).","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":124,"context_line":"        port_update \u003d {"},{"line_number":125,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":126,"context_line":"            \u0027device_owner\u0027: constants.LOADBALANCER,"},{"line_number":127,"context_line":"            \u0027device_id\u0027: str(uuid.uuid5(uuid.NAMESPACE_DNS, str(host)))"},{"line_number":128,"context_line":"        }"},{"line_number":129,"context_line":"        self.plugin._core_plugin.update_port("},{"line_number":130,"context_line":"            context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bj%2Bw%3D","line":127,"in_reply_to":"AAAAM3%2F%2BkMQ%3D","updated":"2013-02-27 09:39:51.000000000","message":"Ok.  I\u0027ll file a bug to correct this.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":125,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":126,"context_line":"            \u0027device_owner\u0027: constants.LOADBALANCER,"},{"line_number":127,"context_line":"            \u0027device_id\u0027: str(uuid.uuid5(uuid.NAMESPACE_DNS, str(host)))"},{"line_number":128,"context_line":"        }"},{"line_number":129,"context_line":"        self.plugin._core_plugin.update_port("},{"line_number":130,"context_line":"            context,"},{"line_number":131,"context_line":"            port_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkMs%3D","line":128,"updated":"2013-02-27 06:40:27.000000000","message":"I think the existing assumption is that all plugin calls like this should include the tenant_id (since in a normal API call this would have been populated by the API if it was not included in the request.  This was causing an issue during my testing with the NVP plugin.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":125,"context_line":"            \u0027admin_state_up\u0027: True,"},{"line_number":126,"context_line":"            \u0027device_owner\u0027: constants.LOADBALANCER,"},{"line_number":127,"context_line":"            \u0027device_id\u0027: str(uuid.uuid5(uuid.NAMESPACE_DNS, str(host)))"},{"line_number":128,"context_line":"        }"},{"line_number":129,"context_line":"        self.plugin._core_plugin.update_port("},{"line_number":130,"context_line":"            context,"},{"line_number":131,"context_line":"            port_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bj%2Bo%3D","line":128,"in_reply_to":"AAAAM3%2F%2BkMs%3D","updated":"2013-02-27 09:39:51.000000000","message":"Ok.  The context, does not have the tenant_id.  I\u0027ll update to pull the object first.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":139,"context_line":"        port_update \u003d {"},{"line_number":140,"context_line":"            \u0027admin_state_up\u0027: False,"},{"line_number":141,"context_line":"            \u0027device_owner\u0027: \u0027\u0027,"},{"line_number":142,"context_line":"            \u0027device_id\u0027: \u0027\u0027,"},{"line_number":143,"context_line":"        }"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkIA%3D","line":142,"updated":"2013-02-27 07:29:06.000000000","message":"I\u0027d argue that device_owner should always be populated, as the device is owned by quantum:lbaas no matter what.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":139,"context_line":"        port_update \u003d {"},{"line_number":140,"context_line":"            \u0027admin_state_up\u0027: False,"},{"line_number":141,"context_line":"            \u0027device_owner\u0027: \u0027\u0027,"},{"line_number":142,"context_line":"            \u0027device_id\u0027: \u0027\u0027,"},{"line_number":143,"context_line":"        }"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAANH%2F%2F%2F%2B8%3D","line":142,"in_reply_to":"AAAAM3%2F%2Bj%2BY%3D","updated":"2013-02-27 22:45:36.000000000","message":"ah, I think i understand your point better now than I did when I commented on the last patch.  You\u0027re saying that in a service-VM case, this port would actually be passed to nova, in which case the owner would have to be blank, so nova can set it to \"nova\".  I hadn\u0027t considered that.  I\u0027m fine with the current approach then.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":139,"context_line":"        port_update \u003d {"},{"line_number":140,"context_line":"            \u0027admin_state_up\u0027: False,"},{"line_number":141,"context_line":"            \u0027device_owner\u0027: \u0027\u0027,"},{"line_number":142,"context_line":"            \u0027device_id\u0027: \u0027\u0027,"},{"line_number":143,"context_line":"        }"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bj%2BY%3D","line":142,"in_reply_to":"AAAAM3%2F%2BkIA%3D","updated":"2013-02-27 09:39:51.000000000","message":"I left the device owner blank because service VMs won\u0027t use a port if this is populated.  Should we fill it and then require solutions using service VMs blank this value?","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":151,"context_line":"        except q_exc.PortNotFound:"},{"line_number":152,"context_line":"            msg \u003d _(\u0027Unable to find port %s to unplug.  This can occur when \u0027"},{"line_number":153,"context_line":"                    \u0027the Vip has been deleted first.\u0027)"},{"line_number":154,"context_line":"            LOG.warn(msg, port_id)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def update_pool_stats(self, context, pool_id\u003dNone, stats\u003dNone, host\u003dNone):"},{"line_number":157,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkH8%3D","line":154,"updated":"2013-02-27 07:29:06.000000000","message":"if this is part of a valid workflow, i\u0027d probably argue that this shouldn\u0027t be a WARN.","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":151,"context_line":"        except q_exc.PortNotFound:"},{"line_number":152,"context_line":"            msg \u003d _(\u0027Unable to find port %s to unplug.  This can occur when \u0027"},{"line_number":153,"context_line":"                    \u0027the Vip has been deleted first.\u0027)"},{"line_number":154,"context_line":"            LOG.warn(msg, port_id)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def update_pool_stats(self, context, pool_id\u003dNone, stats\u003dNone, host\u003dNone):"},{"line_number":157,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bj9w%3D","line":154,"in_reply_to":"AAAAM3%2F%2BkH8%3D","updated":"2013-02-27 09:39:51.000000000","message":"Changed to .debug()","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":153,"context_line":"                    \u0027the Vip has been deleted first.\u0027)"},{"line_number":154,"context_line":"            LOG.warn(msg, port_id)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def update_pool_stats(self, context, pool_id\u003dNone, stats\u003dNone, host\u003dNone):"},{"line_number":157,"context_line":"        pass"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BkHw%3D","line":156,"updated":"2013-02-27 07:29:06.000000000","message":"TBD?","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":153,"context_line":"                    \u0027the Vip has been deleted first.\u0027)"},{"line_number":154,"context_line":"            LOG.warn(msg, port_id)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def update_pool_stats(self, context, pool_id\u003dNone, stats\u003dNone, host\u003dNone):"},{"line_number":157,"context_line":"        pass"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bj9o%3D","line":156,"in_reply_to":"AAAAM3%2F%2BkHw%3D","updated":"2013-02-27 09:39:51.000000000","message":"Done","commit_id":"cad3b37a9081479d5ce3e4fd34312d12761bc60c"}],"quantum/tests/unit/services/loadbalancer/test_plugin.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":"# @author: Mark McClain, DreamHost"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"import unittest2 as unittest"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from quantum import context"},{"line_number":24,"context_line":"from quantum import manager"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Bk6I%3D","line":21,"updated":"2013-02-26 22:40:48.000000000","message":"Monty changed all of the quantum files to use testtools instead of unittest(2).","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":"# @author: Mark McClain, DreamHost"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"import unittest2 as unittest"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from quantum import context"},{"line_number":24,"context_line":"from quantum import manager"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BkBY%3D","line":21,"in_reply_to":"AAAAM3%2F%2Bk6I%3D","updated":"2013-02-27 09:15:43.000000000","message":"Done","commit_id":"6d8fe3f6724a777a348a761b18da31f4a211431c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":247,"context_line":"                        constants.PENDING_UPDATE"},{"line_number":248,"context_line":"                    )"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def t2est_delete_vip(self):"},{"line_number":251,"context_line":"        with self.subnet() as subnet:"},{"line_number":252,"context_line":"            with self.pool(subnet\u003dsubnet) as pool:"},{"line_number":253,"context_line":"                with self.vip(pool\u003dpool, subnet\u003dsubnet, no_delete\u003dTrue) as vip:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2BjLk%3D","line":250,"updated":"2013-02-27 18:55:47.000000000","message":"nit:typo","commit_id":"3fd41680b7931a296dd1039eda5904d87bcb4ac6"}],"setup.py":[{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    ProjectScripts \u003d []"},{"line_number":70,"context_line":"else:"},{"line_number":71,"context_line":"    DataFiles \u003d ["},{"line_number":72,"context_line":"        (config_path,"},{"line_number":73,"context_line":"            [\u0027etc/quantum.conf\u0027,"},{"line_number":74,"context_line":"             \u0027etc/rootwrap.conf\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BmHM%3D","line":71,"updated":"2013-02-26 11:33:56.000000000","message":"should \u0027lbaas_agent.ini\u0027 be added here?","commit_id":"20d48adf01cce7dde13ff438623958bb8f0b5d35"}]}
