)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"change component into agent from initial design."},{"line_number":12,"context_line":"DHCP Agent needs more modification to support it,"},{"line_number":13,"context_line":"which I will implement in new patch."},{"line_number":14,"context_line":"Change-Id: Iebc272f45c7530c995f32ef3729b11cd76779385"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAM3%2F%2FJmE%3D","line":13,"updated":"2013-02-05 16:14:56.000000000","message":"i do not think that you need to mention the additional patches","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"change component into agent from initial design."},{"line_number":12,"context_line":"DHCP Agent needs more modification to support it,"},{"line_number":13,"context_line":"which I will implement in new patch."},{"line_number":14,"context_line":"Change-Id: Iebc272f45c7530c995f32ef3729b11cd76779385"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAM3%2F%2FIlM%3D","line":13,"in_reply_to":"AAAAM3%2F%2FJmE%3D","updated":"2013-02-06 01:04:45.000000000","message":"Done","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Agent management extension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1/3 part of blueprint quantum-scheduler"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Iebc272f45c7530c995f32ef3729b11cd76779385"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAM3%2F%2FFv8%3D","line":9,"updated":"2013-02-07 13:24:28.000000000","message":"This patch adds agent management support to l3-agent and plugin-agent (ovs and lb). It would be better to describe it in the commit message. Could you add it if you have a chance to update the patch?","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Agent management extension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1/3 part of blueprint quantum-scheduler"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Iebc272f45c7530c995f32ef3729b11cd76779385"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAM3%2F%2B2Pg%3D","line":9,"in_reply_to":"AAAAM3%2F%2FFv8%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"}],"etc/l3_agent.ini":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":60,"context_line":"# agent_down_time of plugin"},{"line_number":61,"context_line":"# report_interval \u003d 4"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B2hk%3D","line":61,"updated":"2013-02-17 01:54:31.000000000","message":"Shouldn\u0027t this be in the [AGENT] section?","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":60,"context_line":"# agent_down_time of plugin"},{"line_number":61,"context_line":"# report_interval \u003d 4"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B2Pc%3D","line":61,"in_reply_to":"AAAAM3%2F%2B2hk%3D","updated":"2013-02-17 09:41:22.000000000","message":"all the configurations are agent related, so I think there is no need to add an group for this item.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":60,"context_line":"# agent_down_time of plugin"},{"line_number":61,"context_line":"# report_interval \u003d 4"}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAM3%2F%2B1%2Bk%3D","line":61,"updated":"2013-02-17 17:01:01.000000000","message":"This belongs to DEFAULT section, but report_interval in other configs are in AGENT section.","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":60,"context_line":"# agent_down_time of plugin"},{"line_number":61,"context_line":"# report_interval \u003d 4"}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAM3%2F%2B17c%3D","line":61,"in_reply_to":"AAAAM3%2F%2B1%2Bk%3D","updated":"2013-02-17 19:01:34.000000000","message":"Agreed.  We should add an [AGENT] section to the l3_agent config.","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":60,"context_line":"# agent_down_time of plugin"},{"line_number":61,"context_line":"# report_interval \u003d 4"}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAM3%2F%2B13o%3D","line":61,"in_reply_to":"AAAAM3%2F%2B17c%3D","updated":"2013-02-17 20:26:40.000000000","message":"I will move this into [AGENT] and put them into quantum.conf","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"}],"etc/quantum/plugins/linuxbridge/linuxbridge_conf.ini":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Seconds to regard the agent is down."},{"line_number":3,"context_line":"# agent_down_time \u003d 5"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"[VLANS]"}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAM3%2F%2FJmA%3D","line":2,"updated":"2013-02-05 16:14:56.000000000","message":"is \u003d\u003e as","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Seconds to regard the agent is down."},{"line_number":3,"context_line":"# agent_down_time \u003d 5"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"[VLANS]"}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAM3%2F%2FIlI%3D","line":2,"in_reply_to":"AAAAM3%2F%2FJmA%3D","updated":"2013-02-06 01:04:45.000000000","message":"Done","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Seconds to regard the agent as down."},{"line_number":3,"context_line":"# agent_down_time \u003d 5"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"[VLANS]"},{"line_number":6,"context_line":"# (StrOpt) Type of network to allocate for tenant networks. The"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B7eA%3D","line":3,"updated":"2013-02-14 02:58:16.000000000","message":"is there a reason this is not in the [AGENT] section below?","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Seconds to regard the agent as down."},{"line_number":3,"context_line":"# agent_down_time \u003d 5"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"[VLANS]"},{"line_number":6,"context_line":"# (StrOpt) Type of network to allocate for tenant networks. The"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B2PE%3D","line":3,"in_reply_to":"AAAAM3%2F%2B2RI%3D","updated":"2013-02-17 09:41:22.000000000","message":"IMHO, items in [AGENT] should be read by agent, not by quantum server. put here not in quantum.conf because I am afraid not all the plugins will support this feature.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Seconds to regard the agent as down."},{"line_number":3,"context_line":"# agent_down_time \u003d 5"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"[VLANS]"},{"line_number":6,"context_line":"# (StrOpt) Type of network to allocate for tenant networks. The"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B2RI%3D","line":3,"in_reply_to":"AAAAM3%2F%2B2hw%3D","updated":"2013-02-17 08:04:41.000000000","message":"i agree with makr. maybe this should be part of the quantum.conf file too","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Seconds to regard the agent as down."},{"line_number":3,"context_line":"# agent_down_time \u003d 5"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"[VLANS]"},{"line_number":6,"context_line":"# (StrOpt) Type of network to allocate for tenant networks. The"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B430%3D","line":3,"in_reply_to":"AAAAM3%2F%2B7eA%3D","updated":"2013-02-15 14:46:33.000000000","message":"I second Dan. It is related to the agent.\n\nPerhaps the reason is that the plugin refers to it.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Seconds to regard the agent as down."},{"line_number":3,"context_line":"# agent_down_time \u003d 5"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"[VLANS]"},{"line_number":6,"context_line":"# (StrOpt) Type of network to allocate for tenant networks. The"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAM3%2F%2B2hw%3D","line":3,"in_reply_to":"AAAAM3%2F%2B7eA%3D","updated":"2013-02-17 01:54:31.000000000","message":"I\u0027m not sure [agent] feel right.  Maybe a new section?","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"# Agent\u0027s polling interval in seconds"},{"line_number":63,"context_line":"polling_interval \u003d 2"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":66,"context_line":"# agent_down_time"},{"line_number":67,"context_line":"# report_interval \u003d 4"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAM3%2F%2B2Cc%3D","line":65,"updated":"2013-02-17 15:36:52.000000000","message":"Why not have this in the Quantum.conf file - https://github.com/openstack/quantum/blob/master/etc/quantum.conf#L205\nThis will make it more generic","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"# Agent\u0027s polling interval in seconds"},{"line_number":63,"context_line":"polling_interval \u003d 2"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":66,"context_line":"# agent_down_time"},{"line_number":67,"context_line":"# report_interval \u003d 4"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAM3%2F%2B17Y%3D","line":65,"in_reply_to":"AAAAM3%2F%2B1%2Bg%3D","updated":"2013-02-17 19:01:34.000000000","message":"+1","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":62,"context_line":"# Agent\u0027s polling interval in seconds"},{"line_number":63,"context_line":"polling_interval \u003d 2"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":66,"context_line":"# agent_down_time"},{"line_number":67,"context_line":"# report_interval \u003d 4"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAM3%2F%2B14I%3D","line":65,"in_reply_to":"AAAAM3%2F%2B1%2Bg%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":62,"context_line":"# Agent\u0027s polling interval in seconds"},{"line_number":63,"context_line":"polling_interval \u003d 2"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":66,"context_line":"# agent_down_time"},{"line_number":67,"context_line":"# report_interval \u003d 4"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAM3%2F%2B14E%3D","line":65,"in_reply_to":"AAAAM3%2F%2B17Y%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"# Agent\u0027s polling interval in seconds"},{"line_number":63,"context_line":"polling_interval \u003d 2"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":66,"context_line":"# agent_down_time"},{"line_number":67,"context_line":"# report_interval \u003d 4"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAM3%2F%2B1%2Bg%3D","line":65,"in_reply_to":"AAAAM3%2F%2B2Cc%3D","updated":"2013-02-17 17:01:01.000000000","message":"I agree with Gary. It is easier to understand if this configuration parameter is shared by all agent (and the server).","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"}],"etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Seconds to regard the agent is down."},{"line_number":3,"context_line":"# agent_down_time \u003d 5"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"[DATABASE]"}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAM3%2F%2FJl0%3D","line":2,"updated":"2013-02-05 16:14:56.000000000","message":"is \u003d\u003e as\n\nIs this the time period where no report has been received - inactivity time?","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":"# Seconds to regard the agent is down."},{"line_number":3,"context_line":"# agent_down_time \u003d 5"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"[DATABASE]"}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAM3%2F%2FIlE%3D","line":2,"in_reply_to":"AAAAM3%2F%2FJl0%3D","updated":"2013-02-06 01:04:45.000000000","message":"Done","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":101,"context_line":"# Agent\u0027s polling interval in seconds"},{"line_number":102,"context_line":"polling_interval \u003d 2"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":105,"context_line":"# agent_down_time"},{"line_number":106,"context_line":"# report_interval \u003d 4"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAM3%2F%2B2CY%3D","line":104,"updated":"2013-02-17 15:36:52.000000000","message":"Ditto - save us configuring this in N places","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":101,"context_line":"# Agent\u0027s polling interval in seconds"},{"line_number":102,"context_line":"polling_interval \u003d 2"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"# seconds between nodes reporting state to server, should be less than"},{"line_number":105,"context_line":"# agent_down_time"},{"line_number":106,"context_line":"# report_interval \u003d 4"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAM3%2F%2B14A%3D","line":104,"in_reply_to":"AAAAM3%2F%2B2CY%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"}],"quantum/agent/common/config.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"               help\u003d_(\u0027Root helper application.\u0027)),"},{"line_number":30,"context_line":"]"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"AGENT_STATE_OPTS \u003d ["},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":34,"context_line":"               help\u003d_(\u0027Seconds between nodes reporting state to server\u0027)),"},{"line_number":35,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B2CU%3D","line":32,"updated":"2013-02-17 15:36:52.000000000","message":"You could do a similar reistration here - more generic like - https://github.com/openstack/quantum/blob/master/quantum/agent/common/config.py#L33\nI think in the agent file it is more appropriate","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":29,"context_line":"               help\u003d_(\u0027Root helper application.\u0027)),"},{"line_number":30,"context_line":"]"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"AGENT_STATE_OPTS \u003d ["},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":34,"context_line":"               help\u003d_(\u0027Seconds between nodes reporting state to server\u0027)),"},{"line_number":35,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B15Y%3D","line":32,"in_reply_to":"AAAAM3%2F%2B2CU%3D","updated":"2013-02-17 20:26:40.000000000","message":"what do u mean? Do u want me to add a register_agent_state_helper(conf)?","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"}],"quantum/agent/l3_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":145,"context_line":"                   default\u003d\u0027quantum.agent.l3_agent.L3NATAgentWithStateReport\u0027,"},{"line_number":146,"context_line":"                   help\u003d_(\"The Quantum L3 Agent manager.\")),"},{"line_number":147,"context_line":"        cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":148,"context_line":"                   help\u003d\u0027seconds between nodes reporting state to server\u0027),"},{"line_number":149,"context_line":"    ]"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def __init__(self, host, conf\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FJlk%3D","line":148,"updated":"2013-02-05 16:14:56.000000000","message":"_i18n support","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                   default\u003d\u0027quantum.agent.l3_agent.L3NATAgentWithStateReport\u0027,"},{"line_number":146,"context_line":"                   help\u003d_(\"The Quantum L3 Agent manager.\")),"},{"line_number":147,"context_line":"        cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":148,"context_line":"                   help\u003d\u0027seconds between nodes reporting state to server\u0027),"},{"line_number":149,"context_line":"    ]"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def __init__(self, host, conf\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FIlA%3D","line":148,"in_reply_to":"AAAAM3%2F%2FJlk%3D","updated":"2013-02-06 01:04:45.000000000","message":"Done","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":625,"context_line":"            \u0027binary\u0027: \u0027quantum-l3-agent\u0027,"},{"line_number":626,"context_line":"            \u0027host\u0027: host,"},{"line_number":627,"context_line":"            \u0027topic\u0027: topics.L3_AGENT,"},{"line_number":628,"context_line":"            \u0027configurations\u0027: {\u0027use_namespaces\u0027: self.conf.use_namespaces,"},{"line_number":629,"context_line":"                               \u0027router_id\u0027: self.conf.router_id,"},{"line_number":630,"context_line":"                               \u0027handle_internal_only_routers\u0027:"},{"line_number":631,"context_line":"                               self.conf.handle_internal_only_routers,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FJlI%3D","line":628,"updated":"2013-02-05 16:14:56.000000000","message":"would it be possible to have a start time or something of the likes - maybe not for this patch, but it would be nice to know how long the agent has been running for. This may help identify we we have problems with agents - for example host reboots...","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":625,"context_line":"            \u0027binary\u0027: \u0027quantum-l3-agent\u0027,"},{"line_number":626,"context_line":"            \u0027host\u0027: host,"},{"line_number":627,"context_line":"            \u0027topic\u0027: topics.L3_AGENT,"},{"line_number":628,"context_line":"            \u0027configurations\u0027: {\u0027use_namespaces\u0027: self.conf.use_namespaces,"},{"line_number":629,"context_line":"                               \u0027router_id\u0027: self.conf.router_id,"},{"line_number":630,"context_line":"                               \u0027handle_internal_only_routers\u0027:"},{"line_number":631,"context_line":"                               self.conf.handle_internal_only_routers,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FIkQ%3D","line":628,"in_reply_to":"AAAAM3%2F%2FJlI%3D","updated":"2013-02-06 01:04:45.000000000","message":"agent db model:\ncreated_at: which takes down the first starting time\nheartbeat_time: current beat time, it will stop if the agent dies\nI will add a timestamp on server side in configuration","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":142,"context_line":"        cfg.StrOpt(\u0027l3_agent_manager\u0027,"},{"line_number":143,"context_line":"                   default\u003d\u0027quantum.agent.l3_agent.L3NATAgentWithStateReport\u0027,"},{"line_number":144,"context_line":"                   help\u003d_(\"The Quantum L3 Agent manager.\")),"},{"line_number":145,"context_line":"        cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":146,"context_line":"                   help\u003d_(\u0027Seconds between nodes reporting state to server\u0027)),"},{"line_number":147,"context_line":"    ]"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2go%3D","line":145,"updated":"2013-02-17 01:54:31.000000000","message":"This should be in the AGENT group.  Also seem like this should be registered in agent.common.config","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        cfg.StrOpt(\u0027l3_agent_manager\u0027,"},{"line_number":143,"context_line":"                   default\u003d\u0027quantum.agent.l3_agent.L3NATAgentWithStateReport\u0027,"},{"line_number":144,"context_line":"                   help\u003d_(\"The Quantum L3 Agent manager.\")),"},{"line_number":145,"context_line":"        cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":146,"context_line":"                   help\u003d_(\u0027Seconds between nodes reporting state to server\u0027)),"},{"line_number":147,"context_line":"    ]"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2PA%3D","line":145,"in_reply_to":"AAAAM3%2F%2B2go%3D","updated":"2013-02-17 09:41:22.000000000","message":"l3 agent has no plugin side and agent side configuration items. all the items are read by agent side.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":623,"context_line":"            \u0027binary\u0027: \u0027quantum-l3-agent\u0027,"},{"line_number":624,"context_line":"            \u0027host\u0027: host,"},{"line_number":625,"context_line":"            \u0027topic\u0027: topics.L3_AGENT,"},{"line_number":626,"context_line":"            \u0027configurations\u0027: {\u0027use_namespaces\u0027: self.conf.use_namespaces,"},{"line_number":627,"context_line":"                               \u0027router_id\u0027: self.conf.router_id,"},{"line_number":628,"context_line":"                               \u0027handle_internal_only_routers\u0027:"},{"line_number":629,"context_line":"                               self.conf.handle_internal_only_routers,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2gY%3D","line":626,"updated":"2013-02-17 01:54:31.000000000","message":"Consider reformatting to be more inline with HACKING guidelines.\n\n\u0027configurations\u0027: {\n    \u0027use_namespaces\u0027: self.conf.use_namespaces,\n    \u0027router_id\u0027: self.conf.router_id,\n    \u0027handle_internal_only_routers\u0027: self.conf.handle_internal_only_routers,\n    \u0027gateway_external_network_id\u0027: self.conf.gateway_external_network_id,\n    \u0027interface_driver\u0027: self.conf.interface_driver,\n    \u0027start_flag\u0027: True,\n},","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":623,"context_line":"            \u0027binary\u0027: \u0027quantum-l3-agent\u0027,"},{"line_number":624,"context_line":"            \u0027host\u0027: host,"},{"line_number":625,"context_line":"            \u0027topic\u0027: topics.L3_AGENT,"},{"line_number":626,"context_line":"            \u0027configurations\u0027: {\u0027use_namespaces\u0027: self.conf.use_namespaces,"},{"line_number":627,"context_line":"                               \u0027router_id\u0027: self.conf.router_id,"},{"line_number":628,"context_line":"                               \u0027handle_internal_only_routers\u0027:"},{"line_number":629,"context_line":"                               self.conf.handle_internal_only_routers,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2O8%3D","line":626,"in_reply_to":"AAAAM3%2F%2B2gY%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":633,"context_line":"                               },"},{"line_number":634,"context_line":"            \u0027type\u0027: l3_constants.AGENT_TYPE_L3_AGENT}"},{"line_number":635,"context_line":"        report_interval \u003d cfg.CONF.report_interval"},{"line_number":636,"context_line":"        self.first_state_report \u003d True"},{"line_number":637,"context_line":"        if cfg.CONF.report_interval:"},{"line_number":638,"context_line":"            pulse \u003d loopingcall.LoopingCall(self._report_state)"},{"line_number":639,"context_line":"            pulse.start(interval\u003dreport_interval)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2dM%3D","line":636,"updated":"2013-02-17 01:54:31.000000000","message":"remove this instance variable","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":633,"context_line":"                               },"},{"line_number":634,"context_line":"            \u0027type\u0027: l3_constants.AGENT_TYPE_L3_AGENT}"},{"line_number":635,"context_line":"        report_interval \u003d cfg.CONF.report_interval"},{"line_number":636,"context_line":"        self.first_state_report \u003d True"},{"line_number":637,"context_line":"        if cfg.CONF.report_interval:"},{"line_number":638,"context_line":"            pulse \u003d loopingcall.LoopingCall(self._report_state)"},{"line_number":639,"context_line":"            pulse.start(interval\u003dreport_interval)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Oc%3D","line":636,"in_reply_to":"AAAAM3%2F%2B2dM%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":634,"context_line":"            \u0027type\u0027: l3_constants.AGENT_TYPE_L3_AGENT}"},{"line_number":635,"context_line":"        report_interval \u003d cfg.CONF.report_interval"},{"line_number":636,"context_line":"        self.first_state_report \u003d True"},{"line_number":637,"context_line":"        if cfg.CONF.report_interval:"},{"line_number":638,"context_line":"            pulse \u003d loopingcall.LoopingCall(self._report_state)"},{"line_number":639,"context_line":"            pulse.start(interval\u003dreport_interval)"},{"line_number":640,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FH%2FM%3D","line":637,"updated":"2013-02-06 14:22:18.000000000","message":"\"if report_interval\" is better since pulse.start() refers to it.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":634,"context_line":"            \u0027type\u0027: l3_constants.AGENT_TYPE_L3_AGENT}"},{"line_number":635,"context_line":"        report_interval \u003d cfg.CONF.report_interval"},{"line_number":636,"context_line":"        self.first_state_report \u003d True"},{"line_number":637,"context_line":"        if cfg.CONF.report_interval:"},{"line_number":638,"context_line":"            pulse \u003d loopingcall.LoopingCall(self._report_state)"},{"line_number":639,"context_line":"            pulse.start(interval\u003dreport_interval)"},{"line_number":640,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2O4%3D","line":637,"in_reply_to":"AAAAM3%2F%2FH%2FM%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":635,"context_line":"        report_interval \u003d cfg.CONF.report_interval"},{"line_number":636,"context_line":"        self.first_state_report \u003d True"},{"line_number":637,"context_line":"        if cfg.CONF.report_interval:"},{"line_number":638,"context_line":"            pulse \u003d loopingcall.LoopingCall(self._report_state)"},{"line_number":639,"context_line":"            pulse.start(interval\u003dreport_interval)"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"    def _report_state(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2gU%3D","line":638,"updated":"2013-02-17 01:54:31.000000000","message":"consider changing pulse to heartbeat","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        report_interval \u003d cfg.CONF.report_interval"},{"line_number":636,"context_line":"        self.first_state_report \u003d True"},{"line_number":637,"context_line":"        if cfg.CONF.report_interval:"},{"line_number":638,"context_line":"            pulse \u003d loopingcall.LoopingCall(self._report_state)"},{"line_number":639,"context_line":"            pulse.start(interval\u003dreport_interval)"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"    def _report_state(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2O0%3D","line":638,"in_reply_to":"AAAAM3%2F%2B2gU%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":643,"context_line":"        interfaces \u003d 0"},{"line_number":644,"context_line":"        floating_ips \u003d 0"},{"line_number":645,"context_line":"        router_infos \u003d self.router_info.values()"},{"line_number":646,"context_line":"        routers \u003d len(router_infos)"},{"line_number":647,"context_line":"        for ri in router_infos:"},{"line_number":648,"context_line":"            ex_gw_port \u003d self._get_ex_gw_port(ri)"},{"line_number":649,"context_line":"            if ex_gw_port:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B6TU%3D","line":646,"updated":"2013-02-14 18:22:06.000000000","message":"routers looks list of router object. How about num_routers ?","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        interfaces \u003d 0"},{"line_number":644,"context_line":"        floating_ips \u003d 0"},{"line_number":645,"context_line":"        router_infos \u003d self.router_info.values()"},{"line_number":646,"context_line":"        routers \u003d len(router_infos)"},{"line_number":647,"context_line":"        for ri in router_infos:"},{"line_number":648,"context_line":"            ex_gw_port \u003d self._get_ex_gw_port(ri)"},{"line_number":649,"context_line":"            if ex_gw_port:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Ow%3D","line":646,"in_reply_to":"AAAAM3%2F%2B6TU%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":651,"context_line":"            internal_ports \u003d ri.router.get(l3_constants.INTERFACE_KEY, [])"},{"line_number":652,"context_line":"            interfaces +\u003d len(internal_ports)"},{"line_number":653,"context_line":"            floatings \u003d ri.router.get(l3_constants.FLOATINGIP_KEY, [])"},{"line_number":654,"context_line":"            floating_ips +\u003d len(floatings)"},{"line_number":655,"context_line":"        configurations \u003d self.agent_state[\u0027configurations\u0027]"},{"line_number":656,"context_line":"        configurations[\u0027routers\u0027] \u003d routers"},{"line_number":657,"context_line":"        configurations[\u0027ex_gw_ports\u0027] \u003d ex_gw_ports"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B7c8%3D","line":654,"updated":"2013-02-14 02:58:16.000000000","message":"this is just a style preference, but for simplicity, both measurements can be collapse into one-liners.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":651,"context_line":"            internal_ports \u003d ri.router.get(l3_constants.INTERFACE_KEY, [])"},{"line_number":652,"context_line":"            interfaces +\u003d len(internal_ports)"},{"line_number":653,"context_line":"            floatings \u003d ri.router.get(l3_constants.FLOATINGIP_KEY, [])"},{"line_number":654,"context_line":"            floating_ips +\u003d len(floatings)"},{"line_number":655,"context_line":"        configurations \u003d self.agent_state[\u0027configurations\u0027]"},{"line_number":656,"context_line":"        configurations[\u0027routers\u0027] \u003d routers"},{"line_number":657,"context_line":"        configurations[\u0027ex_gw_ports\u0027] \u003d ex_gw_ports"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Oo%3D","line":654,"in_reply_to":"AAAAM3%2F%2B2gI%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":651,"context_line":"            internal_ports \u003d ri.router.get(l3_constants.INTERFACE_KEY, [])"},{"line_number":652,"context_line":"            interfaces +\u003d len(internal_ports)"},{"line_number":653,"context_line":"            floatings \u003d ri.router.get(l3_constants.FLOATINGIP_KEY, [])"},{"line_number":654,"context_line":"            floating_ips +\u003d len(floatings)"},{"line_number":655,"context_line":"        configurations \u003d self.agent_state[\u0027configurations\u0027]"},{"line_number":656,"context_line":"        configurations[\u0027routers\u0027] \u003d routers"},{"line_number":657,"context_line":"        configurations[\u0027ex_gw_ports\u0027] \u003d ex_gw_ports"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2gI%3D","line":654,"in_reply_to":"AAAAM3%2F%2B7c8%3D","updated":"2013-02-17 01:54:31.000000000","message":"+1","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":651,"context_line":"            internal_ports \u003d ri.router.get(l3_constants.INTERFACE_KEY, [])"},{"line_number":652,"context_line":"            interfaces +\u003d len(internal_ports)"},{"line_number":653,"context_line":"            floatings \u003d ri.router.get(l3_constants.FLOATINGIP_KEY, [])"},{"line_number":654,"context_line":"            floating_ips +\u003d len(floatings)"},{"line_number":655,"context_line":"        configurations \u003d self.agent_state[\u0027configurations\u0027]"},{"line_number":656,"context_line":"        configurations[\u0027routers\u0027] \u003d routers"},{"line_number":657,"context_line":"        configurations[\u0027ex_gw_ports\u0027] \u003d ex_gw_ports"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Os%3D","line":654,"in_reply_to":"AAAAM3%2F%2B7c8%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":658,"context_line":"        configurations[\u0027interfaces\u0027] \u003d interfaces"},{"line_number":659,"context_line":"        configurations[\u0027floating_ips\u0027] \u003d floating_ips"},{"line_number":660,"context_line":"        try:"},{"line_number":661,"context_line":"            if self.first_state_report:"},{"line_number":662,"context_line":"                self.agent_state[\u0027start_flag\u0027] \u003d True"},{"line_number":663,"context_line":"            elif \u0027start_flag\u0027 in self.agent_state:"},{"line_number":664,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2dI%3D","line":661,"updated":"2013-02-17 01:54:31.000000000","message":"remove 661-665","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":658,"context_line":"        configurations[\u0027interfaces\u0027] \u003d interfaces"},{"line_number":659,"context_line":"        configurations[\u0027floating_ips\u0027] \u003d floating_ips"},{"line_number":660,"context_line":"        try:"},{"line_number":661,"context_line":"            if self.first_state_report:"},{"line_number":662,"context_line":"                self.agent_state[\u0027start_flag\u0027] \u003d True"},{"line_number":663,"context_line":"            elif \u0027start_flag\u0027 in self.agent_state:"},{"line_number":664,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Ok%3D","line":661,"in_reply_to":"AAAAM3%2F%2B2dI%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":664,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":665,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":666,"context_line":"                                        self.agent_state)"},{"line_number":667,"context_line":"            self.first_state_report \u003d False"},{"line_number":668,"context_line":"        except Exception:"},{"line_number":669,"context_line":"            LOG.exception(_(\"Failed reporting state!\"))"},{"line_number":670,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2dE%3D","line":667,"updated":"2013-02-17 01:54:31.000000000","message":"self.agent_state.pop(\u0027start_flag\u0027)","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":664,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":665,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":666,"context_line":"                                        self.agent_state)"},{"line_number":667,"context_line":"            self.first_state_report \u003d False"},{"line_number":668,"context_line":"        except Exception:"},{"line_number":669,"context_line":"            LOG.exception(_(\"Failed reporting state!\"))"},{"line_number":670,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Og%3D","line":667,"in_reply_to":"AAAAM3%2F%2B2dE%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":665,"context_line":"        try:"},{"line_number":666,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":667,"context_line":"                                        self.agent_state)"},{"line_number":668,"context_line":"            if \u0027start_flag\u0027 in self.agent_state:"},{"line_number":669,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":670,"context_line":"        except Exception:"},{"line_number":671,"context_line":"            LOG.exception(_(\"Failed reporting state!\"))"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B16g%3D","line":668,"updated":"2013-02-17 19:01:34.000000000","message":"We can remove the conditional by providing a default to pop.\n\nself.agent_state.pop(\u0027start_flag\u0027, None)","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":665,"context_line":"        try:"},{"line_number":666,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":667,"context_line":"                                        self.agent_state)"},{"line_number":668,"context_line":"            if \u0027start_flag\u0027 in self.agent_state:"},{"line_number":669,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":670,"context_line":"        except Exception:"},{"line_number":671,"context_line":"            LOG.exception(_(\"Failed reporting state!\"))"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B15Q%3D","line":668,"in_reply_to":"AAAAM3%2F%2B16g%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":667,"context_line":"                                        self.agent_state)"},{"line_number":668,"context_line":"            if \u0027start_flag\u0027 in self.agent_state:"},{"line_number":669,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":670,"context_line":"        except Exception:"},{"line_number":671,"context_line":"            LOG.exception(_(\"Failed reporting state!\"))"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B1%2Bc%3D","line":670,"updated":"2013-02-17 17:01:01.000000000","message":"Can we catch more specific exceptions in RPC call?\nI know generic exception catching is used throughout RPC calls and it may be a part of the patch.","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":667,"context_line":"                                        self.agent_state)"},{"line_number":668,"context_line":"            if \u0027start_flag\u0027 in self.agent_state:"},{"line_number":669,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":670,"context_line":"        except Exception:"},{"line_number":671,"context_line":"            LOG.exception(_(\"Failed reporting state!\"))"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B15U%3D","line":670,"in_reply_to":"AAAAM3%2F%2B1%2Bc%3D","updated":"2013-02-17 20:26:40.000000000","message":"This is complex, it may be rpc timeout, socket timeout, and other error on server side. So generic exception seems proper here.","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":675,"context_line":"    eventlet.monkey_patch()"},{"line_number":676,"context_line":"    conf \u003d cfg.CONF"},{"line_number":677,"context_line":"    conf.register_opts(L3NATAgent.OPTS)"},{"line_number":678,"context_line":"    conf.register_opts(config.AGENT_STATE_OPTS)"},{"line_number":679,"context_line":"    config.register_root_helper(conf)"},{"line_number":680,"context_line":"    conf.register_opts(interface.OPTS)"},{"line_number":681,"context_line":"    conf.register_opts(external_process.OPTS)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B2CE%3D","line":678,"updated":"2013-02-17 15:36:52.000000000","message":"This could be generic like the root wrap","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":675,"context_line":"    eventlet.monkey_patch()"},{"line_number":676,"context_line":"    conf \u003d cfg.CONF"},{"line_number":677,"context_line":"    conf.register_opts(L3NATAgent.OPTS)"},{"line_number":678,"context_line":"    conf.register_opts(config.AGENT_STATE_OPTS)"},{"line_number":679,"context_line":"    config.register_root_helper(conf)"},{"line_number":680,"context_line":"    conf.register_opts(interface.OPTS)"},{"line_number":681,"context_line":"    conf.register_opts(external_process.OPTS)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B15M%3D","line":678,"in_reply_to":"AAAAM3%2F%2B2CE%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"}],"quantum/common/constants.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":53,"context_line":"TYPE_LIST \u003d \"list\""},{"line_number":54,"context_line":"TYPE_DICT \u003d \"dict\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"AGENT_TYPE_DHCP_AGENT \u003d \u0027DHCP agent\u0027"},{"line_number":57,"context_line":"AGENT_TYPE_OVS_AGENT \u003d \u0027Open vSwitch agent\u0027"},{"line_number":58,"context_line":"AGENT_TYPE_LINUXBRIDGE_AGENT \u003d \u0027Linux bridge agent\u0027"},{"line_number":59,"context_line":"AGENT_TYPE_L3_AGENT \u003d \u0027L3 agent\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B2B4%3D","line":56,"updated":"2013-02-17 15:36:52.000000000","message":"Why not: AGENT_TYPE_DHCP\nThe AGENT at the end is unnecesary in my opinion. I think that the prefix in the name is sufficient","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"TYPE_LIST \u003d \"list\""},{"line_number":54,"context_line":"TYPE_DICT \u003d \"dict\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"AGENT_TYPE_DHCP_AGENT \u003d \u0027DHCP agent\u0027"},{"line_number":57,"context_line":"AGENT_TYPE_OVS_AGENT \u003d \u0027Open vSwitch agent\u0027"},{"line_number":58,"context_line":"AGENT_TYPE_LINUXBRIDGE_AGENT \u003d \u0027Linux bridge agent\u0027"},{"line_number":59,"context_line":"AGENT_TYPE_L3_AGENT \u003d \u0027L3 agent\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B15I%3D","line":56,"in_reply_to":"AAAAM3%2F%2B2B4%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"}],"quantum/db/agents_db.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"70b51335008ceaf9ab37ef02abbcfc5e7de55b15","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _get_agent(self, context, id):"},{"line_number":66,"context_line":"        try:"},{"line_number":67,"context_line":"            com \u003d self._get_by_id(context, Agent, id)"},{"line_number":68,"context_line":"        except exc.NoResultFound:"},{"line_number":69,"context_line":"            raise ext_agent.AgentNotFound(id\u003did)"},{"line_number":70,"context_line":"        return com"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FLUg%3D","line":67,"updated":"2013-02-04 19:20:49.000000000","message":"agent?","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _get_agent(self, context, id):"},{"line_number":66,"context_line":"        try:"},{"line_number":67,"context_line":"            com \u003d self._get_by_id(context, Agent, id)"},{"line_number":68,"context_line":"        except exc.NoResultFound:"},{"line_number":69,"context_line":"            raise ext_agent.AgentNotFound(id\u003did)"},{"line_number":70,"context_line":"        return com"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FIj0%3D","line":67,"in_reply_to":"AAAAM3%2F%2FLUg%3D","updated":"2013-02-06 01:06:16.000000000","message":"Done","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"70b51335008ceaf9ab37ef02abbcfc5e7de55b15","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            com \u003d self._get_by_id(context, Agent, id)"},{"line_number":68,"context_line":"        except exc.NoResultFound:"},{"line_number":69,"context_line":"            raise ext_agent.AgentNotFound(id\u003did)"},{"line_number":70,"context_line":"        return com"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _is_agent_down(self, heart_beat_time_str):"},{"line_number":73,"context_line":"        return timeutils.is_older_than(heart_beat_time_str,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FLUc%3D","line":70,"updated":"2013-02-04 19:20:49.000000000","message":"agent?","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            com \u003d self._get_by_id(context, Agent, id)"},{"line_number":68,"context_line":"        except exc.NoResultFound:"},{"line_number":69,"context_line":"            raise ext_agent.AgentNotFound(id\u003did)"},{"line_number":70,"context_line":"        return com"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _is_agent_down(self, heart_beat_time_str):"},{"line_number":73,"context_line":"        return timeutils.is_older_than(heart_beat_time_str,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FIjw%3D","line":70,"in_reply_to":"AAAAM3%2F%2FLUc%3D","updated":"2013-02-06 01:06:16.000000000","message":"Done","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"70b51335008ceaf9ab37ef02abbcfc5e7de55b15","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            if key not in [\u0027alive\u0027, \u0027configurations\u0027]:"},{"line_number":82,"context_line":"                res[key] \u003d agent[key]"},{"line_number":83,"context_line":"        res[\u0027alive\u0027] \u003d not self._is_agent_down(res[\u0027heartbeat_timestamp\u0027])"},{"line_number":84,"context_line":"        res[\u0027configurations\u0027] \u003d self.com_id_2_configs_dict[res[\u0027id\u0027]]"},{"line_number":85,"context_line":"        return self._fields(res, fields)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def delete_agent(self, context, id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FLUM%3D","line":84,"updated":"2013-02-04 19:20:49.000000000","message":"Is this method implemented? \ncom_id_2_configs_dict should be agent_id_2_configs_dict","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            if key not in [\u0027alive\u0027, \u0027configurations\u0027]:"},{"line_number":82,"context_line":"                res[key] \u003d agent[key]"},{"line_number":83,"context_line":"        res[\u0027alive\u0027] \u003d not self._is_agent_down(res[\u0027heartbeat_timestamp\u0027])"},{"line_number":84,"context_line":"        res[\u0027configurations\u0027] \u003d self.com_id_2_configs_dict[res[\u0027id\u0027]]"},{"line_number":85,"context_line":"        return self._fields(res, fields)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def delete_agent(self, context, id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FIjo%3D","line":84,"in_reply_to":"AAAAM3%2F%2FLUM%3D","updated":"2013-02-06 01:06:16.000000000","message":"Done","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"70b51335008ceaf9ab37ef02abbcfc5e7de55b15","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            if key not in [\u0027admin_state_up\u0027, \u0027description\u0027]:"},{"line_number":96,"context_line":"                raise exceptions.BadRequest("},{"line_number":97,"context_line":"                    resource\u003d\u0027agent\u0027,"},{"line_number":98,"context_line":"                    msg\u003d_(\"Update \u0027%s\u0027 is not allowed!\") % key)"},{"line_number":99,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":100,"context_line":"            agent \u003d self._get_agent(context, id)"},{"line_number":101,"context_line":"            agent.update(agent_data)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FLVA%3D","line":98,"updated":"2013-02-04 19:20:49.000000000","message":"nit: ! is needed?","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            if key not in [\u0027admin_state_up\u0027, \u0027description\u0027]:"},{"line_number":96,"context_line":"                raise exceptions.BadRequest("},{"line_number":97,"context_line":"                    resource\u003d\u0027agent\u0027,"},{"line_number":98,"context_line":"                    msg\u003d_(\"Update \u0027%s\u0027 is not allowed!\") % key)"},{"line_number":99,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":100,"context_line":"            agent \u003d self._get_agent(context, id)"},{"line_number":101,"context_line":"            agent.update(agent_data)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FIjk%3D","line":98,"in_reply_to":"AAAAM3%2F%2FLVA%3D","updated":"2013-02-06 01:06:16.000000000","message":"Done","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"70b51335008ceaf9ab37ef02abbcfc5e7de55b15","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                res[key] \u003d agent[key]"},{"line_number":133,"context_line":"            configurations_dict \u003d agent.get(\u0027configurations\u0027, {})"},{"line_number":134,"context_line":"            try:"},{"line_number":135,"context_line":"                com_db \u003d self._get_agent_by_type_and_host("},{"line_number":136,"context_line":"                    context, agent[\u0027type\u0027], agent[\u0027host\u0027])"},{"line_number":137,"context_line":"                res[\u0027heartbeat_timestamp\u0027] \u003d timeutils.utcnow()"},{"line_number":138,"context_line":"                com_db.update(res)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FLUo%3D","line":135,"updated":"2013-02-04 19:20:49.000000000","message":"agent_db?","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                res[key] \u003d agent[key]"},{"line_number":133,"context_line":"            configurations_dict \u003d agent.get(\u0027configurations\u0027, {})"},{"line_number":134,"context_line":"            try:"},{"line_number":135,"context_line":"                com_db \u003d self._get_agent_by_type_and_host("},{"line_number":136,"context_line":"                    context, agent[\u0027type\u0027], agent[\u0027host\u0027])"},{"line_number":137,"context_line":"                res[\u0027heartbeat_timestamp\u0027] \u003d timeutils.utcnow()"},{"line_number":138,"context_line":"                com_db.update(res)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FIjc%3D","line":135,"in_reply_to":"AAAAM3%2F%2FLUo%3D","updated":"2013-02-06 01:06:16.000000000","message":"Done","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \"\"\"Represents agents running in quantum deployments\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    # L3 agent, DHCP agent, OVS agent, LB agent, quanum server"},{"line_number":40,"context_line":"    type \u003d sa.Column(sa.Enum(constants.AGENT_TYPE_DHCP_AGENT,"},{"line_number":41,"context_line":"                             constants.AGENT_TYPE_L3_AGENT,"},{"line_number":42,"context_line":"                             constants.AGENT_TYPE_LINUXBRIDGE_AGENT,"},{"line_number":43,"context_line":"                             constants.AGENT_TYPE_OVS_AGENT,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FINI%3D","line":40,"updated":"2013-02-06 08:38:03.000000000","message":"This isn\u0027t future extensible.\nDoesn\u0027t string work?","commit_id":"d3852013f81bbea89247671c4dfa2a30ed407c32"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \"\"\"Represents agents running in quantum deployments\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    # L3 agent, DHCP agent, OVS agent, LB agent, quanum server"},{"line_number":40,"context_line":"    type \u003d sa.Column(sa.Enum(constants.AGENT_TYPE_DHCP_AGENT,"},{"line_number":41,"context_line":"                             constants.AGENT_TYPE_L3_AGENT,"},{"line_number":42,"context_line":"                             constants.AGENT_TYPE_LINUXBRIDGE_AGENT,"},{"line_number":43,"context_line":"                             constants.AGENT_TYPE_OVS_AGENT,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FIIQ%3D","line":40,"in_reply_to":"AAAAM3%2F%2FINI%3D","updated":"2013-02-06 10:14:12.000000000","message":"We have to balance flexibility and code cleaning. I cannot expect future, so I ( and salvatore) prefer to use the enum.","commit_id":"d3852013f81bbea89247671c4dfa2a30ed407c32"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":152,"context_line":"                    context, agent[\u0027type\u0027], agent[\u0027host\u0027])"},{"line_number":153,"context_line":"                res[\u0027heartbeat_timestamp\u0027] \u003d timeutils.utcnow()"},{"line_number":154,"context_line":"                if agent.get(\u0027start_flag\u0027):"},{"line_number":155,"context_line":"                    res[\u0027started_at\u0027] \u003d timeutils.utcnow()"},{"line_number":156,"context_line":"                agent_db.update(res)"},{"line_number":157,"context_line":"            except ext_agent.AgentNotFoundByTypeHost:"},{"line_number":158,"context_line":"                res[\u0027created_at\u0027] \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FINE%3D","line":155,"updated":"2013-02-06 08:38:03.000000000","message":"call utcnow() only once.","commit_id":"d3852013f81bbea89247671c4dfa2a30ed407c32"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                    context, agent[\u0027type\u0027], agent[\u0027host\u0027])"},{"line_number":153,"context_line":"                res[\u0027heartbeat_timestamp\u0027] \u003d timeutils.utcnow()"},{"line_number":154,"context_line":"                if agent.get(\u0027start_flag\u0027):"},{"line_number":155,"context_line":"                    res[\u0027started_at\u0027] \u003d timeutils.utcnow()"},{"line_number":156,"context_line":"                agent_db.update(res)"},{"line_number":157,"context_line":"            except ext_agent.AgentNotFoundByTypeHost:"},{"line_number":158,"context_line":"                res[\u0027created_at\u0027] \u003d timeutils.utcnow()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FIIU%3D","line":155,"in_reply_to":"AAAAM3%2F%2FINE%3D","updated":"2013-02-06 10:14:12.000000000","message":"Done","commit_id":"d3852013f81bbea89247671c4dfa2a30ed407c32"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def report_state(self, context, **kwargs):"},{"line_number":172,"context_line":"        \"\"\"Report state from agent to server. \"\"\""},{"line_number":173,"context_line":"        agent_state \u003d kwargs.get(\u0027agent_state\u0027)[\u0027agent_state\u0027]"},{"line_number":174,"context_line":"        plugin \u003d manager.QuantumManager.get_plugin()"},{"line_number":175,"context_line":"        plugin.create_or_update_agent(context, agent_state)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FIM8%3D","line":173,"updated":"2013-02-06 08:38:03.000000000","message":"Is there any reason to use get?\nNone[\u0027agent_state\u0027] results in TypeError.","commit_id":"d3852013f81bbea89247671c4dfa2a30ed407c32"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def report_state(self, context, **kwargs):"},{"line_number":172,"context_line":"        \"\"\"Report state from agent to server. \"\"\""},{"line_number":173,"context_line":"        agent_state \u003d kwargs.get(\u0027agent_state\u0027)[\u0027agent_state\u0027]"},{"line_number":174,"context_line":"        plugin \u003d manager.QuantumManager.get_plugin()"},{"line_number":175,"context_line":"        plugin.create_or_update_agent(context, agent_state)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FIIY%3D","line":173,"in_reply_to":"AAAAM3%2F%2FIM8%3D","updated":"2013-02-06 10:14:12.000000000","message":"Done","commit_id":"d3852013f81bbea89247671c4dfa2a30ed407c32"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \"\"\"Represents agents running in quantum deployments\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    # L3 agent, DHCP agent, OVS agent, LB agent, quanum server"},{"line_number":40,"context_line":"    type \u003d sa.Column(sa.Enum(constants.AGENT_TYPE_DHCP_AGENT,"},{"line_number":41,"context_line":"                             constants.AGENT_TYPE_L3_AGENT,"},{"line_number":42,"context_line":"                             constants.AGENT_TYPE_LINUXBRIDGE_AGENT,"},{"line_number":43,"context_line":"                             constants.AGENT_TYPE_OVS_AGENT,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2fY%3D","line":40,"updated":"2013-02-17 01:54:31.000000000","message":"I don\u0027t like the column name type.  It overwrites a python builtin.  Maybe change this to service?","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \"\"\"Represents agents running in quantum deployments\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    # L3 agent, DHCP agent, OVS agent, LB agent, quanum server"},{"line_number":40,"context_line":"    type \u003d sa.Column(sa.Enum(constants.AGENT_TYPE_DHCP_AGENT,"},{"line_number":41,"context_line":"                             constants.AGENT_TYPE_L3_AGENT,"},{"line_number":42,"context_line":"                             constants.AGENT_TYPE_LINUXBRIDGE_AGENT,"},{"line_number":43,"context_line":"                             constants.AGENT_TYPE_OVS_AGENT,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2OU%3D","line":40,"in_reply_to":"AAAAM3%2F%2B2fY%3D","updated":"2013-02-17 09:41:22.000000000","message":"ok, change this into agent_type","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"                             constants.AGENT_TYPE_L3_AGENT,"},{"line_number":42,"context_line":"                             constants.AGENT_TYPE_LINUXBRIDGE_AGENT,"},{"line_number":43,"context_line":"                             constants.AGENT_TYPE_OVS_AGENT,"},{"line_number":44,"context_line":"                             name\u003d\u0027agent_type\u0027),"},{"line_number":45,"context_line":"                     nullable\u003dFalse)"},{"line_number":46,"context_line":"    binary \u003d sa.Column(sa.String(255))"},{"line_number":47,"context_line":"    # TOPIC is a fanout exchange topic"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FH%2Fo%3D","line":44,"updated":"2013-02-06 14:22:18.000000000","message":"I have a concern about using enum here. Assume some agent type is deleted from the repo. In this case do we need a padding for the deleted type to keep enum value across the change? Can SQL enum deal with such case properly? I am not sure how sqlalchemy and DB implementation work for such cases. I don\u0027t see any concern when adding a new agent type since enum just grows.\n\nIn addition, could you define types for agents of other core plugins (ryu, nec, hyper-v)?\n(Of course there are no need to adding agent extension support for these plugins in your patch.)","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                             constants.AGENT_TYPE_L3_AGENT,"},{"line_number":42,"context_line":"                             constants.AGENT_TYPE_LINUXBRIDGE_AGENT,"},{"line_number":43,"context_line":"                             constants.AGENT_TYPE_OVS_AGENT,"},{"line_number":44,"context_line":"                             name\u003d\u0027agent_type\u0027),"},{"line_number":45,"context_line":"                     nullable\u003dFalse)"},{"line_number":46,"context_line":"    binary \u003d sa.Column(sa.String(255))"},{"line_number":47,"context_line":"    # TOPIC is a fanout exchange topic"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2OY%3D","line":44,"in_reply_to":"AAAAM3%2F%2B2fs%3D","updated":"2013-02-17 09:41:22.000000000","message":"This will need a pre loaded table, which I think is not good for operation. In addition, do we have an easy way to do it?","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"                             constants.AGENT_TYPE_L3_AGENT,"},{"line_number":42,"context_line":"                             constants.AGENT_TYPE_LINUXBRIDGE_AGENT,"},{"line_number":43,"context_line":"                             constants.AGENT_TYPE_OVS_AGENT,"},{"line_number":44,"context_line":"                             name\u003d\u0027agent_type\u0027),"},{"line_number":45,"context_line":"                     nullable\u003dFalse)"},{"line_number":46,"context_line":"    binary \u003d sa.Column(sa.String(255))"},{"line_number":47,"context_line":"    # TOPIC is a fanout exchange topic"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2fs%3D","line":44,"in_reply_to":"AAAAM3%2F%2FH%2Fo%3D","updated":"2013-02-17 01:54:31.000000000","message":"Why not have a table of allowed agent types and use a foreign key constraint to ensure the type exists?","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"    # description is note for admin user"},{"line_number":59,"context_line":"    description \u003d sa.Column(sa.String(255))"},{"line_number":60,"context_line":"    # configurations: a json dict string, I think 4096 is enough"},{"line_number":61,"context_line":"    configurations \u003d sa.Column(sa.String(4096))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class AgentDbMixin(ext_agent.AgentPluginBase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2ec%3D","line":61,"updated":"2013-02-17 01:54:31.000000000","message":"I\u0027m not a fan of blob fields.  It denormalizes the data and makes it harder to upgrade.  In Havana, I think we should take a look at SQLAlchemy\u0027s table inheritance and replace this field.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"unresolved":false,"context_lines":[{"line_number":59,"context_line":"    description \u003d sa.Column(sa.String(255))"},{"line_number":60,"context_line":"    # configurations: a json dict string, I think 4096 is enough"},{"line_number":61,"context_line":"    configurations \u003d sa.Column(sa.String(4096))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class AgentDbMixin(ext_agent.AgentPluginBase):"},{"line_number":65,"context_line":"    \"\"\"Mixin class to add agent extension to db_plugin_base_v2.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B7Og%3D","line":62,"updated":"2013-02-14 06:28:25.000000000","message":"Don\u0027t we need db migration for this?","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":59,"context_line":"    description \u003d sa.Column(sa.String(255))"},{"line_number":60,"context_line":"    # configurations: a json dict string, I think 4096 is enough"},{"line_number":61,"context_line":"    configurations \u003d sa.Column(sa.String(4096))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class AgentDbMixin(ext_agent.AgentPluginBase):"},{"line_number":65,"context_line":"    \"\"\"Mixin class to add agent extension to db_plugin_base_v2.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B168%3D","line":62,"in_reply_to":"AAAAM3%2F%2B2OI%3D","updated":"2013-02-17 18:48:01.000000000","message":"We were talking about a migration to create this table.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    description \u003d sa.Column(sa.String(255))"},{"line_number":60,"context_line":"    # configurations: a json dict string, I think 4096 is enough"},{"line_number":61,"context_line":"    configurations \u003d sa.Column(sa.String(4096))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class AgentDbMixin(ext_agent.AgentPluginBase):"},{"line_number":65,"context_line":"    \"\"\"Mixin class to add agent extension to db_plugin_base_v2.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2OI%3D","line":62,"in_reply_to":"AAAAM3%2F%2B2fU%3D","updated":"2013-02-17 09:41:22.000000000","message":"This column needs not migration, it will be generated by each heart beat report.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":59,"context_line":"    description \u003d sa.Column(sa.String(255))"},{"line_number":60,"context_line":"    # configurations: a json dict string, I think 4096 is enough"},{"line_number":61,"context_line":"    configurations \u003d sa.Column(sa.String(4096))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class AgentDbMixin(ext_agent.AgentPluginBase):"},{"line_number":65,"context_line":"    \"\"\"Mixin class to add agent extension to db_plugin_base_v2.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2fU%3D","line":62,"in_reply_to":"AAAAM3%2F%2B7Og%3D","updated":"2013-02-17 01:54:31.000000000","message":"@Sumit: Yes. A migration is needed.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":64,"context_line":"class AgentDbMixin(ext_agent.AgentPluginBase):"},{"line_number":65,"context_line":"    \"\"\"Mixin class to add agent extension to db_plugin_base_v2.\"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    cfg.CONF.register_opt("},{"line_number":68,"context_line":"        cfg.IntOpt(\u0027agent_down_time\u0027, default\u003d5,"},{"line_number":69,"context_line":"                   help\u003d_(\"Seconds to regard the agent is down.\")))"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2fQ%3D","line":67,"updated":"2013-02-17 01:54:31.000000000","message":"This does not make sense here.  Nothing is stored on the class when you register the option here.  The option is registered when python loads the file.  You can include this at the top of the file as normal.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":64,"context_line":"class AgentDbMixin(ext_agent.AgentPluginBase):"},{"line_number":65,"context_line":"    \"\"\"Mixin class to add agent extension to db_plugin_base_v2.\"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    cfg.CONF.register_opt("},{"line_number":68,"context_line":"        cfg.IntOpt(\u0027agent_down_time\u0027, default\u003d5,"},{"line_number":69,"context_line":"                   help\u003d_(\"Seconds to regard the agent is down.\")))"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2OE%3D","line":67,"in_reply_to":"AAAAM3%2F%2B2fQ%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def _make_agent_dict(self, agent, fields\u003dNone):"},{"line_number":83,"context_line":"        attr \u003d ext_agent.RESOURCE_ATTRIBUTE_MAP.get("},{"line_number":84,"context_line":"            ext_agent.RESOURCE_NAME + \u0027s\u0027)"},{"line_number":85,"context_line":"        res \u003d {}"},{"line_number":86,"context_line":"        for key in attr.keys():"},{"line_number":87,"context_line":"            if key not in [\u0027alive\u0027, \u0027configurations\u0027]:"},{"line_number":88,"context_line":"                res[key] \u003d agent[key]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2fM%3D","line":85,"updated":"2013-02-17 01:54:31.000000000","message":"Replace lines 85-88\n\nres \u003d dict((k, agent[k]) for k, v in attr if k not in [\u0027alive\u0027, \u0027configurations\u0027])","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def _make_agent_dict(self, agent, fields\u003dNone):"},{"line_number":83,"context_line":"        attr \u003d ext_agent.RESOURCE_ATTRIBUTE_MAP.get("},{"line_number":84,"context_line":"            ext_agent.RESOURCE_NAME + \u0027s\u0027)"},{"line_number":85,"context_line":"        res \u003d {}"},{"line_number":86,"context_line":"        for key in attr.keys():"},{"line_number":87,"context_line":"            if key not in [\u0027alive\u0027, \u0027configurations\u0027]:"},{"line_number":88,"context_line":"                res[key] \u003d agent[key]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2N8%3D","line":85,"in_reply_to":"AAAAM3%2F%2B2fM%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":92,"context_line":"        except Exception:"},{"line_number":93,"context_line":"            msg \u003d _(\u0027Configurations for agent (%(type)s on host %(host)s\u0027"},{"line_number":94,"context_line":"                    \u0027 are invalid.\u0027)"},{"line_number":95,"context_line":"            LOG.debug(msg, {\u0027type\u0027: res[\u0027type\u0027],"},{"line_number":96,"context_line":"                            \u0027host\u0027: res[\u0027host\u0027]})"},{"line_number":97,"context_line":"            res[\u0027configurations\u0027] \u003d {}"},{"line_number":98,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B6TA%3D","line":95,"updated":"2013-02-14 18:22:06.000000000","message":"should be warn or error ?","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        except Exception:"},{"line_number":93,"context_line":"            msg \u003d _(\u0027Configurations for agent (%(type)s on host %(host)s\u0027"},{"line_number":94,"context_line":"                    \u0027 are invalid.\u0027)"},{"line_number":95,"context_line":"            LOG.debug(msg, {\u0027type\u0027: res[\u0027type\u0027],"},{"line_number":96,"context_line":"                            \u0027host\u0027: res[\u0027host\u0027]})"},{"line_number":97,"context_line":"            res[\u0027configurations\u0027] \u003d {}"},{"line_number":98,"context_line":"        return self._fields(res, fields)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2N4%3D","line":95,"in_reply_to":"AAAAM3%2F%2B6TA%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def update_agent(self, context, id, agent):"},{"line_number":106,"context_line":"        agent_data \u003d agent[\u0027agent\u0027]"},{"line_number":107,"context_line":"        for key in agent_data:"},{"line_number":108,"context_line":"            if key not in [\u0027admin_state_up\u0027, \u0027description\u0027]:"},{"line_number":109,"context_line":"                raise exceptions.BadRequest("},{"line_number":110,"context_line":"                    resource\u003d\u0027agent\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2ew%3D","line":107,"updated":"2013-02-17 01:54:31.000000000","message":"if set([\u0027admin_state_up\u0027, \u0027description\u0027]) - set(agent_data.keys()):\n    raise exceptions.BadRequest(\n        resource\u003d\u0027agent\u0027,\n        msg\u003d_(\"Update \u0027%s\u0027 is not allowed\") % key\n    )","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def update_agent(self, context, id, agent):"},{"line_number":106,"context_line":"        agent_data \u003d agent[\u0027agent\u0027]"},{"line_number":107,"context_line":"        for key in agent_data:"},{"line_number":108,"context_line":"            if key not in [\u0027admin_state_up\u0027, \u0027description\u0027]:"},{"line_number":109,"context_line":"                raise exceptions.BadRequest("},{"line_number":110,"context_line":"                    resource\u003d\u0027agent\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2N0%3D","line":107,"in_reply_to":"AAAAM3%2F%2B2ew%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":140,"context_line":"        \"\"\"Create or update agent according to report.\"\"\""},{"line_number":141,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":142,"context_line":"            res_keys \u003d [\u0027type\u0027, \u0027binary\u0027, \u0027host\u0027, \u0027topic\u0027]"},{"line_number":143,"context_line":"            res \u003d {}"},{"line_number":144,"context_line":"            for key in res_keys:"},{"line_number":145,"context_line":"                res[key] \u003d agent[key]"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2es%3D","line":143,"updated":"2013-02-17 01:54:31.000000000","message":"res \u003d dict((k, agent[k]) for k in res_keys)","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        \"\"\"Create or update agent according to report.\"\"\""},{"line_number":141,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":142,"context_line":"            res_keys \u003d [\u0027type\u0027, \u0027binary\u0027, \u0027host\u0027, \u0027topic\u0027]"},{"line_number":143,"context_line":"            res \u003d {}"},{"line_number":144,"context_line":"            for key in res_keys:"},{"line_number":145,"context_line":"                res[key] \u003d agent[key]"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Nw%3D","line":143,"in_reply_to":"AAAAM3%2F%2B2es%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":159,"context_line":"                res[\u0027started_at\u0027] \u003d current_time"},{"line_number":160,"context_line":"                res[\u0027heartbeat_timestamp\u0027] \u003d current_time"},{"line_number":161,"context_line":"                res[\u0027admin_state_up\u0027] \u003d True"},{"line_number":162,"context_line":"                res[\u0027id\u0027] \u003d uuidutils.generate_uuid()"},{"line_number":163,"context_line":"                agent_db \u003d Agent(**res)"},{"line_number":164,"context_line":"                context.session.add(agent_db)"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2eo%3D","line":162,"updated":"2013-02-17 01:54:31.000000000","message":"id is generated by default.  You should not need to declare it.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                res[\u0027started_at\u0027] \u003d current_time"},{"line_number":160,"context_line":"                res[\u0027heartbeat_timestamp\u0027] \u003d current_time"},{"line_number":161,"context_line":"                res[\u0027admin_state_up\u0027] \u003d True"},{"line_number":162,"context_line":"                res[\u0027id\u0027] \u003d uuidutils.generate_uuid()"},{"line_number":163,"context_line":"                agent_db \u003d Agent(**res)"},{"line_number":164,"context_line":"                context.session.add(agent_db)"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Ns%3D","line":162,"in_reply_to":"AAAAM3%2F%2B2eo%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"               help\u003d_(\"Seconds to regard the agent is down.\")))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class Agent(model_base.BASEV2, models_v2.HasId):"},{"line_number":39,"context_line":"    \"\"\"Represents agents running in quantum deployments\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    # L3 agent, DHCP agent, OVS agent, LinuxBridge"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B2Bw%3D","line":38,"updated":"2013-02-17 15:36:52.000000000","message":"Do we need a migration script to create the new table?","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":35,"context_line":"               help\u003d_(\"Seconds to regard the agent is down.\")))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class Agent(model_base.BASEV2, models_v2.HasId):"},{"line_number":39,"context_line":"    \"\"\"Represents agents running in quantum deployments\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    # L3 agent, DHCP agent, OVS agent, LinuxBridge"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B15E%3D","line":38,"in_reply_to":"AAAAM3%2F%2B17I%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"               help\u003d_(\"Seconds to regard the agent is down.\")))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class Agent(model_base.BASEV2, models_v2.HasId):"},{"line_number":39,"context_line":"    \"\"\"Represents agents running in quantum deployments\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    # L3 agent, DHCP agent, OVS agent, LinuxBridge"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B17I%3D","line":38,"in_reply_to":"AAAAM3%2F%2B2Bw%3D","updated":"2013-02-17 19:01:34.000000000","message":"Yes.  I made this comment in PS#5 too.","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f9e611c7d227603d5d00316145a77558500a82d0","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            res[\u0027configurations\u0027] \u003d jsonutils.loads(agent[\u0027configurations\u0027])"},{"line_number":84,"context_line":"        except Exception:"},{"line_number":85,"context_line":"            msg \u003d _(\u0027Configurations for agent (%(agent_type)s on host %(host)s\u0027"},{"line_number":86,"context_line":"                    \u0027 are invalid.\u0027)"},{"line_number":87,"context_line":"            LOG.warn(msg, {\u0027agent_type\u0027: res[\u0027agent_type\u0027],"},{"line_number":88,"context_line":"                           \u0027host\u0027: res[\u0027host\u0027]})"},{"line_number":89,"context_line":"            res[\u0027configurations\u0027] \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B1n4%3D","line":86,"updated":"2013-02-18 02:42:25.000000000","message":"a redundant \u0027(\u0027 before \u0027%(agent_type)s\u0027","commit_id":"d305b4196b0625b4045d957a630220014620a1f2"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":"            res[\u0027configurations\u0027] \u003d jsonutils.loads(agent[\u0027configurations\u0027])"},{"line_number":84,"context_line":"        except Exception:"},{"line_number":85,"context_line":"            msg \u003d _(\u0027Configurations for agent (%(agent_type)s on host %(host)s\u0027"},{"line_number":86,"context_line":"                    \u0027 are invalid.\u0027)"},{"line_number":87,"context_line":"            LOG.warn(msg, {\u0027agent_type\u0027: res[\u0027agent_type\u0027],"},{"line_number":88,"context_line":"                           \u0027host\u0027: res[\u0027host\u0027]})"},{"line_number":89,"context_line":"            res[\u0027configurations\u0027] \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B1fY%3D","line":86,"in_reply_to":"AAAAM3%2F%2B1n4%3D","updated":"2013-02-18 03:34:38.000000000","message":"Done","commit_id":"d305b4196b0625b4045d957a630220014620a1f2"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f9e611c7d227603d5d00316145a77558500a82d0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def update_agent(self, context, id, agent):"},{"line_number":98,"context_line":"        agent_data \u003d agent[\u0027agent\u0027]"},{"line_number":99,"context_line":"        invalid_keys \u003d set(agent_data.keys()) - set([\u0027admin_state_up\u0027,"},{"line_number":100,"context_line":"                                                     \u0027description\u0027])"},{"line_number":101,"context_line":"        if invalid_keys:"},{"line_number":102,"context_line":"            raise exceptions.BadRequest("},{"line_number":103,"context_line":"                resource\u003d\u0027agent\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B1ow%3D","line":100,"updated":"2013-02-18 02:42:25.000000000","message":"This already checked by api layer. We set allow_put \u003d False","commit_id":"d305b4196b0625b4045d957a630220014620a1f2"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def update_agent(self, context, id, agent):"},{"line_number":98,"context_line":"        agent_data \u003d agent[\u0027agent\u0027]"},{"line_number":99,"context_line":"        invalid_keys \u003d set(agent_data.keys()) - set([\u0027admin_state_up\u0027,"},{"line_number":100,"context_line":"                                                     \u0027description\u0027])"},{"line_number":101,"context_line":"        if invalid_keys:"},{"line_number":102,"context_line":"            raise exceptions.BadRequest("},{"line_number":103,"context_line":"                resource\u003d\u0027agent\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B1d8%3D","line":100,"in_reply_to":"AAAAM3%2F%2B1eU%3D","updated":"2013-02-18 03:41:21.000000000","message":"Done","commit_id":"d305b4196b0625b4045d957a630220014620a1f2"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f9e611c7d227603d5d00316145a77558500a82d0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def update_agent(self, context, id, agent):"},{"line_number":98,"context_line":"        agent_data \u003d agent[\u0027agent\u0027]"},{"line_number":99,"context_line":"        invalid_keys \u003d set(agent_data.keys()) - set([\u0027admin_state_up\u0027,"},{"line_number":100,"context_line":"                                                     \u0027description\u0027])"},{"line_number":101,"context_line":"        if invalid_keys:"},{"line_number":102,"context_line":"            raise exceptions.BadRequest("},{"line_number":103,"context_line":"                resource\u003d\u0027agent\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B1eU%3D","line":100,"in_reply_to":"AAAAM3%2F%2B1fU%3D","updated":"2013-02-18 03:38:09.000000000","message":"I see, This patch fix it https://review.openstack.org/#/c/21849/","commit_id":"d305b4196b0625b4045d957a630220014620a1f2"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def update_agent(self, context, id, agent):"},{"line_number":98,"context_line":"        agent_data \u003d agent[\u0027agent\u0027]"},{"line_number":99,"context_line":"        invalid_keys \u003d set(agent_data.keys()) - set([\u0027admin_state_up\u0027,"},{"line_number":100,"context_line":"                                                     \u0027description\u0027])"},{"line_number":101,"context_line":"        if invalid_keys:"},{"line_number":102,"context_line":"            raise exceptions.BadRequest("},{"line_number":103,"context_line":"                resource\u003d\u0027agent\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B1fU%3D","line":100,"in_reply_to":"AAAAM3%2F%2B1ow%3D","updated":"2013-02-18 03:34:38.000000000","message":"there could be something other than attributes in attribute map get in.","commit_id":"d305b4196b0625b4045d957a630220014620a1f2"}],"quantum/extensions/agent.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"70b51335008ceaf9ab37ef02abbcfc5e7de55b15","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    message \u003d _(\"Agent %(id)s does not exist\")"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class AgentNotFoundByType_Host(exceptions.NotFound):"},{"line_number":62,"context_line":"    message \u003d _(\"Agent with type\u003d%(type)s and host\u003d%(host)s \""},{"line_number":63,"context_line":"                \"does not exist\")"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FLU8%3D","line":61,"updated":"2013-02-04 19:20:49.000000000","message":"_Host should be just Host","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    message \u003d _(\"Agent %(id)s does not exist\")"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class AgentNotFoundByType_Host(exceptions.NotFound):"},{"line_number":62,"context_line":"    message \u003d _(\"Agent with type\u003d%(type)s and host\u003d%(host)s \""},{"line_number":63,"context_line":"                \"does not exist\")"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FIjU%3D","line":61,"in_reply_to":"AAAAM3%2F%2FLU8%3D","updated":"2013-02-06 01:06:16.000000000","message":"Done","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"70b51335008ceaf9ab37ef02abbcfc5e7de55b15","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                \"does not exist\")"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class MultipleAgentFoundByType_Host(exceptions.Conflict):"},{"line_number":67,"context_line":"    message \u003d _(\"Multiple Agents with type\u003d%(type)s and host\u003d%(host)s \""},{"line_number":68,"context_line":"                \"exist\")"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FLU4%3D","line":66,"updated":"2013-02-04 19:20:49.000000000","message":"ditto","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                \"does not exist\")"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class MultipleAgentFoundByType_Host(exceptions.Conflict):"},{"line_number":67,"context_line":"    message \u003d _(\"Multiple Agents with type\u003d%(type)s and host\u003d%(host)s \""},{"line_number":68,"context_line":"                \"exist\")"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FIjQ%3D","line":66,"in_reply_to":"AAAAM3%2F%2FLU4%3D","updated":"2013-02-06 01:06:16.000000000","message":"Done","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"70b51335008ceaf9ab37ef02abbcfc5e7de55b15","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @classmethod"},{"line_number":87,"context_line":"    def get_namespace(cls):"},{"line_number":88,"context_line":"        # todo"},{"line_number":89,"context_line":"        return \"http://docs.openstack.org/ext/agent/api/v2.0\""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FLVI%3D","line":88,"updated":"2013-02-04 19:20:49.000000000","message":"nit:What is todo?","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @classmethod"},{"line_number":87,"context_line":"    def get_namespace(cls):"},{"line_number":88,"context_line":"        # todo"},{"line_number":89,"context_line":"        return \"http://docs.openstack.org/ext/agent/api/v2.0\""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FIjI%3D","line":88,"in_reply_to":"AAAAM3%2F%2FLVI%3D","updated":"2013-02-06 01:06:16.000000000","message":"Done","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"70b51335008ceaf9ab37ef02abbcfc5e7de55b15","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    @classmethod"},{"line_number":92,"context_line":"    def get_updated(cls):"},{"line_number":93,"context_line":"        return \"2012-12-15T10:00:00-00:00\""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @classmethod"},{"line_number":96,"context_line":"    def get_resources(cls):"},{"line_number":97,"context_line":"        \"\"\" Returns Ext Resources \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FLVE%3D","line":94,"updated":"2013-02-04 19:20:49.000000000","message":"nit: should be 2013?","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    @classmethod"},{"line_number":92,"context_line":"    def get_updated(cls):"},{"line_number":93,"context_line":"        return \"2012-12-15T10:00:00-00:00\""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @classmethod"},{"line_number":96,"context_line":"    def get_resources(cls):"},{"line_number":97,"context_line":"        \"\"\" Returns Ext Resources \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FIjE%3D","line":94,"in_reply_to":"AAAAM3%2F%2FLVE%3D","updated":"2013-02-06 01:06:16.000000000","message":"Done","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":128,"context_line":"    @abstractmethod"},{"line_number":129,"context_line":"    def delete_agent(self, context, id):"},{"line_number":130,"context_line":"        \"\"\"Delete agent."},{"line_number":131,"context_line":"        agents register themselves on reporting state."},{"line_number":132,"context_line":"        But if a agent does not report its status"},{"line_number":133,"context_line":"        for a long time (for example, it is dead for ever. ),"},{"line_number":134,"context_line":"        admin can remove it. Agents must be disabled before"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FJk4%3D","line":131,"updated":"2013-02-05 16:14:56.000000000","message":"New line after 130 and start with A","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    @abstractmethod"},{"line_number":129,"context_line":"    def delete_agent(self, context, id):"},{"line_number":130,"context_line":"        \"\"\"Delete agent."},{"line_number":131,"context_line":"        agents register themselves on reporting state."},{"line_number":132,"context_line":"        But if a agent does not report its status"},{"line_number":133,"context_line":"        for a long time (for example, it is dead for ever. ),"},{"line_number":134,"context_line":"        admin can remove it. Agents must be disabled before"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FIkI%3D","line":131,"in_reply_to":"AAAAM3%2F%2FJk4%3D","updated":"2013-02-06 01:04:45.000000000","message":"Done","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"# Attribute Map"},{"line_number":26,"context_line":"RESOURCE_NAME \u003d \u0027agent\u0027"},{"line_number":27,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":28,"context_line":"    RESOURCE_NAME + \"s\": {"},{"line_number":29,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":30,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":31,"context_line":"               \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FIMw%3D","line":28,"updated":"2013-02-06 08:38:03.000000000","message":"Nitpick. \u0027(single quotation) is used in all other place in this file.","commit_id":"d3852013f81bbea89247671c4dfa2a30ed407c32"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# Attribute Map"},{"line_number":26,"context_line":"RESOURCE_NAME \u003d \u0027agent\u0027"},{"line_number":27,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":28,"context_line":"    RESOURCE_NAME + \"s\": {"},{"line_number":29,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":30,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":31,"context_line":"               \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FIIM%3D","line":28,"in_reply_to":"AAAAM3%2F%2FIMw%3D","updated":"2013-02-06 10:14:12.000000000","message":"Done","commit_id":"d3852013f81bbea89247671c4dfa2a30ed407c32"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack, LLC."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FH%2Fg%3D","line":1,"updated":"2013-02-06 14:22:18.000000000","message":"2013","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack, LLC."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Ng%3D","line":1,"in_reply_to":"AAAAM3%2F%2FH%2Fg%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"# Attribute Map"},{"line_number":26,"context_line":"RESOURCE_NAME \u003d \u0027agent\u0027"},{"line_number":27,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":28,"context_line":"    RESOURCE_NAME + \u0027s\u0027: {"},{"line_number":29,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":30,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":31,"context_line":"               \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B7bw%3D","line":28,"updated":"2013-02-14 02:58:16.000000000","message":"please make sure there are appropriate doc bugs filed both for admin guide and API guide for this extension.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"# Attribute Map"},{"line_number":26,"context_line":"RESOURCE_NAME \u003d \u0027agent\u0027"},{"line_number":27,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":28,"context_line":"    RESOURCE_NAME + \u0027s\u0027: {"},{"line_number":29,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":30,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":31,"context_line":"               \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B7bY%3D","line":28,"in_reply_to":"AAAAM3%2F%2B7bw%3D","updated":"2013-02-15 14:46:33.000000000","message":"An easy way is to use \"DocImpact\" flag in the commit message and it is a recommended and official way.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":50,"context_line":"                  \u0027is_visible\u0027: True},"},{"line_number":51,"context_line":"        \u0027configurations\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":52,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":53,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: True,"},{"line_number":54,"context_line":"                        \u0027is_visible\u0027: True},"},{"line_number":55,"context_line":"    },"},{"line_number":56,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FH%2Fc%3D","line":53,"updated":"2013-02-06 14:22:18.000000000","message":"Needs to add \"validate type:string\"","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                  \u0027is_visible\u0027: True},"},{"line_number":51,"context_line":"        \u0027configurations\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":52,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":53,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: True,"},{"line_number":54,"context_line":"                        \u0027is_visible\u0027: True},"},{"line_number":55,"context_line":"    },"},{"line_number":56,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Nk%3D","line":53,"in_reply_to":"AAAAM3%2F%2FH%2Fc%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class MultipleAgentFoundByTypeHost(exceptions.Conflict):"},{"line_number":70,"context_line":"    message \u003d _(\"Multiple agents with agent_type\u003d%(agent_type)s and \""},{"line_number":71,"context_line":"                \"host\u003d%(host)s exist\")"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class Agent(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B2Bc%3D","line":71,"updated":"2013-02-17 15:36:52.000000000","message":"exist \u003d\u003e already exists","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class MultipleAgentFoundByTypeHost(exceptions.Conflict):"},{"line_number":70,"context_line":"    message \u003d _(\"Multiple agents with agent_type\u003d%(agent_type)s and \""},{"line_number":71,"context_line":"                \"host\u003d%(host)s exist\")"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class Agent(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B15A%3D","line":71,"in_reply_to":"AAAAM3%2F%2B16w%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class MultipleAgentFoundByTypeHost(exceptions.Conflict):"},{"line_number":70,"context_line":"    message \u003d _(\"Multiple agents with agent_type\u003d%(agent_type)s and \""},{"line_number":71,"context_line":"                \"host\u003d%(host)s exist\")"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class Agent(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B16w%3D","line":71,"in_reply_to":"AAAAM3%2F%2B2Bc%3D","updated":"2013-02-17 19:01:34.000000000","message":"Should we use the word found in the error description?\n\n_(\"Multiple agents with agent_type\u003d%(agent_type)s and \"host\u003d%(host)s found\")","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":118,"context_line":"class AgentPluginBase(object):"},{"line_number":119,"context_line":"    \"\"\" REST API to operate the Agent."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    All of method must be in an admin context."},{"line_number":122,"context_line":"    \"\"\""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def create_agent(self, context, agent):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B1%2BQ%3D","line":121,"updated":"2013-02-17 17:01:01.000000000","message":"Does only admin user is allowed to call Agent Extension methods?\nIf so, we needs to define policies in policy.json and check the permission in the plugin implementation.","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"class AgentPluginBase(object):"},{"line_number":119,"context_line":"    \"\"\" REST API to operate the Agent."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    All of method must be in an admin context."},{"line_number":122,"context_line":"    \"\"\""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def create_agent(self, context, agent):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B140%3D","line":121,"in_reply_to":"AAAAM3%2F%2B1%2BQ%3D","updated":"2013-02-17 20:26:40.000000000","message":"Check is done by base.controller.","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":127,"context_line":"        This operation is not allow in REST API."},{"line_number":128,"context_line":"        @raise exceptions.BadRequest:"},{"line_number":129,"context_line":"        \"\"\""},{"line_number":130,"context_line":"        raise exceptions.BadRequest"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @abstractmethod"},{"line_number":133,"context_line":"    def delete_agent(self, context, id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B1%2BY%3D","line":130,"updated":"2013-02-17 17:01:01.000000000","message":"It would be better to provide a more specific error message to describe the reason.","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        This operation is not allow in REST API."},{"line_number":128,"context_line":"        @raise exceptions.BadRequest:"},{"line_number":129,"context_line":"        \"\"\""},{"line_number":130,"context_line":"        raise exceptions.BadRequest"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @abstractmethod"},{"line_number":133,"context_line":"    def delete_agent(self, context, id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B14s%3D","line":130,"in_reply_to":"AAAAM3%2F%2B1%2BY%3D","updated":"2013-02-17 20:26:40.000000000","message":"I think we can use this exception here.","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"}],"quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"70b51335008ceaf9ab37ef02abbcfc5e7de55b15","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        self.agent_state \u003d {"},{"line_number":471,"context_line":"            \u0027binary\u0027: \u0027quantum-linuxbridge-agent\u0027,"},{"line_number":472,"context_line":"            \u0027host\u0027: cfg.CONF.host,"},{"line_number":473,"context_line":"            \u0027topic\u0027: \u0027N/A\u0027,"},{"line_number":474,"context_line":"            \u0027configurations\u0027: interface_mappings,"},{"line_number":475,"context_line":"            \u0027type\u0027: constants.AGENT_TYPE_LINUXBRIDGE_AGENT}"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FLUE%3D","line":473,"updated":"2013-02-04 19:20:49.000000000","message":"This should be constratint","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        self.agent_state \u003d {"},{"line_number":471,"context_line":"            \u0027binary\u0027: \u0027quantum-linuxbridge-agent\u0027,"},{"line_number":472,"context_line":"            \u0027host\u0027: cfg.CONF.host,"},{"line_number":473,"context_line":"            \u0027topic\u0027: \u0027N/A\u0027,"},{"line_number":474,"context_line":"            \u0027configurations\u0027: interface_mappings,"},{"line_number":475,"context_line":"            \u0027type\u0027: constants.AGENT_TYPE_LINUXBRIDGE_AGENT}"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FIjA%3D","line":473,"in_reply_to":"AAAAM3%2F%2FLUE%3D","updated":"2013-02-06 01:06:16.000000000","message":"Done","commit_id":"aa80428354f7ad21b8c6688a7a4a3c67654cf316"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def __init__(self, interface_mappings, polling_interval,"},{"line_number":463,"context_line":"                 root_helper):"},{"line_number":464,"context_line":"        self.interface_mappings \u003d interface_mappings"},{"line_number":465,"context_line":"        self.polling_interval \u003d polling_interval"},{"line_number":466,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":467,"context_line":"        self.setup_linux_bridge(interface_mappings)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2eU%3D","line":464,"updated":"2013-02-17 01:54:31.000000000","message":"I don\u0027t see the need to assign this value to the class.  It is not used outside of this method.","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def __init__(self, interface_mappings, polling_interval,"},{"line_number":463,"context_line":"                 root_helper):"},{"line_number":464,"context_line":"        self.interface_mappings \u003d interface_mappings"},{"line_number":465,"context_line":"        self.polling_interval \u003d polling_interval"},{"line_number":466,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":467,"context_line":"        self.setup_linux_bridge(interface_mappings)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2NI%3D","line":464,"in_reply_to":"AAAAM3%2F%2B2eU%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":470,"context_line":"            \u0027host\u0027: cfg.CONF.host,"},{"line_number":471,"context_line":"            \u0027topic\u0027: constants.L2_AGENT_TOPIC,"},{"line_number":472,"context_line":"            \u0027configurations\u0027: interface_mappings,"},{"line_number":473,"context_line":"            \u0027type\u0027: constants.AGENT_TYPE_LINUXBRIDGE_AGENT}"},{"line_number":474,"context_line":"        self.first_state_report \u003d True"},{"line_number":475,"context_line":"        self.setup_rpc(interface_mappings.values())"},{"line_number":476,"context_line":"        self.init_firewall()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2dk%3D","line":473,"updated":"2013-02-17 01:54:31.000000000","message":"add\n\u0027start_flag\u0027: True,","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            \u0027host\u0027: cfg.CONF.host,"},{"line_number":471,"context_line":"            \u0027topic\u0027: constants.L2_AGENT_TOPIC,"},{"line_number":472,"context_line":"            \u0027configurations\u0027: interface_mappings,"},{"line_number":473,"context_line":"            \u0027type\u0027: constants.AGENT_TYPE_LINUXBRIDGE_AGENT}"},{"line_number":474,"context_line":"        self.first_state_report \u003d True"},{"line_number":475,"context_line":"        self.setup_rpc(interface_mappings.values())"},{"line_number":476,"context_line":"        self.init_firewall()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2NM%3D","line":473,"in_reply_to":"AAAAM3%2F%2B2dk%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":471,"context_line":"            \u0027topic\u0027: constants.L2_AGENT_TOPIC,"},{"line_number":472,"context_line":"            \u0027configurations\u0027: interface_mappings,"},{"line_number":473,"context_line":"            \u0027type\u0027: constants.AGENT_TYPE_LINUXBRIDGE_AGENT}"},{"line_number":474,"context_line":"        self.first_state_report \u003d True"},{"line_number":475,"context_line":"        self.setup_rpc(interface_mappings.values())"},{"line_number":476,"context_line":"        self.init_firewall()"},{"line_number":477,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2dc%3D","line":474,"updated":"2013-02-17 01:54:31.000000000","message":"remove this instance variable","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            \u0027topic\u0027: constants.L2_AGENT_TOPIC,"},{"line_number":472,"context_line":"            \u0027configurations\u0027: interface_mappings,"},{"line_number":473,"context_line":"            \u0027type\u0027: constants.AGENT_TYPE_LINUXBRIDGE_AGENT}"},{"line_number":474,"context_line":"        self.first_state_report \u003d True"},{"line_number":475,"context_line":"        self.setup_rpc(interface_mappings.values())"},{"line_number":476,"context_line":"        self.init_firewall()"},{"line_number":477,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2NQ%3D","line":474,"in_reply_to":"AAAAM3%2F%2B2dc%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":479,"context_line":"        try:"},{"line_number":480,"context_line":"            devices \u003d len(self.br_mgr.udev_get_tap_devices())"},{"line_number":481,"context_line":"            self.agent_state.get(\u0027configurations\u0027)[\u0027devices\u0027] \u003d devices"},{"line_number":482,"context_line":"            if self.first_state_report:"},{"line_number":483,"context_line":"                self.agent_state[\u0027start_flag\u0027] \u003d True"},{"line_number":484,"context_line":"            elif \u0027start_flag\u0027 in self.agent_state:"},{"line_number":485,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2dY%3D","line":482,"updated":"2013-02-17 01:54:31.000000000","message":"drop lines 482-485","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        try:"},{"line_number":480,"context_line":"            devices \u003d len(self.br_mgr.udev_get_tap_devices())"},{"line_number":481,"context_line":"            self.agent_state.get(\u0027configurations\u0027)[\u0027devices\u0027] \u003d devices"},{"line_number":482,"context_line":"            if self.first_state_report:"},{"line_number":483,"context_line":"                self.agent_state[\u0027start_flag\u0027] \u003d True"},{"line_number":484,"context_line":"            elif \u0027start_flag\u0027 in self.agent_state:"},{"line_number":485,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2NY%3D","line":482,"in_reply_to":"AAAAM3%2F%2B2dY%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":485,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":486,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":487,"context_line":"                                        self.agent_state)"},{"line_number":488,"context_line":"            self.first_state_report \u003d False"},{"line_number":489,"context_line":"        except Exception:"},{"line_number":490,"context_line":"            LOG.exception(\"Failed reporting state!\")"},{"line_number":491,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2dU%3D","line":488,"updated":"2013-02-17 01:54:31.000000000","message":"self.agent_state.pop(\u0027start_flag\u0027)","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":486,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":487,"context_line":"                                        self.agent_state)"},{"line_number":488,"context_line":"            self.first_state_report \u003d False"},{"line_number":489,"context_line":"        except Exception:"},{"line_number":490,"context_line":"            LOG.exception(\"Failed reporting state!\")"},{"line_number":491,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2NU%3D","line":488,"in_reply_to":"AAAAM3%2F%2B2dU%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":521,"context_line":"                                                     consumers)"},{"line_number":522,"context_line":"        report_interval \u003d cfg.CONF.AGENT.report_interval"},{"line_number":523,"context_line":"        if cfg.CONF.AGENT.report_interval:"},{"line_number":524,"context_line":"            pulse \u003d loopingcall.LoopingCall(self._report_state)"},{"line_number":525,"context_line":"            pulse.start(interval\u003dreport_interval)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def setup_linux_bridge(self, interface_mappings):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2eI%3D","line":524,"updated":"2013-02-17 01:54:31.000000000","message":"pulse -\u003e heartbeat","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":521,"context_line":"                                                     consumers)"},{"line_number":522,"context_line":"        report_interval \u003d cfg.CONF.AGENT.report_interval"},{"line_number":523,"context_line":"        if cfg.CONF.AGENT.report_interval:"},{"line_number":524,"context_line":"            pulse \u003d loopingcall.LoopingCall(self._report_state)"},{"line_number":525,"context_line":"            pulse.start(interval\u003dreport_interval)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def setup_linux_bridge(self, interface_mappings):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Nc%3D","line":524,"in_reply_to":"AAAAM3%2F%2B2eI%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":483,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":484,"context_line":"                                        self.agent_state)"},{"line_number":485,"context_line":"            if \u0027start_flag\u0027 in self.agent_state:"},{"line_number":486,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":487,"context_line":"        except Exception:"},{"line_number":488,"context_line":"            LOG.exception(\"Failed reporting state!\")"},{"line_number":489,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B16k%3D","line":486,"updated":"2013-02-17 19:01:34.000000000","message":"We can remove the conditional by providing a default to pop.\n\nself.agent_state.pop(\u0027start_flag\u0027, None)","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":483,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":484,"context_line":"                                        self.agent_state)"},{"line_number":485,"context_line":"            if \u0027start_flag\u0027 in self.agent_state:"},{"line_number":486,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":487,"context_line":"        except Exception:"},{"line_number":488,"context_line":"            LOG.exception(\"Failed reporting state!\")"},{"line_number":489,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B14o%3D","line":486,"in_reply_to":"AAAAM3%2F%2B16k%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"}],"quantum/plugins/linuxbridge/common/config.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":47,"context_line":"               help\u003d_(\"Root helper application.\")),"},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":49,"context_line":"               help\u003d\u0027seconds between nodes reporting state to server\u0027),"},{"line_number":50,"context_line":"]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FJks%3D","line":49,"updated":"2013-02-05 16:14:56.000000000","message":"i18n","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":47,"context_line":"               help\u003d_(\"Root helper application.\")),"},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":49,"context_line":"               help\u003d\u0027seconds between nodes reporting state to server\u0027),"},{"line_number":50,"context_line":"]"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FIkE%3D","line":49,"in_reply_to":"AAAAM3%2F%2FJks%3D","updated":"2013-02-06 01:04:45.000000000","message":"Done","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":45,"context_line":"               help\u003d_(\"The number of seconds the agent will wait between \""},{"line_number":46,"context_line":"                      \"polling for local device changes.\")),"},{"line_number":47,"context_line":"    cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":48,"context_line":"               help\u003d_(\u0027Seconds between nodes reporting state to server\u0027)),"},{"line_number":49,"context_line":"]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B6Ss%3D","line":48,"updated":"2013-02-14 18:22:06.000000000","message":"This opt  looks duplicated in ovs agent.\nWe should have it on one place","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               help\u003d_(\"The number of seconds the agent will wait between \""},{"line_number":46,"context_line":"                      \"polling for local device changes.\")),"},{"line_number":47,"context_line":"    cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":48,"context_line":"               help\u003d_(\u0027Seconds between nodes reporting state to server\u0027)),"},{"line_number":49,"context_line":"]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2NA%3D","line":48,"in_reply_to":"AAAAM3%2F%2B2Q0%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":45,"context_line":"               help\u003d_(\"The number of seconds the agent will wait between \""},{"line_number":46,"context_line":"                      \"polling for local device changes.\")),"},{"line_number":47,"context_line":"    cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":48,"context_line":"               help\u003d_(\u0027Seconds between nodes reporting state to server\u0027)),"},{"line_number":49,"context_line":"]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Q0%3D","line":48,"in_reply_to":"AAAAM3%2F%2B6Ss%3D","updated":"2013-02-17 08:04:41.000000000","message":"I agree quantum/agent/common/config.py (this is where the root helper is)","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":50,"context_line":"cfg.CONF.register_opts(vlan_opts, \"VLANS\")"},{"line_number":51,"context_line":"cfg.CONF.register_opts(bridge_opts, \"LINUX_BRIDGE\")"},{"line_number":52,"context_line":"cfg.CONF.register_opts(agent_opts, \"AGENT\")"},{"line_number":53,"context_line":"cfg.CONF.register_opts(config.AGENT_STATE_OPTS, \"AGENT\")"},{"line_number":54,"context_line":"config.register_root_helper(cfg.CONF)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B2BU%3D","line":53,"updated":"2013-02-17 15:36:52.000000000","message":"similar to rootwrap","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"cfg.CONF.register_opts(vlan_opts, \"VLANS\")"},{"line_number":51,"context_line":"cfg.CONF.register_opts(bridge_opts, \"LINUX_BRIDGE\")"},{"line_number":52,"context_line":"cfg.CONF.register_opts(agent_opts, \"AGENT\")"},{"line_number":53,"context_line":"cfg.CONF.register_opts(config.AGENT_STATE_OPTS, \"AGENT\")"},{"line_number":54,"context_line":"config.register_root_helper(cfg.CONF)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B14k%3D","line":53,"in_reply_to":"AAAAM3%2F%2B2BU%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"}],"quantum/plugins/linuxbridge/lb_quantum_plugin.py":[{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":196,"context_line":"    __native_bulk_support \u003d True"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    supported_extension_aliases \u003d [\"provider\", \"router\", \"binding\", \"quotas\","},{"line_number":199,"context_line":"                                   \"security-group\", \u0027agent\u0027]"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    network_view \u003d \"extension:provider_network:view\""},{"line_number":202,"context_line":"    network_set \u003d \"extension:provider_network:set\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FIMs%3D","line":199,"updated":"2013-02-06 08:38:03.000000000","message":"nitpick. use \" for consistency.","commit_id":"d3852013f81bbea89247671c4dfa2a30ed407c32"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    __native_bulk_support \u003d True"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    supported_extension_aliases \u003d [\"provider\", \"router\", \"binding\", \"quotas\","},{"line_number":199,"context_line":"                                   \"security-group\", \u0027agent\u0027]"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    network_view \u003d \"extension:provider_network:view\""},{"line_number":202,"context_line":"    network_set \u003d \"extension:provider_network:set\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FIII%3D","line":199,"in_reply_to":"AAAAM3%2F%2FIMs%3D","updated":"2013-02-06 10:14:12.000000000","message":"Done","commit_id":"d3852013f81bbea89247671c4dfa2a30ed407c32"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":64,"context_line":"        one class as the target of rpc messages, override this method."},{"line_number":65,"context_line":"        \u0027\u0027\u0027"},{"line_number":66,"context_line":"        return q_rpc.PluginRpcDispatcher([self,"},{"line_number":67,"context_line":"                                          agents_db.AgentExtRpcCallback()])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @classmethod"},{"line_number":70,"context_line":"    def get_port_from_device(cls, device):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B1%2BU%3D","line":67,"updated":"2013-02-17 17:01:01.000000000","message":"I prefer this approach. It is easier to maintain each RPC.","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        one class as the target of rpc messages, override this method."},{"line_number":65,"context_line":"        \u0027\u0027\u0027"},{"line_number":66,"context_line":"        return q_rpc.PluginRpcDispatcher([self,"},{"line_number":67,"context_line":"                                          agents_db.AgentExtRpcCallback()])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @classmethod"},{"line_number":70,"context_line":"    def get_port_from_device(cls, device):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B14g%3D","line":67,"in_reply_to":"AAAAM3%2F%2B1%2BU%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"}],"quantum/plugins/openvswitch/agent/ovs_quantum_agent.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":167,"context_line":"            \u0027topic\u0027: q_const.L2_AGENT_TOPIC,"},{"line_number":168,"context_line":"            \u0027configurations\u0027: bridge_mappings,"},{"line_number":169,"context_line":"            \u0027type\u0027: q_const.AGENT_TYPE_OVS_AGENT}"},{"line_number":170,"context_line":"        self.first_state_report \u003d True"},{"line_number":171,"context_line":"        self.setup_rpc(integ_br)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def _report_state(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2eE%3D","line":170,"updated":"2013-02-17 01:54:31.000000000","message":"You do not need this variable.  Just add this to the dict initialization:\nstate_flag: True","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            \u0027topic\u0027: q_const.L2_AGENT_TOPIC,"},{"line_number":168,"context_line":"            \u0027configurations\u0027: bridge_mappings,"},{"line_number":169,"context_line":"            \u0027type\u0027: q_const.AGENT_TYPE_OVS_AGENT}"},{"line_number":170,"context_line":"        self.first_state_report \u003d True"},{"line_number":171,"context_line":"        self.setup_rpc(integ_br)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def _report_state(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2M4%3D","line":170,"in_reply_to":"AAAAM3%2F%2B2eE%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":179,"context_line":"            else:"},{"line_number":180,"context_line":"                devices \u003d 0"},{"line_number":181,"context_line":"            self.agent_state.get(\u0027configurations\u0027)[\u0027devices\u0027] \u003d devices"},{"line_number":182,"context_line":"            if self.first_state_report:"},{"line_number":183,"context_line":"                self.agent_state[\u0027start_flag\u0027] \u003d True"},{"line_number":184,"context_line":"            elif \u0027start_flag\u0027 in self.agent_state:"},{"line_number":185,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2eA%3D","line":182,"updated":"2013-02-17 01:54:31.000000000","message":"Drop lines 18-20","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            else:"},{"line_number":180,"context_line":"                devices \u003d 0"},{"line_number":181,"context_line":"            self.agent_state.get(\u0027configurations\u0027)[\u0027devices\u0027] \u003d devices"},{"line_number":182,"context_line":"            if self.first_state_report:"},{"line_number":183,"context_line":"                self.agent_state[\u0027start_flag\u0027] \u003d True"},{"line_number":184,"context_line":"            elif \u0027start_flag\u0027 in self.agent_state:"},{"line_number":185,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2M0%3D","line":182,"in_reply_to":"AAAAM3%2F%2B2eA%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":185,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":186,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":187,"context_line":"                                        self.agent_state)"},{"line_number":188,"context_line":"            self.first_state_report \u003d False"},{"line_number":189,"context_line":"        except Exception:"},{"line_number":190,"context_line":"            LOG.exception(_(\"Failed reporting state!\"))"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2d8%3D","line":188,"updated":"2013-02-17 01:54:31.000000000","message":"self.agent_state.pop(\u0027start_flag\u0027)","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":186,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":187,"context_line":"                                        self.agent_state)"},{"line_number":188,"context_line":"            self.first_state_report \u003d False"},{"line_number":189,"context_line":"        except Exception:"},{"line_number":190,"context_line":"            LOG.exception(_(\"Failed reporting state!\"))"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Mw%3D","line":188,"in_reply_to":"AAAAM3%2F%2B2d8%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                                     consumers)"},{"line_number":209,"context_line":"        report_interval \u003d cfg.CONF.AGENT.report_interval"},{"line_number":210,"context_line":"        if cfg.CONF.AGENT.report_interval:"},{"line_number":211,"context_line":"            pulse \u003d loopingcall.LoopingCall(self._report_state)"},{"line_number":212,"context_line":"            pulse.start(interval\u003dreport_interval)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def get_net_uuid(self, vif_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2do%3D","line":211,"updated":"2013-02-17 01:54:31.000000000","message":"pulse -\u003e heartbeat","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                                     consumers)"},{"line_number":209,"context_line":"        report_interval \u003d cfg.CONF.AGENT.report_interval"},{"line_number":210,"context_line":"        if cfg.CONF.AGENT.report_interval:"},{"line_number":211,"context_line":"            pulse \u003d loopingcall.LoopingCall(self._report_state)"},{"line_number":212,"context_line":"            pulse.start(interval\u003dreport_interval)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def get_net_uuid(self, vif_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B2Ms%3D","line":211,"in_reply_to":"AAAAM3%2F%2B2do%3D","updated":"2013-02-17 09:41:22.000000000","message":"Done","commit_id":"263ec1c4f20652d3785989bb315aee3c418b7919"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":203,"context_line":"            self.agent_state.get(\u0027configurations\u0027)[\u0027devices\u0027] \u003d num_devices"},{"line_number":204,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":205,"context_line":"                                        self.agent_state)"},{"line_number":206,"context_line":"            if \u0027start_flag\u0027 in self.agent_state:"},{"line_number":207,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":208,"context_line":"        except Exception:"},{"line_number":209,"context_line":"            LOG.exception(_(\"Failed reporting state!\"))"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B16c%3D","line":206,"updated":"2013-02-17 19:01:34.000000000","message":"We can remove the conditional by providing a default to pop.\n\nself.agent_state.pop(\u0027start_flag\u0027, None)","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            self.agent_state.get(\u0027configurations\u0027)[\u0027devices\u0027] \u003d num_devices"},{"line_number":204,"context_line":"            self.state_rpc.report_state(self.context,"},{"line_number":205,"context_line":"                                        self.agent_state)"},{"line_number":206,"context_line":"            if \u0027start_flag\u0027 in self.agent_state:"},{"line_number":207,"context_line":"                self.agent_state.pop(\u0027start_flag\u0027)"},{"line_number":208,"context_line":"        except Exception:"},{"line_number":209,"context_line":"            LOG.exception(_(\"Failed reporting state!\"))"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B14c%3D","line":206,"in_reply_to":"AAAAM3%2F%2B16c%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f9e611c7d227603d5d00316145a77558500a82d0","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    def _report_state(self):"},{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            # How many devices are likely used by a VM"},{"line_number":198,"context_line":"            ports \u003d self.update_ports(set())"},{"line_number":199,"context_line":"            if ports:"},{"line_number":200,"context_line":"                num_devices \u003d len(ports.get(\u0027current\u0027, []))"},{"line_number":201,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B1l8%3D","line":198,"updated":"2013-02-18 02:42:25.000000000","message":"Why not invoke \u0027self.int_br.get_vif_port_set()\u0027 directly?","commit_id":"d305b4196b0625b4045d957a630220014620a1f2"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":195,"context_line":"    def _report_state(self):"},{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            # How many devices are likely used by a VM"},{"line_number":198,"context_line":"            ports \u003d self.update_ports(set())"},{"line_number":199,"context_line":"            if ports:"},{"line_number":200,"context_line":"                num_devices \u003d len(ports.get(\u0027current\u0027, []))"},{"line_number":201,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B1ew%3D","line":198,"in_reply_to":"AAAAM3%2F%2B1l8%3D","updated":"2013-02-18 03:34:38.000000000","message":"Done","commit_id":"d305b4196b0625b4045d957a630220014620a1f2"}],"quantum/plugins/openvswitch/common/config.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":59,"context_line":"               help\u003d_(\"Root helper application.\")),"},{"line_number":60,"context_line":"    cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":61,"context_line":"               help\u003d\u0027seconds between nodes reporting state to server\u0027),"},{"line_number":62,"context_line":"]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FJkY%3D","line":61,"updated":"2013-02-05 16:14:56.000000000","message":"i18n","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":59,"context_line":"               help\u003d_(\"Root helper application.\")),"},{"line_number":60,"context_line":"    cfg.IntOpt(\u0027report_interval\u0027, default\u003d4,"},{"line_number":61,"context_line":"               help\u003d\u0027seconds between nodes reporting state to server\u0027),"},{"line_number":62,"context_line":"]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FIj8%3D","line":61,"in_reply_to":"AAAAM3%2F%2FJkY%3D","updated":"2013-02-06 01:04:45.000000000","message":"Done","commit_id":"7277c2a18c7d8133eba5a5d23ff64aab30fff413"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"cfg.CONF.register_opts(ovs_opts, \"OVS\")"},{"line_number":63,"context_line":"cfg.CONF.register_opts(agent_opts, \"AGENT\")"},{"line_number":64,"context_line":"cfg.CONF.register_opts(config.AGENT_STATE_OPTS, \"AGENT\")"},{"line_number":65,"context_line":"config.register_root_helper(cfg.CONF)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B2BQ%3D","line":64,"updated":"2013-02-17 15:36:52.000000000","message":"similar to root wrap","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"d3d3405a702116c7530bcdbb4e7cd08e34f40af7","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"cfg.CONF.register_opts(ovs_opts, \"OVS\")"},{"line_number":63,"context_line":"cfg.CONF.register_opts(agent_opts, \"AGENT\")"},{"line_number":64,"context_line":"cfg.CONF.register_opts(config.AGENT_STATE_OPTS, \"AGENT\")"},{"line_number":65,"context_line":"config.register_root_helper(cfg.CONF)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2B14Y%3D","line":64,"in_reply_to":"AAAAM3%2F%2B2BQ%3D","updated":"2013-02-17 20:26:40.000000000","message":"Done","commit_id":"4c2c871458c364d93ea7bd5157ffaa24a52633f4"}]}
