)]}'
{"etc/lbaas_agent.ini":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":"# The user group"},{"line_number":27,"context_line":"# user_group \u003d nogroup"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# Driver to use for scheduling pool to an lbaas agent"},{"line_number":30,"context_line":"# pool_scheduler_driver \u003d neutron.services.loadbalancer.agent_scheduler.ChanceScheduler"}],"source_content_type":"text/x-properties","patch_set":12,"id":"AAAAP3%2F%2FkOY%3D","line":29,"updated":"2013-07-16 14:12:15.000000000","message":"Why is this in the agent config?  Seems like something that should be in plugin.","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":"# The user group"},{"line_number":27,"context_line":"# user_group \u003d nogroup"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# Driver to use for scheduling pool to an lbaas agent"},{"line_number":30,"context_line":"# pool_scheduler_driver \u003d neutron.services.loadbalancer.agent_scheduler.ChanceScheduler"}],"source_content_type":"text/x-properties","patch_set":12,"id":"AAAAP3%2F%2FkDk%3D","line":29,"in_reply_to":"AAAAP3%2F%2FkOY%3D","updated":"2013-07-16 14:56:41.000000000","message":"Yeah, good catch!","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# The user group"},{"line_number":27,"context_line":"# user_group \u003d nogroup"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-properties","patch_set":14,"id":"AAAAP3%2F%2FgCk%3D","line":28,"updated":"2013-07-17 11:06:49.000000000","message":"Not related","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# The user group"},{"line_number":27,"context_line":"# user_group \u003d nogroup"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-properties","patch_set":14,"id":"AAAAP3%2F%2Ff4M%3D","line":28,"in_reply_to":"AAAAP3%2F%2FgCk%3D","updated":"2013-07-17 11:55:42.000000000","message":"Done","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"}],"etc/neutron.conf":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":221,"context_line":"# Driver to use for scheduling router to a default L3 agent"},{"line_number":222,"context_line":"# router_scheduler_driver \u003d quantum.scheduler.l3_agent_scheduler.ChanceScheduler"},{"line_number":223,"context_line":"# Driver to use for scheduling pool to an lbaas agent"},{"line_number":224,"context_line":"# pool_scheduler_driver \u003d neutron.services.loadbalancer.agent_scheduler.ChanceScheduler"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"# Allow auto scheduling networks to DHCP agent. It will schedule non-hosted"},{"line_number":227,"context_line":"# networks to first DHCP agent which sends get_active_networks message to"}],"source_content_type":"text/plain","patch_set":14,"id":"AAAAP3%2F%2FgCQ%3D","line":224,"updated":"2013-07-17 11:06:49.000000000","message":"It is the \"default\" section. \"pool\" looks a little too generic. How about adding \"loadbalancer_\" prefix: loadbalancer_pool_schedule_driver.","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":221,"context_line":"# Driver to use for scheduling router to a default L3 agent"},{"line_number":222,"context_line":"# router_scheduler_driver \u003d quantum.scheduler.l3_agent_scheduler.ChanceScheduler"},{"line_number":223,"context_line":"# Driver to use for scheduling pool to an lbaas agent"},{"line_number":224,"context_line":"# pool_scheduler_driver \u003d neutron.services.loadbalancer.agent_scheduler.ChanceScheduler"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"# Allow auto scheduling networks to DHCP agent. It will schedule non-hosted"},{"line_number":227,"context_line":"# networks to first DHCP agent which sends get_active_networks message to"}],"source_content_type":"text/plain","patch_set":14,"id":"AAAAP3%2F%2Ff38%3D","line":224,"in_reply_to":"AAAAP3%2F%2FgCQ%3D","updated":"2013-07-17 11:55:42.000000000","message":"Done","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"}],"etc/quantum.conf":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":221,"context_line":"# Driver to use for scheduling router to a default L3 agent"},{"line_number":222,"context_line":"# router_scheduler_driver \u003d quantum.scheduler.l3_agent_scheduler.ChanceScheduler"},{"line_number":223,"context_line":"# Driver to use for scheduling vip to a default lbaas agent"},{"line_number":224,"context_line":"# pool_scheduler_driver \u003d quantum.services.loadbalancer.agent_scheduler.ChanceScheduler"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"# Allow auto scheduling networks to DHCP agent. It will schedule non-hosted"},{"line_number":227,"context_line":"# networks to first DHCP agent which sends get_active_networks message to"}],"source_content_type":"text/plain","patch_set":4,"id":"AAAAPn%2F%2F0xQ%3D","line":224,"updated":"2013-06-20 11:18:05.000000000","message":"As was discussed, I believe this should be added to lbaas.ini since agent may be started on the host where there\u0027s no quantum server and hence no quantum.conf","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":221,"context_line":"# Driver to use for scheduling router to a default L3 agent"},{"line_number":222,"context_line":"# router_scheduler_driver \u003d quantum.scheduler.l3_agent_scheduler.ChanceScheduler"},{"line_number":223,"context_line":"# Driver to use for scheduling vip to a default lbaas agent"},{"line_number":224,"context_line":"# pool_scheduler_driver \u003d quantum.services.loadbalancer.agent_scheduler.ChanceScheduler"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"# Allow auto scheduling networks to DHCP agent. It will schedule non-hosted"},{"line_number":227,"context_line":"# networks to first DHCP agent which sends get_active_networks message to"}],"source_content_type":"text/plain","patch_set":4,"id":"AAAAPn%2F%2F0u8%3D","line":224,"in_reply_to":"AAAAPn%2F%2F0xQ%3D","updated":"2013-06-20 15:24:40.000000000","message":"Done","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"}],"neutron/db/agents_db.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":174,"context_line":"            return"},{"line_number":175,"context_line":"        agent_state \u003d kwargs[\u0027agent_state\u0027][\u0027agent_state\u0027]"},{"line_number":176,"context_line":"        if not self.plugin:"},{"line_number":177,"context_line":"            self.plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":178,"context_line":"        self.plugin.create_or_update_agent(context, agent_state)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2FgB0%3D","line":177,"updated":"2013-07-17 11:06:49.000000000","message":"Why not doing it in __init__?","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":174,"context_line":"            return"},{"line_number":175,"context_line":"        agent_state \u003d kwargs[\u0027agent_state\u0027][\u0027agent_state\u0027]"},{"line_number":176,"context_line":"        if not self.plugin:"},{"line_number":177,"context_line":"            self.plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":178,"context_line":"        self.plugin.create_or_update_agent(context, agent_state)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff3g%3D","line":177,"in_reply_to":"AAAAP3%2F%2FgB0%3D","updated":"2013-07-17 11:55:42.000000000","message":"Actually I\u0027ve done it in __init__() initially but for some reason neutron service stopped accepting requests - I spent pretty much time to figure out that just this change causes the problem. So I moved it out from init and everthing works fine. I guess this is because AgentExtRpcCallback initialization happens before neutron manager finishes its own initialization -\u003e so addressing manager in init leads to deadlock.","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"}],"neutron/db/migration/alembic_migrations/versions/52c5e4a18807_lbaas_pool_scheduler.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"revision \u003d \u002752c5e4a18807\u0027"},{"line_number":28,"context_line":"down_revision \u003d \u002713de305df56e\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# Change to [\u0027*\u0027] if this migration applies to all plugins"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from alembic import op"},{"line_number":33,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2FgAQ%3D","line":30,"updated":"2013-07-17 11:06:49.000000000","message":"This comment is unnecessary.","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"revision \u003d \u002752c5e4a18807\u0027"},{"line_number":28,"context_line":"down_revision \u003d \u002713de305df56e\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# Change to [\u0027*\u0027] if this migration applies to all plugins"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from alembic import op"},{"line_number":33,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff3U%3D","line":30,"in_reply_to":"AAAAP3%2F%2FgAQ%3D","updated":"2013-07-17 11:55:42.000000000","message":"Done","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# revision identifiers, used by Alembic."},{"line_number":27,"context_line":"revision \u003d \u002752c5e4a18807\u0027"},{"line_number":28,"context_line":"down_revision \u003d \u0027477a4488d3f4\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from alembic import op"},{"line_number":31,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2F6qA%3D","line":28,"updated":"2013-07-19 08:18:10.000000000","message":"Need to update down_revision.","commit_id":"b4f71d27609ece2c875761b4d34e550e01215a25"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# revision identifiers, used by Alembic."},{"line_number":27,"context_line":"revision \u003d \u002752c5e4a18807\u0027"},{"line_number":28,"context_line":"down_revision \u003d \u0027477a4488d3f4\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from alembic import op"},{"line_number":31,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2F6lw%3D","line":28,"in_reply_to":"AAAAQn%2F%2F6qA%3D","updated":"2013-07-19 08:51:27.000000000","message":"Done","commit_id":"b4f71d27609ece2c875761b4d34e550e01215a25"}],"neutron/plugins/linuxbridge/lb_neutron_plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":268,"context_line":"        # Consume from all consumers in a thread"},{"line_number":269,"context_line":"        self.conn.consume_in_thread()"},{"line_number":270,"context_line":"        self.notifier \u003d AgentNotifierApi(topics.AGENT)"},{"line_number":271,"context_line":"        self.agent_notifiers["},{"line_number":272,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":273,"context_line":"        self.agent_notifiers["},{"line_number":274,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkRA%3D","line":271,"updated":"2013-07-16 14:12:15.000000000","message":"this is formatted in an odd way.  You should use parens rather than adding a newline within square brackets.\n\nself.agent_notifiers[q_const.AGENT_TYPE_DHCP] \u003d (\n    dhcp_rpc_agent_api.DhcpAgentNotifyAPI()\n)","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":268,"context_line":"        # Consume from all consumers in a thread"},{"line_number":269,"context_line":"        self.conn.consume_in_thread()"},{"line_number":270,"context_line":"        self.notifier \u003d AgentNotifierApi(topics.AGENT)"},{"line_number":271,"context_line":"        self.agent_notifiers["},{"line_number":272,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":273,"context_line":"        self.agent_notifiers["},{"line_number":274,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkDQ%3D","line":271,"in_reply_to":"AAAAP3%2F%2FkRA%3D","updated":"2013-07-16 14:56:41.000000000","message":"Done","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":270,"context_line":"        self.notifier \u003d AgentNotifierApi(topics.AGENT)"},{"line_number":271,"context_line":"        self.agent_notifiers["},{"line_number":272,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":273,"context_line":"        self.agent_notifiers["},{"line_number":274,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def _parse_network_vlan_ranges(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkQs%3D","line":273,"updated":"2013-07-16 14:12:15.000000000","message":"Same as above","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":270,"context_line":"        self.notifier \u003d AgentNotifierApi(topics.AGENT)"},{"line_number":271,"context_line":"        self.agent_notifiers["},{"line_number":272,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":273,"context_line":"        self.agent_notifiers["},{"line_number":274,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def _parse_network_vlan_ranges(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkDM%3D","line":273,"in_reply_to":"AAAAP3%2F%2FkQs%3D","updated":"2013-07-16 14:56:41.000000000","message":"Done","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def _setup_rpc(self):"},{"line_number":109,"context_line":"        self.notifier \u003d rpc.AgentNotifierApi(topics.AGENT)"},{"line_number":110,"context_line":"        self.agent_notifiers["},{"line_number":111,"context_line":"            const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":112,"context_line":"        self.agent_notifiers["},{"line_number":113,"context_line":"            const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkQk%3D","line":110,"updated":"2013-07-16 14:12:15.000000000","message":"Same comment on formatting","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def _setup_rpc(self):"},{"line_number":109,"context_line":"        self.notifier \u003d rpc.AgentNotifierApi(topics.AGENT)"},{"line_number":110,"context_line":"        self.agent_notifiers["},{"line_number":111,"context_line":"            const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":112,"context_line":"        self.agent_notifiers["},{"line_number":113,"context_line":"            const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkBw%3D","line":110,"in_reply_to":"AAAAP3%2F%2FkQk%3D","updated":"2013-07-16 14:56:41.000000000","message":"Done","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.notifier \u003d rpc.AgentNotifierApi(topics.AGENT)"},{"line_number":110,"context_line":"        self.agent_notifiers["},{"line_number":111,"context_line":"            const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":112,"context_line":"        self.agent_notifiers["},{"line_number":113,"context_line":"            const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"},{"line_number":114,"context_line":"        self.callbacks \u003d rpc.RpcCallbacks(self.notifier)"},{"line_number":115,"context_line":"        self.topic \u003d topics.PLUGIN"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkQc%3D","line":112,"updated":"2013-07-16 14:12:15.000000000","message":"same","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.notifier \u003d rpc.AgentNotifierApi(topics.AGENT)"},{"line_number":110,"context_line":"        self.agent_notifiers["},{"line_number":111,"context_line":"            const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":112,"context_line":"        self.agent_notifiers["},{"line_number":113,"context_line":"            const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"},{"line_number":114,"context_line":"        self.callbacks \u003d rpc.RpcCallbacks(self.notifier)"},{"line_number":115,"context_line":"        self.topic \u003d topics.PLUGIN"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkBs%3D","line":112,"in_reply_to":"AAAAP3%2F%2FkQc%3D","updated":"2013-07-16 14:56:41.000000000","message":"Done","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"}],"neutron/plugins/nec/nec_plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.topic \u003d topics.PLUGIN"},{"line_number":122,"context_line":"        self.conn \u003d rpc.create_connection(new\u003dTrue)"},{"line_number":123,"context_line":"        self.notifier \u003d NECPluginV2AgentNotifierApi(topics.AGENT)"},{"line_number":124,"context_line":"        self.agent_notifiers["},{"line_number":125,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":126,"context_line":"        self.agent_notifiers["},{"line_number":127,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkQM%3D","line":124,"updated":"2013-07-16 14:12:15.000000000","message":"Same comment on formatting","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.topic \u003d topics.PLUGIN"},{"line_number":122,"context_line":"        self.conn \u003d rpc.create_connection(new\u003dTrue)"},{"line_number":123,"context_line":"        self.notifier \u003d NECPluginV2AgentNotifierApi(topics.AGENT)"},{"line_number":124,"context_line":"        self.agent_notifiers["},{"line_number":125,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":126,"context_line":"        self.agent_notifiers["},{"line_number":127,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkBo%3D","line":124,"in_reply_to":"AAAAP3%2F%2FkQM%3D","updated":"2013-07-16 14:56:41.000000000","message":"Done","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":124,"context_line":"        self.agent_notifiers["},{"line_number":125,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":126,"context_line":"        self.agent_notifiers["},{"line_number":127,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        # NOTE: callback_sg is referred to from the sg unit test."},{"line_number":130,"context_line":"        self.callback_sg \u003d SecurityGroupServerRpcCallback()"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkQE%3D","line":127,"updated":"2013-07-16 14:12:15.000000000","message":"same","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":124,"context_line":"        self.agent_notifiers["},{"line_number":125,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":126,"context_line":"        self.agent_notifiers["},{"line_number":127,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        # NOTE: callback_sg is referred to from the sg unit test."},{"line_number":130,"context_line":"        self.callback_sg \u003d SecurityGroupServerRpcCallback()"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkBk%3D","line":127,"in_reply_to":"AAAAP3%2F%2FkQE%3D","updated":"2013-07-16 14:56:41.000000000","message":"Done","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"}],"neutron/plugins/openvswitch/ovs_neutron_plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":309,"context_line":"        self.topic \u003d topics.PLUGIN"},{"line_number":310,"context_line":"        self.conn \u003d rpc.create_connection(new\u003dTrue)"},{"line_number":311,"context_line":"        self.notifier \u003d AgentNotifierApi(topics.AGENT)"},{"line_number":312,"context_line":"        self.agent_notifiers["},{"line_number":313,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":314,"context_line":"        self.agent_notifiers["},{"line_number":315,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkP8%3D","line":312,"updated":"2013-07-16 14:12:15.000000000","message":"same comment on formatting","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":309,"context_line":"        self.topic \u003d topics.PLUGIN"},{"line_number":310,"context_line":"        self.conn \u003d rpc.create_connection(new\u003dTrue)"},{"line_number":311,"context_line":"        self.notifier \u003d AgentNotifierApi(topics.AGENT)"},{"line_number":312,"context_line":"        self.agent_notifiers["},{"line_number":313,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":314,"context_line":"        self.agent_notifiers["},{"line_number":315,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkBg%3D","line":312,"in_reply_to":"AAAAP3%2F%2FkP8%3D","updated":"2013-07-16 14:56:41.000000000","message":"Done","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":312,"context_line":"        self.agent_notifiers["},{"line_number":313,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":314,"context_line":"        self.agent_notifiers["},{"line_number":315,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"},{"line_number":316,"context_line":"        self.callbacks \u003d OVSRpcCallbacks(self.notifier, self.tunnel_type)"},{"line_number":317,"context_line":"        self.dispatcher \u003d self.callbacks.create_rpc_dispatcher()"},{"line_number":318,"context_line":"        self.conn.create_consumer(self.topic, self.dispatcher,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkPw%3D","line":315,"updated":"2013-07-16 14:12:15.000000000","message":"same","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":312,"context_line":"        self.agent_notifiers["},{"line_number":313,"context_line":"            q_const.AGENT_TYPE_DHCP] \u003d dhcp_rpc_agent_api.DhcpAgentNotifyAPI()"},{"line_number":314,"context_line":"        self.agent_notifiers["},{"line_number":315,"context_line":"            q_const.AGENT_TYPE_L3] \u003d l3_rpc_agent_api.L3AgentNotify"},{"line_number":316,"context_line":"        self.callbacks \u003d OVSRpcCallbacks(self.notifier, self.tunnel_type)"},{"line_number":317,"context_line":"        self.dispatcher \u003d self.callbacks.create_rpc_dispatcher()"},{"line_number":318,"context_line":"        self.conn.create_consumer(self.topic, self.dispatcher,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FkBc%3D","line":315,"in_reply_to":"AAAAP3%2F%2FkPw%3D","updated":"2013-07-16 14:56:41.000000000","message":"Done","commit_id":"dfeb679d4206f4c8984b7b89ebb25c8599cd5fc5"}],"neutron/services/loadbalancer/agent_scheduler.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import random"},{"line_number":19,"context_line":"import sqlalchemy as sa"},{"line_number":20,"context_line":"from sqlalchemy import orm"},{"line_number":21,"context_line":"from sqlalchemy.orm import joinedload"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff%2Bw%3D","line":18,"updated":"2013-07-17 11:06:49.000000000","message":"Please add a blank line after L.18\nrandom is a standard module.","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import random"},{"line_number":19,"context_line":"import sqlalchemy as sa"},{"line_number":20,"context_line":"from sqlalchemy import orm"},{"line_number":21,"context_line":"from sqlalchemy.orm import joinedload"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff3M%3D","line":18,"in_reply_to":"AAAAP3%2F%2Ff%2Bw%3D","updated":"2013-07-17 11:55:42.000000000","message":"Done","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"        query \u003d context.session.query(agents_db.Agent)"},{"line_number":59,"context_line":"        query \u003d query.filter_by(agent_type\u003dconstants.AGENT_TYPE_LOADBALANCER)"},{"line_number":60,"context_line":"        if active is not None:"},{"line_number":61,"context_line":"            query \u003d (query.filter_by(admin_state_up\u003dactive))"},{"line_number":62,"context_line":"        if filters:"},{"line_number":63,"context_line":"            for key, value in filters.iteritems():"},{"line_number":64,"context_line":"                column \u003d getattr(agents_db.Agent, key, None)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff%2Bg%3D","line":61,"updated":"2013-07-17 11:06:49.000000000","message":"outside parens are unnecessary.","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"        query \u003d context.session.query(agents_db.Agent)"},{"line_number":59,"context_line":"        query \u003d query.filter_by(agent_type\u003dconstants.AGENT_TYPE_LOADBALANCER)"},{"line_number":60,"context_line":"        if active is not None:"},{"line_number":61,"context_line":"            query \u003d (query.filter_by(admin_state_up\u003dactive))"},{"line_number":62,"context_line":"        if filters:"},{"line_number":63,"context_line":"            for key, value in filters.iteritems():"},{"line_number":64,"context_line":"                column \u003d getattr(agents_db.Agent, key, None)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff3I%3D","line":61,"in_reply_to":"AAAAP3%2F%2Ff%2Bg%3D","updated":"2013-07-17 11:55:42.000000000","message":"Done","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"}],"neutron/services/loadbalancer/drivers/haproxy/agent_manager.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class LbaasAgentManager(periodic_task.PeriodicTasks):"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    # history"},{"line_number":118,"context_line":"    #   2.0 Support agent_updated call"},{"line_number":119,"context_line":"    RPC_API_VERSION \u003d \u00272.0\u0027"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff94%3D","line":117,"updated":"2013-07-17 11:06:49.000000000","message":"It is better to add a description of version \"1.0\".","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class LbaasAgentManager(periodic_task.PeriodicTasks):"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    # history"},{"line_number":118,"context_line":"    #   2.0 Support agent_updated call"},{"line_number":119,"context_line":"    RPC_API_VERSION \u003d \u00272.0\u0027"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff3E%3D","line":117,"in_reply_to":"AAAAP3%2F%2Ff94%3D","updated":"2013-07-17 11:55:42.000000000","message":"Done","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    # history"},{"line_number":118,"context_line":"    #   2.0 Support agent_updated call"},{"line_number":119,"context_line":"    RPC_API_VERSION \u003d \u00272.0\u0027"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def __init__(self, conf):"},{"line_number":122,"context_line":"        self.conf \u003d conf"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff9s%3D","line":119,"updated":"2013-07-17 11:06:49.000000000","message":"Is it completely incompatible change?\nI think this patch adds new RPC methods to support lbaas-agent scheduling and does not change the current RPC methods. If so, 1.1 is the better choice.\n\nRPC versionig policy in OpenStack is described in https://github.com/openstack/oslo-incubator/blob/master/openstack/common/rpc/dispatcher.py","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    # history"},{"line_number":118,"context_line":"    #   2.0 Support agent_updated call"},{"line_number":119,"context_line":"    RPC_API_VERSION \u003d \u00272.0\u0027"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def __init__(self, conf):"},{"line_number":122,"context_line":"        self.conf \u003d conf"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff28%3D","line":119,"in_reply_to":"AAAAP3%2F%2Ff9s%3D","updated":"2013-07-17 11:55:42.000000000","message":"This version needs to be aligned with LoadBalancerAgentApi() declared in haproxy.plugin_driver to avoid rpc errors.","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":117,"context_line":"    # history"},{"line_number":118,"context_line":"    #   1.0 Initial version"},{"line_number":119,"context_line":"    #   2.1 Support agent_updated call"},{"line_number":120,"context_line":"    RPC_API_VERSION \u003d \u00272.1\u0027"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def __init__(self, conf):"},{"line_number":123,"context_line":"        self.conf \u003d conf"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2Ffsk%3D","line":120,"updated":"2013-07-17 12:37:38.000000000","message":"I added a comment it is not a major change to plugin_driver.py. Please check it.","commit_id":"1e3ef65f264977611b7ecff0aba958fd56cc9c9a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":117,"context_line":"    # history"},{"line_number":118,"context_line":"    #   1.0 Initial version"},{"line_number":119,"context_line":"    #   2.1 Support agent_updated call"},{"line_number":120,"context_line":"    RPC_API_VERSION \u003d \u00272.1\u0027"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def __init__(self, conf):"},{"line_number":123,"context_line":"        self.conf \u003d conf"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2Ffr4%3D","line":120,"in_reply_to":"AAAAP3%2F%2Ffsk%3D","updated":"2013-07-17 12:40:47.000000000","message":"Done","commit_id":"1e3ef65f264977611b7ecff0aba958fd56cc9c9a"}],"neutron/services/loadbalancer/drivers/haproxy/plugin_driver.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"9bca7b00fb790fea7c4e80e9b593a312b7de7c70","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            agents \u003d self.plugin.get_lbaas_agents(context,"},{"line_number":81,"context_line":"                                                  filters\u003d{\u0027host\u0027: [host]})"},{"line_number":82,"context_line":"            if not agents:"},{"line_number":83,"context_line":"                return []"},{"line_number":84,"context_line":"            pools \u003d self.plugin.list_pools_on_lbaas_agent(context,"},{"line_number":85,"context_line":"                                                          agents[0].id)"},{"line_number":86,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Pool.id.in_(pools[\u0027pools\u0027]))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FwDY%3D","line":83,"updated":"2013-07-16 08:47:29.000000000","message":"if agents.len \u003e 1, warning?","commit_id":"ddde1e54e81f3157a0b987e7cc39eed929765c95"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"            agents \u003d self.plugin.get_lbaas_agents(context,"},{"line_number":81,"context_line":"                                                  filters\u003d{\u0027host\u0027: [host]})"},{"line_number":82,"context_line":"            if not agents:"},{"line_number":83,"context_line":"                return []"},{"line_number":84,"context_line":"            pools \u003d self.plugin.list_pools_on_lbaas_agent(context,"},{"line_number":85,"context_line":"                                                          agents[0].id)"},{"line_number":86,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Pool.id.in_(pools[\u0027pools\u0027]))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2FlWU%3D","line":83,"in_reply_to":"AAAAP3%2F%2FwDY%3D","updated":"2013-07-16 09:00:42.000000000","message":"Yep, makes sence","commit_id":"ddde1e54e81f3157a0b987e7cc39eed929765c95"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    # history"},{"line_number":216,"context_line":"    #   1.0 Initial version"},{"line_number":217,"context_line":"    #   2.0 Added host parameter; Support agent_updated call"},{"line_number":218,"context_line":"    API_VERSION \u003d \u00272.0\u0027"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def __init__(self, topic):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2Ffsw%3D","line":217,"updated":"2013-07-17 12:37:38.000000000","message":"I don\u0027t think it is a major change.\n\nFor existing methods (reload, destroy, modify), RPC message generated by make_msg is unchaged. From this point of view, RPC API is unchaged and agent_updatd method is just added.\n\nThus IMO 1.1 is a better choice.","commit_id":"1e3ef65f264977611b7ecff0aba958fd56cc9c9a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    # history"},{"line_number":216,"context_line":"    #   1.0 Initial version"},{"line_number":217,"context_line":"    #   2.0 Added host parameter; Support agent_updated call"},{"line_number":218,"context_line":"    API_VERSION \u003d \u00272.0\u0027"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def __init__(self, topic):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2Ffr8%3D","line":217,"in_reply_to":"AAAAP3%2F%2Ffsw%3D","updated":"2013-07-17 12:40:47.000000000","message":"Agree","commit_id":"1e3ef65f264977611b7ecff0aba958fd56cc9c9a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":215,"context_line":"    # history"},{"line_number":216,"context_line":"    #   1.0 Initial version"},{"line_number":217,"context_line":"    #   1.1 Support agent_updated call"},{"line_number":218,"context_line":"    API_VERSION \u003d \u00271.1\u0027"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def __init__(self, topic):"},{"line_number":221,"context_line":"        super(LoadBalancerAgentApi, self).__init__(topic, self.API_VERSION)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAP3%2F%2Ffng%3D","line":218,"updated":"2013-07-17 13:14:11.000000000","message":"This changes the default version. As a result the version of allexisting methods will be changed.\n\nThere is a good example how to add a new method here:\nhttp://docs.openstack.org/developer/nova/api/nova.openstack.common.rpc.dispatcher.html#example-1-adding-a-new-method\n\nThere was a same discussion in the review of l3-agent. Russel advised us how to use RPC versioning.\nhttps://review.openstack.org/#/c/36890/23/neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py  (L.65)\nThe detail comment is found at patch set 17:  https://review.openstack.org/#/c/36890/17/neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py (L.35)","commit_id":"2f48d9e3bddb63ddc166f7f82d9b5e031f77f6de"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":215,"context_line":"    # history"},{"line_number":216,"context_line":"    #   1.0 Initial version"},{"line_number":217,"context_line":"    #   1.1 Support agent_updated call"},{"line_number":218,"context_line":"    API_VERSION \u003d \u00271.1\u0027"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def __init__(self, topic):"},{"line_number":221,"context_line":"        super(LoadBalancerAgentApi, self).__init__(topic, self.API_VERSION)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2F%2BSg%3D","line":218,"in_reply_to":"AAAAP3%2F%2Ffng%3D","updated":"2013-07-18 07:49:12.000000000","message":"Thanks for such a detailed comment Akihiro! Will fix this","commit_id":"2f48d9e3bddb63ddc166f7f82d9b5e031f77f6de"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":218,"context_line":"    API_VERSION \u003d \u00271.1\u0027"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def __init__(self, topic):"},{"line_number":221,"context_line":"        super(LoadBalancerAgentApi, self).__init__(topic, self.API_VERSION)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def reload_pool(self, context, pool_id, host):"},{"line_number":224,"context_line":"        return self.cast("}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAP3%2F%2FfmI%3D","line":221,"updated":"2013-07-17 13:14:11.000000000","message":"2nd parameter of __init__ is default_version, so it is better to replace \"self.API_VERSION\" with  \"default_version\u003dBASE_RPC_API_VERSION\".","commit_id":"2f48d9e3bddb63ddc166f7f82d9b5e031f77f6de"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":218,"context_line":"    API_VERSION \u003d \u00271.1\u0027"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def __init__(self, topic):"},{"line_number":221,"context_line":"        super(LoadBalancerAgentApi, self).__init__(topic, self.API_VERSION)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def reload_pool(self, context, pool_id, host):"},{"line_number":224,"context_line":"        return self.cast("}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2F%2BSY%3D","line":221,"in_reply_to":"AAAAP3%2F%2FfmI%3D","updated":"2013-07-18 07:49:12.000000000","message":"Done","commit_id":"2f48d9e3bddb63ddc166f7f82d9b5e031f77f6de"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":246,"context_line":"            context,"},{"line_number":247,"context_line":"            self.make_msg(\u0027agent_updated\u0027,"},{"line_number":248,"context_line":"                          payload\u003d{\u0027admin_state_up\u0027: admin_state_up}),"},{"line_number":249,"context_line":"            topic\u003d\u0027%s.%s\u0027 % (self.topic, host)"},{"line_number":250,"context_line":"        )"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAP3%2F%2Ffl4%3D","line":249,"updated":"2013-07-17 13:14:11.000000000","message":"Per my comment above:\n\n    self.cast(\n        context,\n        self.make_msg(....),\n        topic\u003d....,\n        version\u003d\u00271.1\u0027)","commit_id":"2f48d9e3bddb63ddc166f7f82d9b5e031f77f6de"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":246,"context_line":"            context,"},{"line_number":247,"context_line":"            self.make_msg(\u0027agent_updated\u0027,"},{"line_number":248,"context_line":"                          payload\u003d{\u0027admin_state_up\u0027: admin_state_up}),"},{"line_number":249,"context_line":"            topic\u003d\u0027%s.%s\u0027 % (self.topic, host)"},{"line_number":250,"context_line":"        )"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAQn%2F%2F%2BSU%3D","line":249,"in_reply_to":"AAAAP3%2F%2Ffl4%3D","updated":"2013-07-18 07:49:12.000000000","message":"Done","commit_id":"2f48d9e3bddb63ddc166f7f82d9b5e031f77f6de"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"class LoadBalancerAgentApi(proxy.RpcProxy):"},{"line_number":213,"context_line":"    \"\"\"Plugin side of plugin to agent RPC API.\"\"\""},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2F6rA%3D","line":213,"updated":"2013-07-19 08:18:10.000000000","message":"It is better to have history here. The history in patch set 16 looks good to me.","commit_id":"b4f71d27609ece2c875761b4d34e550e01215a25"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"class LoadBalancerAgentApi(proxy.RpcProxy):"},{"line_number":213,"context_line":"    \"\"\"Plugin side of plugin to agent RPC API.\"\"\""},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2F6nY%3D","line":213,"in_reply_to":"AAAAQn%2F%2F6rA%3D","updated":"2013-07-19 08:51:27.000000000","message":"Done","commit_id":"b4f71d27609ece2c875761b4d34e550e01215a25"}],"neutron/services/loadbalancer/plugin.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":220,"context_line":"        # update the db and return the value from db"},{"line_number":221,"context_line":"        # else - return what we have in db"},{"line_number":222,"context_line":"        if stats_data:"},{"line_number":223,"context_line":"            super(LoadBalancerPlugin, self).update_pool_stats("},{"line_number":224,"context_line":"                context,"},{"line_number":225,"context_line":"                pool_id,"},{"line_number":226,"context_line":"                stats_data"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2F6qU%3D","line":223,"updated":"2013-07-19 08:18:10.000000000","message":"Is this a fix of an existing bug? Is it covered by unit tests now?","commit_id":"b4f71d27609ece2c875761b4d34e550e01215a25"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":220,"context_line":"        # update the db and return the value from db"},{"line_number":221,"context_line":"        # else - return what we have in db"},{"line_number":222,"context_line":"        if stats_data:"},{"line_number":223,"context_line":"            super(LoadBalancerPlugin, self).update_pool_stats("},{"line_number":224,"context_line":"                context,"},{"line_number":225,"context_line":"                pool_id,"},{"line_number":226,"context_line":"                stats_data"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2F6kg%3D","line":223,"in_reply_to":"AAAAQn%2F%2F6qU%3D","updated":"2013-07-19 08:51:27.000000000","message":"Yeah, this bug was introduced in https://review.openstack.org/#/c/37208/. Loadbalancer db tests didn\u0027t catch it there because the default driver was haproxy driver and it returns None at #218. \n\nCurrent patch sets noop driver as default for db tests. This driver returns a non-empty dict at #218 so the bug was catched by existing tests.","commit_id":"b4f71d27609ece2c875761b4d34e550e01215a25"}],"neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import testtools"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo.config import cfg"},{"line_number":23,"context_line":"import webob.exc"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff74%3D","line":20,"updated":"2013-07-17 11:06:49.000000000","message":"mock and testtools are third party, so they needs to be moved around L.22-23.","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import testtools"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo.config import cfg"},{"line_number":23,"context_line":"import webob.exc"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff1c%3D","line":20,"in_reply_to":"AAAAP3%2F%2Ff74%3D","updated":"2013-07-17 11:55:42.000000000","message":"Done","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"class TestLoadBalancer(LoadBalancerPluginDbTestCase):"},{"line_number":284,"context_line":"    def setUp(self):"},{"line_number":285,"context_line":"        cfg.CONF.set_override(\u0027driver_fqn\u0027,"},{"line_number":286,"context_line":"                              \u0027neutron.services.loadbalancer.drivers.noop\u0027"},{"line_number":287,"context_line":"                              \u0027.noop_driver.NoopLbaaSDriver\u0027,"},{"line_number":288,"context_line":"                              group\u003d\u0027LBAAS\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAQn%2F%2F6fs%3D","line":285,"updated":"2013-07-19 09:19:14.000000000","message":"as you\u0027ve switched to noop driver, test_delete_pool will work incorrectly.\nThe test itself is broken, but in addition, pool object will remain in the database.\nTo fix that, please add _db_delete_pool() call to noop plugin driver","commit_id":"5f5c520175c361d37cd3d07254ea0eb0665ddd59"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"class TestLoadBalancer(LoadBalancerPluginDbTestCase):"},{"line_number":284,"context_line":"    def setUp(self):"},{"line_number":285,"context_line":"        cfg.CONF.set_override(\u0027driver_fqn\u0027,"},{"line_number":286,"context_line":"                              \u0027neutron.services.loadbalancer.drivers.noop\u0027"},{"line_number":287,"context_line":"                              \u0027.noop_driver.NoopLbaaSDriver\u0027,"},{"line_number":288,"context_line":"                              group\u003d\u0027LBAAS\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAQn%2F%2F6eQ%3D","line":285,"in_reply_to":"AAAAQn%2F%2F6fs%3D","updated":"2013-07-19 09:25:17.000000000","message":"Sure, good catch!","commit_id":"5f5c520175c361d37cd3d07254ea0eb0665ddd59"}],"neutron/tests/unit/openvswitch/test_agent_scheduler.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":222,"context_line":"    def test_report_states(self):"},{"line_number":223,"context_line":"        self._register_agent_states()"},{"line_number":224,"context_line":"        agents \u003d self._list_agents()"},{"line_number":225,"context_line":"        self.assertEqual(6, len(agents[\u0027agents\u0027]))"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_network_scheduling_on_network_creation(self):"},{"line_number":228,"context_line":"        self._register_agent_states()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff68%3D","line":225,"updated":"2013-07-17 11:06:49.000000000","message":"I understand this change is a result of adding lbaas-agents to _register_agent_states(). However, IMO, it is better to avoid the change like this. Can we avoid this by adding some argument to _register_agent_states()? (I am okay if you keep it unchanged)","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":222,"context_line":"    def test_report_states(self):"},{"line_number":223,"context_line":"        self._register_agent_states()"},{"line_number":224,"context_line":"        agents \u003d self._list_agents()"},{"line_number":225,"context_line":"        self.assertEqual(6, len(agents[\u0027agents\u0027]))"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_network_scheduling_on_network_creation(self):"},{"line_number":228,"context_line":"        self._register_agent_states()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2Ff0o%3D","line":225,"in_reply_to":"AAAAP3%2F%2Ff68%3D","updated":"2013-07-17 11:55:42.000000000","message":"Done","commit_id":"107bc694326e28c272d83cd7bf82e1bc787a0fe6"}],"quantum/db/agentschedulers_db.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"cbf998de007c8b71db0366f24ad678812f136757","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                                          ondelete\u003d\u0027CASCADE\u0027))"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class PoolLoadbalancerAgentBinding(model_base.BASEV2):"},{"line_number":60,"context_line":"    \"\"\"Represents binding between quantum loadbalancer pools and agents.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    pool_id \u003d sa.Column(sa.String(36),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F2mA%3D","line":59,"updated":"2013-06-07 14:51:31.000000000","message":"I think all scheduler logic should be moved somehow close to lbaas service, probably, to corresponding plugin-driver.\n\nThere was a review \u0027L3 as a plugin\u0027 in which dhcp and l3 scheduling are in separate files. I think that was the right direction and scheduling should be moved to specific service.","commit_id":"1d14ce00dd7b8fa4c5746aa1afd4eeb42d45526c"}],"quantum/extensions/agentscheduler.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        lbaas_plugin \u003d manager.QuantumManager.get_service_plugins().get("},{"line_number":101,"context_line":"            plugin_const.LOADBALANCER)"},{"line_number":102,"context_line":"        if not lbaas_plugin:"},{"line_number":103,"context_line":"            return"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        policy.enforce(request.context,"},{"line_number":106,"context_line":"                       \"get_%s\" % LOADBALANCER_POOLS,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0xM%3D","line":103,"updated":"2013-06-20 11:18:05.000000000","message":"None or [] ?","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        lbaas_plugin \u003d manager.QuantumManager.get_service_plugins().get("},{"line_number":101,"context_line":"            plugin_const.LOADBALANCER)"},{"line_number":102,"context_line":"        if not lbaas_plugin:"},{"line_number":103,"context_line":"            return"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        policy.enforce(request.context,"},{"line_number":106,"context_line":"                       \"get_%s\" % LOADBALANCER_POOLS,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0VY%3D","line":103,"in_reply_to":"AAAAPn%2F%2F0xM%3D","updated":"2013-06-20 15:24:40.000000000","message":"Should be a dict {\u0027pools\u0027: []}, thanks for pointing","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"}],"quantum/manager.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"71ba7e774876825cf3627bc27e8dd15ce3289a75","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            # (needed by agent management extension)"},{"line_number":182,"context_line":"            if (hasattr(self.plugin, \u0027agent_notifiers\u0027) and"},{"line_number":183,"context_line":"                    hasattr(plugin_inst, \u0027agent_notifiers\u0027)):"},{"line_number":184,"context_line":"                self.plugin.agent_notifiers.update(plugin_inst.agent_notifiers)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"            LOG.debug(_(\"Successfully loaded %(type)s plugin. \""},{"line_number":187,"context_line":"                        \"Description: %(desc)s\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F9Zg%3D","line":184,"updated":"2013-06-17 12:44:21.000000000","message":"How about defining plugin_init_hook() or similar method in a service plugin class, and call the hook method here if the service plugin has the method.\n\nif hasattr(plugin_inst, \u0027plugin_init_hook):\n    plugin_inst.plugin_init_hook(self.plugin)\n\nIn LoadBalancerPlugin,\n\ndef plugin_init_hook(self, core_plugin):\n    if hasattr(core_plugin, \u0027agent_notifiers\u0027):\n        core_plugin.agent_notifiers.update(self.agent_notifiers)\n\nIn this approach we no longer need to define agent_notifiers in services/loadbalancer/plugin.py. In my understanding, loadbalancer/plugin.py is a generic class and it does not depends on agent-based implementation.","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"650a7d791e3f51e239b216a2bc32644383164b75","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            # (needed by agent management extension)"},{"line_number":182,"context_line":"            if (hasattr(self.plugin, \u0027agent_notifiers\u0027) and"},{"line_number":183,"context_line":"                    hasattr(plugin_inst, \u0027agent_notifiers\u0027)):"},{"line_number":184,"context_line":"                self.plugin.agent_notifiers.update(plugin_inst.agent_notifiers)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"            LOG.debug(_(\"Successfully loaded %(type)s plugin. \""},{"line_number":187,"context_line":"                        \"Description: %(desc)s\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F9R4%3D","line":184,"in_reply_to":"AAAAPn%2F%2F9Zg%3D","updated":"2013-06-17 13:17:22.000000000","message":"Yes, your understanding is correct, the plugin should be generic but I believe it\u0027s ok that the plugin is aware of possible agent based implementations and provides a common place for storing their agent notifiers. \nOne more thing here is that we also need to redefine agent_notifiers in lbaas plugin to not include None values for dhcp and l3 notifiers (see db/agentscheduler_db.py) and thus to not override them by mistake in the core plugin.","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"9bca7b00fb790fea7c4e80e9b593a312b7de7c70","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            # (needed by agent management extension)"},{"line_number":182,"context_line":"            if (hasattr(self.plugin, \u0027agent_notifiers\u0027) and"},{"line_number":183,"context_line":"                    hasattr(plugin_inst, \u0027agent_notifiers\u0027)):"},{"line_number":184,"context_line":"                self.plugin.agent_notifiers.update(plugin_inst.agent_notifiers)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"            LOG.debug(_(\"Successfully loaded %(type)s plugin. \""},{"line_number":187,"context_line":"                        \"Description: %(desc)s\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2Fo2A%3D","line":184,"updated":"2013-06-26 07:51:25.000000000","message":"Is there a case where the self.plugin \u003d\u003d plugin_inst?","commit_id":"09791134792682ed9701e794325f2a7431423e04"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":181,"context_line":"            # (needed by agent management extension)"},{"line_number":182,"context_line":"            if (hasattr(self.plugin, \u0027agent_notifiers\u0027) and"},{"line_number":183,"context_line":"                    hasattr(plugin_inst, \u0027agent_notifiers\u0027)):"},{"line_number":184,"context_line":"                self.plugin.agent_notifiers.update(plugin_inst.agent_notifiers)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"            LOG.debug(_(\"Successfully loaded %(type)s plugin. \""},{"line_number":187,"context_line":"                        \"Description: %(desc)s\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2Fovk%3D","line":184,"in_reply_to":"AAAAPn%2F%2Fo2A%3D","updated":"2013-06-26 09:44:25.000000000","message":"No, it shouldn\u0027t: self.plugin is taken from core_plugin config option while plugin_inst is one of configured service_plugins. Core plugin shouldn\u0027t be declared among service plugins.","commit_id":"09791134792682ed9701e794325f2a7431423e04"}],"quantum/scheduler/loadbalancer_agent_scheduler.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"cbf998de007c8b71db0366f24ad678812f136757","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 (c) 2013 OpenStack Foundation."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPX%2F%2F2lo%3D","line":1,"updated":"2013-06-07 14:51:31.000000000","message":"i would suggest to move this file into services/agent_loadbalancer/drivers/haproxy/","commit_id":"1d14ce00dd7b8fa4c5746aa1afd4eeb42d45526c"}],"quantum/services/loadbalancer/agent_scheduler.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    pool_id \u003d sa.Column(sa.String(36),"},{"line_number":36,"context_line":"                        sa.ForeignKey(\"pools.id\", ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":37,"context_line":"                        primary_key\u003dTrue)"},{"line_number":38,"context_line":"    loadbalancer_agent \u003d orm.relation(agents_db.Agent)"},{"line_number":39,"context_line":"    loadbalancer_agent_id \u003d sa.Column(sa.String(36),"},{"line_number":40,"context_line":"                                      sa.ForeignKey(\"agents.id\","},{"line_number":41,"context_line":"                                                    ondelete\u003d\u0027CASCADE\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0yg%3D","line":38,"updated":"2013-06-20 11:18:05.000000000","message":"I\u0027d just name it agent, since model name already points to loadbalancer context","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    pool_id \u003d sa.Column(sa.String(36),"},{"line_number":36,"context_line":"                        sa.ForeignKey(\"pools.id\", ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":37,"context_line":"                        primary_key\u003dTrue)"},{"line_number":38,"context_line":"    loadbalancer_agent \u003d orm.relation(agents_db.Agent)"},{"line_number":39,"context_line":"    loadbalancer_agent_id \u003d sa.Column(sa.String(36),"},{"line_number":40,"context_line":"                                      sa.ForeignKey(\"agents.id\","},{"line_number":41,"context_line":"                                                    ondelete\u003d\u0027CASCADE\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0Tw%3D","line":38,"in_reply_to":"AAAAPn%2F%2F0yg%3D","updated":"2013-06-20 15:24:40.000000000","message":"Done","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                        sa.ForeignKey(\"pools.id\", ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":37,"context_line":"                        primary_key\u003dTrue)"},{"line_number":38,"context_line":"    loadbalancer_agent \u003d orm.relation(agents_db.Agent)"},{"line_number":39,"context_line":"    loadbalancer_agent_id \u003d sa.Column(sa.String(36),"},{"line_number":40,"context_line":"                                      sa.ForeignKey(\"agents.id\","},{"line_number":41,"context_line":"                                                    ondelete\u003d\u0027CASCADE\u0027))"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0yo%3D","line":39,"updated":"2013-06-20 11:18:05.000000000","message":"I\u0027d just name it agent_id","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                        sa.ForeignKey(\"pools.id\", ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":37,"context_line":"                        primary_key\u003dTrue)"},{"line_number":38,"context_line":"    loadbalancer_agent \u003d orm.relation(agents_db.Agent)"},{"line_number":39,"context_line":"    loadbalancer_agent_id \u003d sa.Column(sa.String(36),"},{"line_number":40,"context_line":"                                      sa.ForeignKey(\"agents.id\","},{"line_number":41,"context_line":"                                                    ondelete\u003d\u0027CASCADE\u0027))"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0Ts%3D","line":39,"in_reply_to":"AAAAPn%2F%2F0yo%3D","updated":"2013-06-20 15:24:40.000000000","message":"Done","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"class LbaasAgentSchedulerDbMixin(agentschedulers_db.AgentSchedulerDbMixin):"},{"line_number":45,"context_line":"    def get_lbaas_agent_hosting_pool(self, context, pool_id, active\u003dNone):"},{"line_number":46,"context_line":"        query \u003d context.session.query(PoolLoadbalancerAgentBinding)"},{"line_number":47,"context_line":"        query \u003d query.options(joinedload(\u0027loadbalancer_agent\u0027))"},{"line_number":48,"context_line":"        binding \u003d query.get(pool_id)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        if (binding and self.is_eligible_agent("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0yQ%3D","line":47,"updated":"2013-06-20 11:18:05.000000000","message":"You can specify lazy\u003d\u0027joined\u0027 in the model relationship and achieve the same.","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":44,"context_line":"class LbaasAgentSchedulerDbMixin(agentschedulers_db.AgentSchedulerDbMixin):"},{"line_number":45,"context_line":"    def get_lbaas_agent_hosting_pool(self, context, pool_id, active\u003dNone):"},{"line_number":46,"context_line":"        query \u003d context.session.query(PoolLoadbalancerAgentBinding)"},{"line_number":47,"context_line":"        query \u003d query.options(joinedload(\u0027loadbalancer_agent\u0027))"},{"line_number":48,"context_line":"        binding \u003d query.get(pool_id)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        if (binding and self.is_eligible_agent("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0SY%3D","line":47,"in_reply_to":"AAAAPn%2F%2F0yQ%3D","updated":"2013-06-20 15:24:40.000000000","message":"It seems this is the only place where joinedload is needed so I think it\u0027s ok","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_lbaas_agents(self, context, active\u003dNone, filters\u003dNone):"},{"line_number":55,"context_line":"        query \u003d context.session.query(agents_db.Agent)"},{"line_number":56,"context_line":"        query \u003d query.filter("},{"line_number":57,"context_line":"            agents_db.Agent.agent_type \u003d\u003d constants.AGENT_TYPE_LOADBALANCER)"},{"line_number":58,"context_line":"        if active is not None:"},{"line_number":59,"context_line":"            query \u003d (query.filter(agents_db.Agent.admin_state_up \u003d\u003d active))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F01Y%3D","line":56,"updated":"2013-06-20 11:18:05.000000000","message":"might shorten the string by using filter_by","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_lbaas_agents(self, context, active\u003dNone, filters\u003dNone):"},{"line_number":55,"context_line":"        query \u003d context.session.query(agents_db.Agent)"},{"line_number":56,"context_line":"        query \u003d query.filter("},{"line_number":57,"context_line":"            agents_db.Agent.agent_type \u003d\u003d constants.AGENT_TYPE_LOADBALANCER)"},{"line_number":58,"context_line":"        if active is not None:"},{"line_number":59,"context_line":"            query \u003d (query.filter(agents_db.Agent.admin_state_up \u003d\u003d active))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0SA%3D","line":56,"in_reply_to":"AAAAPn%2F%2F01Y%3D","updated":"2013-06-20 15:24:40.000000000","message":"Done","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        query \u003d query.filter("},{"line_number":57,"context_line":"            agents_db.Agent.agent_type \u003d\u003d constants.AGENT_TYPE_LOADBALANCER)"},{"line_number":58,"context_line":"        if active is not None:"},{"line_number":59,"context_line":"            query \u003d (query.filter(agents_db.Agent.admin_state_up \u003d\u003d active))"},{"line_number":60,"context_line":"        if filters:"},{"line_number":61,"context_line":"            for key, value in filters.iteritems():"},{"line_number":62,"context_line":"                column \u003d getattr(agents_db.Agent, key, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F01U%3D","line":59,"updated":"2013-06-20 11:18:05.000000000","message":"ditto","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        query \u003d query.filter("},{"line_number":57,"context_line":"            agents_db.Agent.agent_type \u003d\u003d constants.AGENT_TYPE_LOADBALANCER)"},{"line_number":58,"context_line":"        if active is not None:"},{"line_number":59,"context_line":"            query \u003d (query.filter(agents_db.Agent.admin_state_up \u003d\u003d active))"},{"line_number":60,"context_line":"        if filters:"},{"line_number":61,"context_line":"            for key, value in filters.iteritems():"},{"line_number":62,"context_line":"                column \u003d getattr(agents_db.Agent, key, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0R8%3D","line":59,"in_reply_to":"AAAAPn%2F%2F01U%3D","updated":"2013-06-20 15:24:40.000000000","message":"Done","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            agents_db.Agent.agent_type \u003d\u003d constants.AGENT_TYPE_LOADBALANCER)"},{"line_number":58,"context_line":"        if active is not None:"},{"line_number":59,"context_line":"            query \u003d (query.filter(agents_db.Agent.admin_state_up \u003d\u003d active))"},{"line_number":60,"context_line":"        if filters:"},{"line_number":61,"context_line":"            for key, value in filters.iteritems():"},{"line_number":62,"context_line":"                column \u003d getattr(agents_db.Agent, key, None)"},{"line_number":63,"context_line":"                if column:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F008%3D","line":60,"updated":"2013-06-20 11:18:05.000000000","message":"60-64 might be borrowed from CommonDbMixin._apply_filters_to_query","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            agents_db.Agent.agent_type \u003d\u003d constants.AGENT_TYPE_LOADBALANCER)"},{"line_number":58,"context_line":"        if active is not None:"},{"line_number":59,"context_line":"            query \u003d (query.filter(agents_db.Agent.admin_state_up \u003d\u003d active))"},{"line_number":60,"context_line":"        if filters:"},{"line_number":61,"context_line":"            for key, value in filters.iteritems():"},{"line_number":62,"context_line":"                column \u003d getattr(agents_db.Agent, key, None)"},{"line_number":63,"context_line":"                if column:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0QI%3D","line":60,"in_reply_to":"AAAAPn%2F%2F008%3D","updated":"2013-06-20 15:24:40.000000000","message":"I think it\u0027s rather trivial operation and isn\u0027t worth inheriting the whole CommonDbMixin","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def list_pools_on_lbaas_agent(self, context, id):"},{"line_number":71,"context_line":"        query \u003d context.session.query(PoolLoadbalancerAgentBinding.pool_id)"},{"line_number":72,"context_line":"        query \u003d query.filter(PoolLoadbalancerAgentBinding"},{"line_number":73,"context_line":"                             .loadbalancer_agent_id \u003d\u003d id)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return {\u0027pools\u0027: [item[0] for item in query]}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F004%3D","line":72,"updated":"2013-06-20 11:18:05.000000000","message":"filter_by","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def list_pools_on_lbaas_agent(self, context, id):"},{"line_number":71,"context_line":"        query \u003d context.session.query(PoolLoadbalancerAgentBinding.pool_id)"},{"line_number":72,"context_line":"        query \u003d query.filter(PoolLoadbalancerAgentBinding"},{"line_number":73,"context_line":"                             .loadbalancer_agent_id \u003d\u003d id)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return {\u0027pools\u0027: [item[0] for item in query]}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0QE%3D","line":72,"in_reply_to":"AAAAPn%2F%2F004%3D","updated":"2013-06-20 15:24:40.000000000","message":"Done","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":86,"context_line":"            lbaas_agent \u003d plugin.get_lbaas_agent_hosting_pool("},{"line_number":87,"context_line":"                context, [pool[\u0027id\u0027]])"},{"line_number":88,"context_line":"            if lbaas_agent:"},{"line_number":89,"context_line":"                LOG.debug(_(\u0027Pool %(pool_id)s has already been hosted\u0027"},{"line_number":90,"context_line":"                            \u0027 by lbaas agent %(agent_id)s\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0y0%3D","line":87,"updated":"2013-06-20 11:18:05.000000000","message":"passing list of ids while method receives single pool_id","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":86,"context_line":"            lbaas_agent \u003d plugin.get_lbaas_agent_hosting_pool("},{"line_number":87,"context_line":"                context, [pool[\u0027id\u0027]])"},{"line_number":88,"context_line":"            if lbaas_agent:"},{"line_number":89,"context_line":"                LOG.debug(_(\u0027Pool %(pool_id)s has already been hosted\u0027"},{"line_number":90,"context_line":"                            \u0027 by lbaas agent %(agent_id)s\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0P8%3D","line":87,"in_reply_to":"AAAAPn%2F%2F0y0%3D","updated":"2013-06-20 15:24:40.000000000","message":"Yeah, good catch!","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"            candidates \u003d plugin.get_lbaas_agents(context, active\u003dTrue)"},{"line_number":96,"context_line":"            if not candidates:"},{"line_number":97,"context_line":"                LOG.warn(_(\u0027No active lbaas agents\u0027))"},{"line_number":98,"context_line":"                return"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"            chosen_agent \u003d random.choice(candidates)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0yw%3D","line":97,"updated":"2013-06-20 11:18:05.000000000","message":"add pool id to the warning message","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"            candidates \u003d plugin.get_lbaas_agents(context, active\u003dTrue)"},{"line_number":96,"context_line":"            if not candidates:"},{"line_number":97,"context_line":"                LOG.warn(_(\u0027No active lbaas agents\u0027))"},{"line_number":98,"context_line":"                return"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"            chosen_agent \u003d random.choice(candidates)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0Ps%3D","line":97,"in_reply_to":"AAAAPn%2F%2F0yw%3D","updated":"2013-06-20 15:24:40.000000000","message":"Done","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"}],"quantum/services/loadbalancer/drivers/haproxy/agent_manager.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"9bca7b00fb790fea7c4e80e9b593a312b7de7c70","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            device_count \u003d len(self.cache.devices)"},{"line_number":169,"context_line":"            self.agent_state[\u0027configurations\u0027][\u0027devices\u0027] \u003d device_count"},{"line_number":170,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":171,"context_line":"                                        self.agent_state)"},{"line_number":172,"context_line":"            self.agent_state.pop(\u0027start_flag\u0027, None)"},{"line_number":173,"context_line":"        except Exception:"},{"line_number":174,"context_line":"            LOG.exception(\"Failed reporting state!\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2Fo0w%3D","line":171,"updated":"2013-06-26 07:51:25.000000000","message":"can we add a variable to tell admin how many pools this agent is hosting?","commit_id":"09791134792682ed9701e794325f2a7431423e04"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":168,"context_line":"            device_count \u003d len(self.cache.devices)"},{"line_number":169,"context_line":"            self.agent_state[\u0027configurations\u0027][\u0027devices\u0027] \u003d device_count"},{"line_number":170,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":171,"context_line":"                                        self.agent_state)"},{"line_number":172,"context_line":"            self.agent_state.pop(\u0027start_flag\u0027, None)"},{"line_number":173,"context_line":"        except Exception:"},{"line_number":174,"context_line":"            LOG.exception(\"Failed reporting state!\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FoyI%3D","line":171,"in_reply_to":"AAAAPn%2F%2Fo0w%3D","updated":"2013-06-26 09:44:25.000000000","message":"Actually it\u0027s on #169, I just named them \u0027devices\u0027","commit_id":"09791134792682ed9701e794325f2a7431423e04"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"9bca7b00fb790fea7c4e80e9b593a312b7de7c70","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    def agent_updated(self, context, payload):"},{"line_number":266,"context_line":"        \"\"\"Handle the agent_updated notification event.\"\"\""},{"line_number":267,"context_line":"        if payload[\u0027admin_state_up\u0027]:"},{"line_number":268,"context_line":"            self.needs_resync \u003d True"},{"line_number":269,"context_line":"        LOG.info(_(\"agent_updated by server side %s!\"), payload)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2Fo0c%3D","line":268,"updated":"2013-06-26 07:51:25.000000000","message":"we should respond to the payload[\u0027admin_state_up\u0027] \u003d False case, which we should clean up this agent.\nIn addition action should be done when the new payload[\u0027admin_state_up\u0027] is different than the current value of the agent.","commit_id":"09791134792682ed9701e794325f2a7431423e04"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":265,"context_line":"    def agent_updated(self, context, payload):"},{"line_number":266,"context_line":"        \"\"\"Handle the agent_updated notification event.\"\"\""},{"line_number":267,"context_line":"        if payload[\u0027admin_state_up\u0027]:"},{"line_number":268,"context_line":"            self.needs_resync \u003d True"},{"line_number":269,"context_line":"        LOG.info(_(\"agent_updated by server side %s!\"), payload)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FooI%3D","line":268,"in_reply_to":"AAAAPn%2F%2Fo0c%3D","updated":"2013-06-26 09:44:25.000000000","message":"Done","commit_id":"09791134792682ed9701e794325f2a7431423e04"}],"quantum/services/loadbalancer/drivers/haproxy/plugin_driver.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"9bca7b00fb790fea7c4e80e9b593a312b7de7c70","unresolved":false,"context_lines":[{"line_number":218,"context_line":"class LoadBalancerAgentApi(proxy.RpcProxy):"},{"line_number":219,"context_line":"    \"\"\"Plugin side of plugin to agent RPC API.\"\"\""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    API_VERSION \u003d \u00271.0\u0027"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def __init__(self, topic):"},{"line_number":224,"context_line":"        super(LoadBalancerAgentApi, self).__init__(topic, self.API_VERSION)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2Fo0M%3D","line":221,"updated":"2013-06-26 07:51:25.000000000","message":"bump 1.0 -\u003e 2.0 since we have changed the API interface.","commit_id":"09791134792682ed9701e794325f2a7431423e04"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":218,"context_line":"class LoadBalancerAgentApi(proxy.RpcProxy):"},{"line_number":219,"context_line":"    \"\"\"Plugin side of plugin to agent RPC API.\"\"\""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    API_VERSION \u003d \u00271.0\u0027"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def __init__(self, topic):"},{"line_number":224,"context_line":"        super(LoadBalancerAgentApi, self).__init__(topic, self.API_VERSION)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2Foxc%3D","line":221,"in_reply_to":"AAAAPn%2F%2Fo0M%3D","updated":"2013-06-26 09:44:25.000000000","message":"Since it\u0027s not a major change wouldn\u0027t it be better to change it to 1.1?","commit_id":"09791134792682ed9701e794325f2a7431423e04"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":218,"context_line":"class LoadBalancerAgentApi(proxy.RpcProxy):"},{"line_number":219,"context_line":"    \"\"\"Plugin side of plugin to agent RPC API.\"\"\""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    API_VERSION \u003d \u00271.0\u0027"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def __init__(self, topic):"},{"line_number":224,"context_line":"        super(LoadBalancerAgentApi, self).__init__(topic, self.API_VERSION)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FoLA%3D","line":221,"in_reply_to":"AAAAPn%2F%2FoMM%3D","updated":"2013-06-26 13:22:07.000000000","message":"Done","commit_id":"09791134792682ed9701e794325f2a7431423e04"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"9bca7b00fb790fea7c4e80e9b593a312b7de7c70","unresolved":false,"context_lines":[{"line_number":218,"context_line":"class LoadBalancerAgentApi(proxy.RpcProxy):"},{"line_number":219,"context_line":"    \"\"\"Plugin side of plugin to agent RPC API.\"\"\""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    API_VERSION \u003d \u00271.0\u0027"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def __init__(self, topic):"},{"line_number":224,"context_line":"        super(LoadBalancerAgentApi, self).__init__(topic, self.API_VERSION)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FoMM%3D","line":221,"in_reply_to":"AAAAPn%2F%2Foxc%3D","updated":"2013-06-26 13:12:28.000000000","message":"It is a major change. 1.1 means we can deal with 1.0. 2.0 means we cannot deal with 1.x.","commit_id":"09791134792682ed9701e794325f2a7431423e04"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"9bca7b00fb790fea7c4e80e9b593a312b7de7c70","unresolved":false,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def delete_pool(self, context, pool):"},{"line_number":311,"context_line":"        self.plugin._delete_db_pool(context, pool[\u0027id\u0027])"},{"line_number":312,"context_line":"        agent \u003d self.plugin.get_lbaas_agent_hosting_pool(context, pool[\u0027id\u0027])"},{"line_number":313,"context_line":"        if agent:"},{"line_number":314,"context_line":"            self.agent_rpc.destroy_pool(context, pool[\u0027id\u0027], agent[\u0027host\u0027])"},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2Foz4%3D","line":312,"updated":"2013-06-26 07:51:25.000000000","message":"I am afraid if we delete_db_pool before get agent, line 312 does not help.","commit_id":"09791134792682ed9701e794325f2a7431423e04"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"unresolved":false,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def delete_pool(self, context, pool):"},{"line_number":311,"context_line":"        self.plugin._delete_db_pool(context, pool[\u0027id\u0027])"},{"line_number":312,"context_line":"        agent \u003d self.plugin.get_lbaas_agent_hosting_pool(context, pool[\u0027id\u0027])"},{"line_number":313,"context_line":"        if agent:"},{"line_number":314,"context_line":"            self.agent_rpc.destroy_pool(context, pool[\u0027id\u0027], agent[\u0027host\u0027])"},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FoxU%3D","line":312,"in_reply_to":"AAAAPn%2F%2Foz4%3D","updated":"2013-06-26 09:44:25.000000000","message":"Oh, I see.. Thanks for pointing!","commit_id":"09791134792682ed9701e794325f2a7431423e04"}],"quantum/services/loadbalancer/plugin.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb,"},{"line_number":42,"context_line":"                         agent_scheduler.LbaasAgentSchedulerDbMixin):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\"Implementation of the Quantum Loadbalancer Service Plugin."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F9VQ%3D","line":42,"updated":"2013-06-20 11:18:05.000000000","message":"Is it possible to make plugin be unaware of agent scheduling?\nAgent scheduling is only applicable for specific lbaas service provider, but this introduces scheduling to generic component","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class LoadBalancerPlugin(loadbalancer_db.LoadBalancerPluginDb,"},{"line_number":42,"context_line":"                         agent_scheduler.LbaasAgentSchedulerDbMixin):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\"Implementation of the Quantum Loadbalancer Service Plugin."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0wE%3D","line":42,"in_reply_to":"AAAAPn%2F%2F9VQ%3D","updated":"2013-06-20 11:19:40.000000000","message":"Please disregard this comment.","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"}],"quantum/tests/unit/db/loadbalancer/test_db_loadbalancer.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from quantum.api.extensions import PluginAwareExtensionManager"},{"line_number":27,"context_line":"from quantum.common import config"},{"line_number":28,"context_line":"from quantum import context"},{"line_number":29,"context_line":"import quantum.db.l3_db  # noqa"},{"line_number":30,"context_line":"from quantum.db.loadbalancer import loadbalancer_db as ldb"},{"line_number":31,"context_line":"import quantum.extensions"},{"line_number":32,"context_line":"from quantum.extensions import loadbalancer"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0xs%3D","line":29,"updated":"2013-06-20 11:18:05.000000000","message":"?","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from quantum.api.extensions import PluginAwareExtensionManager"},{"line_number":27,"context_line":"from quantum.common import config"},{"line_number":28,"context_line":"from quantum import context"},{"line_number":29,"context_line":"import quantum.db.l3_db  # noqa"},{"line_number":30,"context_line":"from quantum.db.loadbalancer import loadbalancer_db as ldb"},{"line_number":31,"context_line":"import quantum.extensions"},{"line_number":32,"context_line":"from quantum.extensions import loadbalancer"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0Ow%3D","line":29,"in_reply_to":"AAAAPn%2F%2F0xs%3D","updated":"2013-06-20 15:24:40.000000000","message":"Done to avoid following error: \"NoReferencedTableError: Foreign key associated with column \u0027routerl3agentbindings.router_id\u0027 could not find table \u0027routers\u0027 with which to generate a foreign key to target column \u0027id\u0027\" which appears because of importing agentschedulers_db","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"296efc93952c92c01f20dc8f94feb59411be447c","unresolved":false,"context_lines":[{"line_number":284,"context_line":"    def setUp(self):"},{"line_number":285,"context_line":"        cfg.CONF.set_override(\u0027driver_fqn\u0027,"},{"line_number":286,"context_line":"                              \u0027quantum.services.loadbalancer.drivers.noop\u0027"},{"line_number":287,"context_line":"                              \u0027.noop_driver.NoopLbaaSDriver\u0027,"},{"line_number":288,"context_line":"                              group\u003d\u0027LBAAS\u0027)"},{"line_number":289,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":290,"context_line":"        super(TestLoadBalancer, self).setUp()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0xY%3D","line":287,"updated":"2013-06-20 11:18:05.000000000","message":"why noop?","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c179a78e7f9124b794084481510092e7c1ccdb03","unresolved":false,"context_lines":[{"line_number":284,"context_line":"    def setUp(self):"},{"line_number":285,"context_line":"        cfg.CONF.set_override(\u0027driver_fqn\u0027,"},{"line_number":286,"context_line":"                              \u0027quantum.services.loadbalancer.drivers.noop\u0027"},{"line_number":287,"context_line":"                              \u0027.noop_driver.NoopLbaaSDriver\u0027,"},{"line_number":288,"context_line":"                              group\u003d\u0027LBAAS\u0027)"},{"line_number":289,"context_line":"        self.addCleanup(cfg.CONF.reset)"},{"line_number":290,"context_line":"        super(TestLoadBalancer, self).setUp()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F0Ms%3D","line":287,"in_reply_to":"AAAAPn%2F%2F0xY%3D","updated":"2013-06-20 15:24:40.000000000","message":"if use haproxy plugin driver this needs mocking scheduling functionality (and not only) which this test is not supposed to test.","commit_id":"4416a57e7def4a595b7947a12ad3eb0b5cdb27c8"}]}
