)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"AgentExtensionsManager and AgentCoreResourceExtension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch intrudoce the following classes:"},{"line_number":10,"context_line":"L2Agent - abstract class for common L2Agent implementions."},{"line_number":11,"context_line":"AgentExtensionsManager - to load AgentCoreResourceExtension."},{"line_number":12,"context_line":"AgentCoreResourceExtension - interface class to define"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba3cc151_e0baec09","line":9,"updated":"2015-07-01 07:28:29.000000000","message":"introduces","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"AgentExtensionsManager and AgentCoreResourceExtension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch intrudoce the following classes:"},{"line_number":10,"context_line":"L2Agent - abstract class for common L2Agent implementions."},{"line_number":11,"context_line":"AgentExtensionsManager - to load AgentCoreResourceExtension."},{"line_number":12,"context_line":"AgentCoreResourceExtension - interface class to define"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba3cc151_3bb1e5e1","line":9,"in_reply_to":"ba3cc151_e0baec09","updated":"2015-07-01 08:55:54.000000000","message":"Done","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"df72c16a41e377f642e1f3113f57bb67d1e3ddb5","unresolved":false,"context_lines":[{"line_number":15,"context_line":"and L2 Agent Extensions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The patch is missing unit test but it was tested manually."},{"line_number":18,"context_line":"I added a unit tests @TODO comments to come back "},{"line_number":19,"context_line":"to them later."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I813de7ff1bee188f4294f4b3eb3645ebd903297b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba3cc151_a0d70422","line":18,"updated":"2015-07-01 07:14:37.000000000","message":"white space","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"and L2 Agent Extensions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"The patch is missing unit test but it was tested manually."},{"line_number":18,"context_line":"I added a unit tests @TODO comments to come back "},{"line_number":19,"context_line":"to them later."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I813de7ff1bee188f4294f4b3eb3645ebd903297b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba3cc151_5bb4e9cf","line":18,"in_reply_to":"ba3cc151_a0d70422","updated":"2015-07-01 08:55:54.000000000","message":"Done","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"}],"neutron/agent/l2/agent_extension.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"4ec5cb520440c54a2406e04f00e38cf25cfcf439","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class AgentCoreResourceExtension(object):"},{"line_number":22,"context_line":"    \"\"\"Define stable abstract interface for Agent extension."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    An agent extension extends the agent core."},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_a30ea4e3","line":24,"updated":"2015-06-28 23:54:08.000000000","message":"this sentence is not clear enough. What is Agent core?","commit_id":"5d766bc94a6873b130e372ebc01e55b0ff1c9431"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"dfa36c10e1191bfb50e5d1c1466abfd2aa94ca1d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class AgentCoreResourceExtension(object):"},{"line_number":22,"context_line":"    \"\"\"Define stable abstract interface for Agent extension."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    An agent extension extends the agent core."},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_8ab1da91","line":24,"in_reply_to":"ba3cc151_67d8a11e","updated":"2015-06-30 20:05:41.000000000","message":"Done","commit_id":"5d766bc94a6873b130e372ebc01e55b0ff1c9431"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0b86df7814e785685a314606fddff90cb3dc83c8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class AgentCoreResourceExtension(object):"},{"line_number":22,"context_line":"    \"\"\"Define stable abstract interface for Agent extension."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    An agent extension extends the agent core."},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_67d8a11e","line":24,"in_reply_to":"ba3cc151_a30ea4e3","updated":"2015-06-29 06:47:31.000000000","message":"I will update to  agent core functionality","commit_id":"5d766bc94a6873b130e372ebc01e55b0ff1c9431"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"4ec5cb520440c54a2406e04f00e38cf25cfcf439","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def initialize(self):"},{"line_number":29,"context_line":"        \"\"\"Perform agent core resource extension initialization."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        Called after all extensions have been loaded and the database has"},{"line_number":32,"context_line":"        been initialized. No abstract methods defined below will be"},{"line_number":33,"context_line":"        called prior to this method being called."},{"line_number":34,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_a325445d","line":31,"updated":"2015-06-28 23:54:08.000000000","message":"this comment seems not related","commit_id":"5d766bc94a6873b130e372ebc01e55b0ff1c9431"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"dfa36c10e1191bfb50e5d1c1466abfd2aa94ca1d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def initialize(self):"},{"line_number":29,"context_line":"        \"\"\"Perform agent core resource extension initialization."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        Called after all extensions have been loaded and the database has"},{"line_number":32,"context_line":"        been initialized. No abstract methods defined below will be"},{"line_number":33,"context_line":"        called prior to this method being called."},{"line_number":34,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_4aabd21d","line":31,"in_reply_to":"ba3cc151_072bd5ec","updated":"2015-06-30 20:05:41.000000000","message":"Done","commit_id":"5d766bc94a6873b130e372ebc01e55b0ff1c9431"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0b86df7814e785685a314606fddff90cb3dc83c8","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def initialize(self):"},{"line_number":29,"context_line":"        \"\"\"Perform agent core resource extension initialization."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        Called after all extensions have been loaded and the database has"},{"line_number":32,"context_line":"        been initialized. No abstract methods defined below will be"},{"line_number":33,"context_line":"        called prior to this method being called."},{"line_number":34,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_072bd5ec","line":31,"in_reply_to":"ba3cc151_a325445d","updated":"2015-06-29 06:47:31.000000000","message":"sure I will update it, (copy past mistake :))","commit_id":"5d766bc94a6873b130e372ebc01e55b0ff1c9431"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"4ec5cb520440c54a2406e04f00e38cf25cfcf439","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def handle_network(self, data):"},{"line_number":38,"context_line":"        \"\"\"handle extended attributes for network."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        \"\"\""},{"line_number":41,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_c3b888e8","line":38,"updated":"2015-06-28 23:54:08.000000000","message":"Would it be possible that the status of the handling should be propagated to the L2 agent (invoker)? The the invoked methods should either populate some attribute or report status back","commit_id":"5d766bc94a6873b130e372ebc01e55b0ff1c9431"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0b86df7814e785685a314606fddff90cb3dc83c8","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def handle_network(self, data):"},{"line_number":38,"context_line":"        \"\"\"handle extended attributes for network."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        \"\"\""},{"line_number":41,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_4749ddcf","line":38,"in_reply_to":"ba3cc151_c3b888e8","updated":"2015-06-29 06:47:31.000000000","message":"This can be by status or throw an exception, I guess the error handling part is still vague...","commit_id":"5d766bc94a6873b130e372ebc01e55b0ff1c9431"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_3ba6c510","line":16,"updated":"2015-07-01 07:28:29.000000000","message":"nit: split with newline","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_bbf3b59d","line":16,"in_reply_to":"ba3cc151_3ba6c510","updated":"2015-07-01 08:55:54.000000000","message":"Done","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"df72c16a41e377f642e1f3113f57bb67d1e3ddb5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \"\"\""},{"line_number":34,"context_line":"        self.resource_rpc \u003d resource_rpc"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def handle_network(self, context, data):"},{"line_number":37,"context_line":"        \"\"\"handle extended attributes for network."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_8061a03b","line":36,"updated":"2015-07-01 07:14:37.000000000","message":"why is this called handle_network here and called handle_network_extensions in the agent manager","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        \"\"\""},{"line_number":34,"context_line":"        self.resource_rpc \u003d resource_rpc"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def handle_network(self, context, data):"},{"line_number":37,"context_line":"        \"\"\"handle extended attributes for network."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_db1c79c3","line":36,"in_reply_to":"ba3cc151_8061a03b","updated":"2015-07-01 08:55:54.000000000","message":"I will update the manger to be consistent with this","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"96e79a0b817d69cfcbad548bfbdd054c84d5f4d1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        Called after all extensions have been loaded."},{"line_number":32,"context_line":"        No abstract methods defined below will be"},{"line_number":33,"context_line":"        called prior to this method being called."},{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        self.resource_rpc \u003d resource_rpc"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def handle_network(self, context, data):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_66a271b0","line":34,"updated":"2015-07-01 09:57:07.000000000","message":"please add @param for resource_rpc","commit_id":"a27ce9c44b73349fa289ac2cd557a72e84f3ac51"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"3e2323d4a162663aa3c7d43c63bd69de90f03afe","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        Called after all extensions have been loaded."},{"line_number":32,"context_line":"        No abstract methods defined below will be"},{"line_number":33,"context_line":"        called prior to this method being called."},{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        self.resource_rpc \u003d resource_rpc"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def handle_network(self, context, data):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_04e7d611","line":34,"in_reply_to":"ba3cc151_66a271b0","updated":"2015-07-01 13:19:42.000000000","message":"Done","commit_id":"a27ce9c44b73349fa289ac2cd557a72e84f3ac51"}],"neutron/agent/l2/agent_extensions_manager.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# @TODO(moshele) add unit tests to Agent extensions mgr"},{"line_number":25,"context_line":"class AgentExtensionManager(stevedore.named.NamedExtensionManager):"},{"line_number":26,"context_line":"    \"\"\"Manage agent extensions.\"\"\""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_40139866","line":24,"updated":"2015-07-01 07:28:29.000000000","message":"TODO(QoS)","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def __init__(self, agent_extensions):"},{"line_number":29,"context_line":"        # Ordered list of agent extensions, defining"},{"line_number":30,"context_line":"        # the order in which the agent extensions are called."},{"line_number":31,"context_line":"        self.ordered_agent_ext \u003d []"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        LOG.info(_LI(\"Configured agent extension names: %s\"),"},{"line_number":34,"context_line":"                 agent_extensions)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_2009b431","line":31,"updated":"2015-07-01 07:28:29.000000000","message":"Please don\u0027t abbreviate","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def __init__(self, agent_extensions):"},{"line_number":29,"context_line":"        # Ordered list of agent extensions, defining"},{"line_number":30,"context_line":"        # the order in which the agent extensions are called."},{"line_number":31,"context_line":"        self.ordered_agent_ext \u003d []"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        LOG.info(_LI(\"Configured agent extension names: %s\"),"},{"line_number":34,"context_line":"                 agent_extensions)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_10e4fb0a","line":31,"in_reply_to":"ba3cc151_2009b431","updated":"2015-07-01 08:55:54.000000000","message":"Done","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4f93e7a0b9e4b0bf88a44170df374abeb638e204","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                 agent_extensions)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        super(AgentExtensionManager, self).__init__("},{"line_number":37,"context_line":"            \u0027neutron.agent.l2.extensions\u0027, agent_extensions,"},{"line_number":38,"context_line":"            invoke_on_load\u003dTrue, name_order\u003dTrue)"},{"line_number":39,"context_line":"        LOG.info(_LI(\"Loaded agent extension names: %s\"), self.names())"},{"line_number":40,"context_line":"        self._register_extensions()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_f0b07745","line":37,"updated":"2015-07-01 08:17:36.000000000","message":"Should we introduce the namespace in setup.cfg?","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                 agent_extensions)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        super(AgentExtensionManager, self).__init__("},{"line_number":37,"context_line":"            \u0027neutron.agent.l2.extensions\u0027, agent_extensions,"},{"line_number":38,"context_line":"            invoke_on_load\u003dTrue, name_order\u003dTrue)"},{"line_number":39,"context_line":"        LOG.info(_LI(\"Loaded agent extension names: %s\"), self.names())"},{"line_number":40,"context_line":"        self._register_extensions()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_10795b2f","line":37,"in_reply_to":"ba3cc151_f0b07745","updated":"2015-07-01 08:55:54.000000000","message":"add it to setup.cfg","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"df72c16a41e377f642e1f3113f57bb67d1e3ddb5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            \u0027neutron.agent.l2.extensions\u0027, agent_extensions,"},{"line_number":38,"context_line":"            invoke_on_load\u003dTrue, name_order\u003dTrue)"},{"line_number":39,"context_line":"        LOG.info(_LI(\"Loaded agent extension names: %s\"), self.names())"},{"line_number":40,"context_line":"        self._register_extensions()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _register_extensions(self):"},{"line_number":43,"context_line":"        \"\"\"Register all agent extensions."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_c0aec884","line":40,"updated":"2015-07-01 07:14:37.000000000","message":"why do we need this method?","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            \u0027neutron.agent.l2.extensions\u0027, agent_extensions,"},{"line_number":38,"context_line":"            invoke_on_load\u003dTrue, name_order\u003dTrue)"},{"line_number":39,"context_line":"        LOG.info(_LI(\"Loaded agent extension names: %s\"), self.names())"},{"line_number":40,"context_line":"        self._register_extensions()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _register_extensions(self):"},{"line_number":43,"context_line":"        \"\"\"Register all agent extensions."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_8d2a387d","line":40,"in_reply_to":"ba3cc151_1b3741e4","updated":"2015-07-01 08:55:54.000000000","message":"ok I will remove it","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            \u0027neutron.agent.l2.extensions\u0027, agent_extensions,"},{"line_number":38,"context_line":"            invoke_on_load\u003dTrue, name_order\u003dTrue)"},{"line_number":39,"context_line":"        LOG.info(_LI(\"Loaded agent extension names: %s\"), self.names())"},{"line_number":40,"context_line":"        self._register_extensions()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _register_extensions(self):"},{"line_number":43,"context_line":"        \"\"\"Register all agent extensions."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_1b3741e4","line":40,"in_reply_to":"ba3cc151_c0aec884","updated":"2015-07-01 07:28:29.000000000","message":"+1. They are already registered on self.","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"df72c16a41e377f642e1f3113f57bb67d1e3ddb5","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        for ext in self:"},{"line_number":49,"context_line":"            self.ordered_agent_ext.append(ext)"},{"line_number":50,"context_line":"        LOG.info(_LI(\"Registered agent extensions: %s\"),"},{"line_number":51,"context_line":"                 [extension.name for extension in self.ordered_agent_ext])"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def _call_on_agent_ext(self, method_name, context, data):"},{"line_number":54,"context_line":"        \"\"\"Helper method for calling a method across all agent extensions.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_60b49cd0","line":51,"updated":"2015-07-01 07:14:37.000000000","message":"do we validate that the names are unique?","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        for ext in self:"},{"line_number":49,"context_line":"            self.ordered_agent_ext.append(ext)"},{"line_number":50,"context_line":"        LOG.info(_LI(\"Registered agent extensions: %s\"),"},{"line_number":51,"context_line":"                 [extension.name for extension in self.ordered_agent_ext])"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def _call_on_agent_ext(self, method_name, context, data):"},{"line_number":54,"context_line":"        \"\"\"Helper method for calling a method across all agent extensions.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_8d9f98b3","line":51,"in_reply_to":"ba3cc151_60b49cd0","updated":"2015-07-01 08:55:54.000000000","message":"this code will be removed","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"df72c16a41e377f642e1f3113f57bb67d1e3ddb5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        for extension in self.ordered_agent_ext:"},{"line_number":56,"context_line":"            try:"},{"line_number":57,"context_line":"                getattr(extension.obj, method_name)(context, data)"},{"line_number":58,"context_line":"            except Exception:"},{"line_number":59,"context_line":"                LOG.exception("},{"line_number":60,"context_line":"                    _LE(\"Agent Extension \u0027%(name)s\u0027 failed in %(method)s\"),"},{"line_number":61,"context_line":"                    {\u0027name\u0027: extension.name, \u0027method\u0027: method_name}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_802c4003","line":58,"updated":"2015-07-01 07:14:37.000000000","message":"are there any more specific exceptions that we can catch here\n\ngetattr will throw AttributeError\nwhat about the method?","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        for extension in self.ordered_agent_ext:"},{"line_number":56,"context_line":"            try:"},{"line_number":57,"context_line":"                getattr(extension.obj, method_name)(context, data)"},{"line_number":58,"context_line":"            except Exception:"},{"line_number":59,"context_line":"                LOG.exception("},{"line_number":60,"context_line":"                    _LE(\"Agent Extension \u0027%(name)s\u0027 failed in %(method)s\"),"},{"line_number":61,"context_line":"                    {\u0027name\u0027: extension.name, \u0027method\u0027: method_name}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_2d7d2c6e","line":58,"in_reply_to":"ba3cc151_802c4003","updated":"2015-07-01 08:55:54.000000000","message":"I change it to AttributeError  and will add agent extension exception one we define them.","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"7b1aa0061173a6aa3f604ba20a1ed1f45278c2a5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        port_id \u003d data[\u0027port_id\u0027]"},{"line_number":72,"context_line":"        if port_id not in self.known_ports:"},{"line_number":73,"context_line":"            self._call_on_agent_extensions(\"handle_port\", context, data)"},{"line_number":74,"context_line":"            self.known_ports.add(port_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_01fc9db6","line":74,"updated":"2015-07-01 14:48:46.000000000","message":"does this list never shrink?","commit_id":"c29493891688a34f66053a6931ab612bdef61348"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b8eef6fa0059baf3d81b13589c8f60eaa47d7ecc","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        port_id \u003d data[\u0027port_id\u0027]"},{"line_number":72,"context_line":"        if port_id not in self.known_ports:"},{"line_number":73,"context_line":"            self._call_on_agent_extensions(\"handle_port\", context, data)"},{"line_number":74,"context_line":"            self.known_ports.add(port_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_02e33c34","line":74,"in_reply_to":"ba3cc151_01fc9db6","updated":"2015-07-01 15:18:21.000000000","message":"it should be shrink on delete, but we are not there yet. I will add TODO(QoS)\nto resolve the delete part.","commit_id":"c29493891688a34f66053a6931ab612bdef61348"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"ae19af3f9acac0a45556e941d4f8b9070db891db","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        port_id \u003d data[\u0027port_id\u0027]"},{"line_number":72,"context_line":"        if port_id not in self.known_ports:"},{"line_number":73,"context_line":"            self._call_on_agent_extensions(\"handle_port\", context, data)"},{"line_number":74,"context_line":"            self.known_ports.add(port_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_2570ca0a","line":74,"in_reply_to":"ba3cc151_02e33c34","updated":"2015-07-01 15:39:51.000000000","message":"May be we need a #TODO(QoS): delete know_ports when we stop handling them? :)","commit_id":"c29493891688a34f66053a6931ab612bdef61348"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5791ab11f13440fe642341ad67d6879c4e4d736e","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        \"\"\"Notify all agent extensions to handle subnet.\"\"\""},{"line_number":65,"context_line":"        self._call_on_agent_extensions(\"handle_subnet\", context, data)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def handle_port(self, context, data):"},{"line_number":68,"context_line":"        \"\"\"Notify all agent extensions to handle port.\"\"\""},{"line_number":69,"context_line":"        #Note(moshele) call agent_extensions_mgr only if it is a new"},{"line_number":70,"context_line":"        # port for the agent."}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_6b42236a","line":67,"updated":"2015-07-01 16:17:34.000000000","message":"OK, now that I\u0027ve looked into it, I see that handle_port applies magic, deciding for the extensions whether they are interested in the update.\n\nIt should not do so for multiple reasons:\n- it mixes abstraction layers;\n- it assumes that extensions rely on rpc callbacks, which may not be the case;\n- it does not propagate update of qos_profile of the port to extension, meaning extension is not notified about the change at all.","commit_id":"f2ba19eebfb43571f85a17fede4c95e0dc27cf5b"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0998886aed4ea1b600f907260fe608b054e2a70f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        \"\"\"Notify all agent extensions to handle subnet.\"\"\""},{"line_number":65,"context_line":"        self._call_on_agent_extensions(\"handle_subnet\", context, data)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def handle_port(self, context, data):"},{"line_number":68,"context_line":"        \"\"\"Notify all agent extensions to handle port.\"\"\""},{"line_number":69,"context_line":"        #Note(moshele) call agent_extensions_mgr only if it is a new"},{"line_number":70,"context_line":"        # port for the agent."}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_b6d72e4a","line":67,"in_reply_to":"ba3cc151_6b42236a","updated":"2015-07-01 17:06:46.000000000","message":"will do","commit_id":"f2ba19eebfb43571f85a17fede4c95e0dc27cf5b"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0397ef12d39ed391edb7871a009d0e02a5b11bb3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        for extension in self:"},{"line_number":43,"context_line":"            try:"},{"line_number":44,"context_line":"                getattr(extension.obj, method_name)(context, data)"},{"line_number":45,"context_line":"            # TODO(QoS) add agent extensions exception and catch them here"},{"line_number":46,"context_line":"            except AttributeError:"},{"line_number":47,"context_line":"                LOG.exception("},{"line_number":48,"context_line":"                    _LE(\"Agent Extension \u0027%(name)s\u0027 failed in %(method)s\"),"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_78c97a58","line":45,"updated":"2015-07-02 05:28:49.000000000","message":"Do you want to keep it as :TODO\". I feel you can replace TODO with \"Note\".","commit_id":"0039ce04401a8ea1f0e2eca78f6d6889d2d82a5b"}],"neutron/agent/l2/l2_agent.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"4ec5cb520440c54a2406e04f00e38cf25cfcf439","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.known_devices \u003d set()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def initialize(self):"},{"line_number":34,"context_line":"        # @TODO(moshele): get extensions from server ????"},{"line_number":35,"context_line":"        agent_extensions \u003d (\u0027qos\u0027, )"},{"line_number":36,"context_line":"        if agent_extensions:"},{"line_number":37,"context_line":"            self.agent_extenstions_mgr \u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_43c55859","line":34,"updated":"2015-06-28 23:54:08.000000000","message":"I think its not that simple. Some extension may be enabled but supported by  only part of the Mechanism drivers.","commit_id":"5d766bc94a6873b130e372ebc01e55b0ff1c9431"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0b86df7814e785685a314606fddff90cb3dc83c8","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.known_devices \u003d set()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def initialize(self):"},{"line_number":34,"context_line":"        # @TODO(moshele): get extensions from server ????"},{"line_number":35,"context_line":"        agent_extensions \u003d (\u0027qos\u0027, )"},{"line_number":36,"context_line":"        if agent_extensions:"},{"line_number":37,"context_line":"            self.agent_extenstions_mgr \u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_677421fd","line":34,"in_reply_to":"ba3cc151_43c55859","updated":"2015-06-29 06:47:31.000000000","message":"I guess that in that case the Mechanism drivers which don\u0027t support the extension can use some kind of Noop Driver","commit_id":"5d766bc94a6873b130e372ebc01e55b0ff1c9431"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.agent.l2 import agent_extensions_manager"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_e0518cd9","line":16,"updated":"2015-07-01 07:28:29.000000000","message":"nit: abc is stdlib, six is not, so a newline should have been in between.","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.agent.l2 import agent_extensions_manager"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_ad913c9b","line":16,"in_reply_to":"ba3cc151_e0518cd9","updated":"2015-07-01 08:55:54.000000000","message":"Done","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from neutron.agent.l2 import agent_extensions_manager"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# @TODO(moshele) add unit tests to L2 Agent"},{"line_number":23,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":24,"context_line":"class L2Agent(object):"},{"line_number":25,"context_line":"    def __init__(self, polling_interval):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_206f7493","line":22,"updated":"2015-07-01 07:28:29.000000000","message":"Let\u0027s make it TODO(QoS) instead, to easily track all qos related TODOs.","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from neutron.agent.l2 import agent_extensions_manager"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# @TODO(moshele) add unit tests to L2 Agent"},{"line_number":23,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":24,"context_line":"class L2Agent(object):"},{"line_number":25,"context_line":"    def __init__(self, polling_interval):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_ad04dcbf","line":22,"in_reply_to":"ba3cc151_206f7493","updated":"2015-07-01 08:55:54.000000000","message":"Done","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# @TODO(moshele) add unit tests to L2 Agent"},{"line_number":23,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":24,"context_line":"class L2Agent(object):"},{"line_number":25,"context_line":"    def __init__(self, polling_interval):"},{"line_number":26,"context_line":"        self.polling_interval \u003d polling_interval"},{"line_number":27,"context_line":"        self.agent_extenstions_mgr \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_00227052","line":24,"updated":"2015-07-01 07:28:29.000000000","message":"Please add docstring describing the intent of the class.","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# @TODO(moshele) add unit tests to L2 Agent"},{"line_number":23,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":24,"context_line":"class L2Agent(object):"},{"line_number":25,"context_line":"    def __init__(self, polling_interval):"},{"line_number":26,"context_line":"        self.polling_interval \u003d polling_interval"},{"line_number":27,"context_line":"        self.agent_extenstions_mgr \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_6d057478","line":24,"in_reply_to":"ba3cc151_00227052","updated":"2015-07-01 08:55:54.000000000","message":"Done","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class L2Agent(object):"},{"line_number":25,"context_line":"    def __init__(self, polling_interval):"},{"line_number":26,"context_line":"        self.polling_interval \u003d polling_interval"},{"line_number":27,"context_line":"        self.agent_extenstions_mgr \u003d None"},{"line_number":28,"context_line":"        self.resource_rpc \u003d None"},{"line_number":29,"context_line":"        # Stores port update notifications for processing in the main loop"},{"line_number":30,"context_line":"        self.updated_devices \u003d set()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_8090c044","line":27,"updated":"2015-07-01 07:28:29.000000000","message":"extenstions -\u003e extensions","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class L2Agent(object):"},{"line_number":25,"context_line":"    def __init__(self, polling_interval):"},{"line_number":26,"context_line":"        self.polling_interval \u003d polling_interval"},{"line_number":27,"context_line":"        self.agent_extenstions_mgr \u003d None"},{"line_number":28,"context_line":"        self.resource_rpc \u003d None"},{"line_number":29,"context_line":"        # Stores port update notifications for processing in the main loop"},{"line_number":30,"context_line":"        self.updated_devices \u003d set()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_8d08f892","line":27,"in_reply_to":"ba3cc151_8090c044","updated":"2015-07-01 08:55:54.000000000","message":"Done","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.agent_extenstions_mgr \u003d None"},{"line_number":28,"context_line":"        self.resource_rpc \u003d None"},{"line_number":29,"context_line":"        # Stores port update notifications for processing in the main loop"},{"line_number":30,"context_line":"        self.updated_devices \u003d set()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        # Stores ports we processed in the past"},{"line_number":33,"context_line":"        self.known_devices \u003d set()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_1b93c1a4","line":30,"updated":"2015-07-01 07:28:29.000000000","message":"Does it belong to common interface?","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.agent_extenstions_mgr \u003d None"},{"line_number":28,"context_line":"        self.resource_rpc \u003d None"},{"line_number":29,"context_line":"        # Stores port update notifications for processing in the main loop"},{"line_number":30,"context_line":"        self.updated_devices \u003d set()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        # Stores ports we processed in the past"},{"line_number":33,"context_line":"        self.known_devices \u003d set()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_ad785cf3","line":30,"in_reply_to":"ba3cc151_1b93c1a4","updated":"2015-07-01 08:55:54.000000000","message":"ok I will remove that, there is inconsistent between agent implementations","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.known_devices \u003d set()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def initialize(self):"},{"line_number":36,"context_line":"        # @TODO(moshele): get extensions from server ????"},{"line_number":37,"context_line":"        agent_extensions \u003d (\u0027qos\u0027, )"},{"line_number":38,"context_line":"        if agent_extensions:"},{"line_number":39,"context_line":"            self.agent_extenstions_mgr \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_a00944df","line":36,"updated":"2015-07-01 07:28:29.000000000","message":"ditto for TODO","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.known_devices \u003d set()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def initialize(self):"},{"line_number":36,"context_line":"        # @TODO(moshele): get extensions from server ????"},{"line_number":37,"context_line":"        agent_extensions \u003d (\u0027qos\u0027, )"},{"line_number":38,"context_line":"        if agent_extensions:"},{"line_number":39,"context_line":"            self.agent_extenstions_mgr \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_6d61f438","line":36,"in_reply_to":"ba3cc151_a00944df","updated":"2015-07-01 08:55:54.000000000","message":"Done","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        agent_extensions \u003d (\u0027qos\u0027, )"},{"line_number":38,"context_line":"        if agent_extensions:"},{"line_number":39,"context_line":"            self.agent_extenstions_mgr \u003d ("},{"line_number":40,"context_line":"                agent_extensions_manager.AgentExtensionManager("},{"line_number":41,"context_line":"                    agent_extensions))"},{"line_number":42,"context_line":"            self.agent_extenstions_mgr.initialize(self.resource_rpc)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_00d0301e","line":40,"updated":"2015-07-01 07:28:29.000000000","message":"Let\u0027s stick to the same plural/singular form: extensions or extension, but not both.","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            self.agent_extenstions_mgr.initialize(self.resource_rpc)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def process_extensions(self, context, port):"},{"line_number":45,"context_line":"        #(moshele) call agent_extenstions_mgr only if it is a new"},{"line_number":46,"context_line":"        # port for the agent."},{"line_number":47,"context_line":"        if self.agent_extenstions_mgr:"},{"line_number":48,"context_line":"            device_id \u003d port[\u0027mac_address\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_c00488c1","line":45,"updated":"2015-07-01 07:28:29.000000000","message":"NOTE(moshele), also, there is a typo in object name","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            self.agent_extenstions_mgr.initialize(self.resource_rpc)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def process_extensions(self, context, port):"},{"line_number":45,"context_line":"        #(moshele) call agent_extenstions_mgr only if it is a new"},{"line_number":46,"context_line":"        # port for the agent."},{"line_number":47,"context_line":"        if self.agent_extenstions_mgr:"},{"line_number":48,"context_line":"            device_id \u003d port[\u0027mac_address\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_cd4a80ac","line":45,"in_reply_to":"ba3cc151_c00488c1","updated":"2015-07-01 08:55:54.000000000","message":"Done","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"232402bfb0d08b585040156af81ce976978d744a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        #(moshele) call agent_extenstions_mgr only if it is a new"},{"line_number":46,"context_line":"        # port for the agent."},{"line_number":47,"context_line":"        if self.agent_extenstions_mgr:"},{"line_number":48,"context_line":"            device_id \u003d port[\u0027mac_address\u0027]"},{"line_number":49,"context_line":"            if device_id not in self.known_devices:"},{"line_number":50,"context_line":"                self.agent_extenstions_mgr.handle_port_extensions("},{"line_number":51,"context_line":"                    context, port)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_60eb3cb1","line":48,"updated":"2015-07-01 07:28:29.000000000","message":"should we use port id instead?","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        #(moshele) call agent_extenstions_mgr only if it is a new"},{"line_number":46,"context_line":"        # port for the agent."},{"line_number":47,"context_line":"        if self.agent_extenstions_mgr:"},{"line_number":48,"context_line":"            device_id \u003d port[\u0027mac_address\u0027]"},{"line_number":49,"context_line":"            if device_id not in self.known_devices:"},{"line_number":50,"context_line":"                self.agent_extenstions_mgr.handle_port_extensions("},{"line_number":51,"context_line":"                    context, port)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_d0e3f331","line":48,"in_reply_to":"ba3cc151_60eb3cb1","updated":"2015-07-01 08:55:54.000000000","message":"Done","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"df72c16a41e377f642e1f3113f57bb67d1e3ddb5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                self.known_devices.add(device_id)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @abc.abstractmethod"},{"line_number":55,"context_line":"    def daemon_loop(self):"},{"line_number":56,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_e073cc13","line":55,"updated":"2015-07-01 07:14:37.000000000","message":"not sure i understand here. when will this be used?","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e199a91315834f8ae5d234a1074fc798797bb30a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                self.known_devices.add(device_id)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @abc.abstractmethod"},{"line_number":55,"context_line":"    def daemon_loop(self):"},{"line_number":56,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_d068d389","line":55,"in_reply_to":"ba3cc151_e073cc13","updated":"2015-07-01 08:55:54.000000000","message":"I wanted to create common abstractmethod fo the deamonloop so that every l2agent will implement, but I guess I can remove it and in the future we can move more agents common code to here","commit_id":"75b3d43ece063683e84f7cce360e30cbad5e0d13"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"96e79a0b817d69cfcbad548bfbdd054c84d5f4d1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def initialize(self):"},{"line_number":40,"context_line":"        #TODO(QoS): get extensions from server ????"},{"line_number":41,"context_line":"        agent_extensions \u003d (\u0027qos\u0027, )"},{"line_number":42,"context_line":"        if agent_extensions:"},{"line_number":43,"context_line":"            self.agent_extensions_mgr \u003d ("},{"line_number":44,"context_line":"                agent_extensions_manager.AgentExtensionsManager("},{"line_number":45,"context_line":"                    agent_extensions))"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_3ca31851","line":42,"updated":"2015-07-01 09:57:07.000000000","message":"Maybe better to create Mngr anyway even if there is no extension.","commit_id":"a27ce9c44b73349fa289ac2cd557a72e84f3ac51"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"3e2323d4a162663aa3c7d43c63bd69de90f03afe","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def initialize(self):"},{"line_number":40,"context_line":"        #TODO(QoS): get extensions from server ????"},{"line_number":41,"context_line":"        agent_extensions \u003d (\u0027qos\u0027, )"},{"line_number":42,"context_line":"        if agent_extensions:"},{"line_number":43,"context_line":"            self.agent_extensions_mgr \u003d ("},{"line_number":44,"context_line":"                agent_extensions_manager.AgentExtensionsManager("},{"line_number":45,"context_line":"                    agent_extensions))"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_c401ee07","line":42,"in_reply_to":"ba3cc151_3ca31851","updated":"2015-07-01 13:19:42.000000000","message":"Done","commit_id":"a27ce9c44b73349fa289ac2cd557a72e84f3ac51"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"96e79a0b817d69cfcbad548bfbdd054c84d5f4d1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            self.agent_extensions_mgr.initialize(self.resource_rpc)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def process_extensions(self, context, port):"},{"line_number":49,"context_line":"        #Note(moshele) call agent_extensions_mgr only if it is a new"},{"line_number":50,"context_line":"        # port for the agent."},{"line_number":51,"context_line":"        if self.agent_extensions_mgr:"},{"line_number":52,"context_line":"            port_id \u003d port[\u0027port_id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_01934fa4","line":49,"updated":"2015-07-01 09:57:07.000000000","message":"As we discussed, this can be moved to the ExtensionMngr level, so L2Agent generic code will be very thin","commit_id":"a27ce9c44b73349fa289ac2cd557a72e84f3ac51"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"3e2323d4a162663aa3c7d43c63bd69de90f03afe","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            self.agent_extensions_mgr.initialize(self.resource_rpc)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def process_extensions(self, context, port):"},{"line_number":49,"context_line":"        #Note(moshele) call agent_extensions_mgr only if it is a new"},{"line_number":50,"context_line":"        # port for the agent."},{"line_number":51,"context_line":"        if self.agent_extensions_mgr:"},{"line_number":52,"context_line":"            port_id \u003d port[\u0027port_id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_5f012704","line":49,"in_reply_to":"ba3cc151_01934fa4","updated":"2015-07-01 13:19:42.000000000","message":"Done","commit_id":"a27ce9c44b73349fa289ac2cd557a72e84f3ac51"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b2cdcd06559aeaf35f9766b293cb016c0e01f536","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"Define stable abstract interface for L2 Agent"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This class initialize the agent extension manager and"},{"line_number":29,"context_line":"    provides"},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    def __init__(self, polling_interval):"},{"line_number":32,"context_line":"        self.polling_interval \u003d polling_interval"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_4d389e3d","line":29,"updated":"2015-07-01 14:02:23.000000000","message":"and provides something I guess","commit_id":"820480d534a00c7f7d1e174e38668e32b47d9e6a"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"db5f7fd385ca9139cca19234c5c24065ea8d8395","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"Define stable abstract interface for L2 Agent"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This class initialize the agent extension manager and"},{"line_number":29,"context_line":"    provides"},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    def __init__(self, polling_interval):"},{"line_number":32,"context_line":"        self.polling_interval \u003d polling_interval"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_cbe48fe2","line":29,"updated":"2015-07-01 16:14:45.000000000","message":"provides what?","commit_id":"f2ba19eebfb43571f85a17fede4c95e0dc27cf5b"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0998886aed4ea1b600f907260fe608b054e2a70f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"Define stable abstract interface for L2 Agent"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This class initialize the agent extension manager and"},{"line_number":29,"context_line":"    provides"},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    def __init__(self, polling_interval):"},{"line_number":32,"context_line":"        self.polling_interval \u003d polling_interval"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_9639caa6","line":29,"in_reply_to":"ba3cc151_cbe48fe2","updated":"2015-07-01 17:06:46.000000000","message":"will update","commit_id":"f2ba19eebfb43571f85a17fede4c95e0dc27cf5b"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"db5f7fd385ca9139cca19234c5c24065ea8d8395","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                agent_extensions))"},{"line_number":45,"context_line":"        self.agent_extensions_mgr.initialize(self.resource_rpc)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def process_extensions(self, context, port):"},{"line_number":48,"context_line":"        self.agent_extensions_mgr.handle_port("},{"line_number":49,"context_line":"            context, port)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_6b330363","line":47,"updated":"2015-07-01 16:14:45.000000000","message":"process_port_extensions?","commit_id":"f2ba19eebfb43571f85a17fede4c95e0dc27cf5b"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0998886aed4ea1b600f907260fe608b054e2a70f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                agent_extensions))"},{"line_number":45,"context_line":"        self.agent_extensions_mgr.initialize(self.resource_rpc)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def process_extensions(self, context, port):"},{"line_number":48,"context_line":"        self.agent_extensions_mgr.handle_port("},{"line_number":49,"context_line":"            context, port)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_36c47e8f","line":47,"in_reply_to":"ba3cc151_6b330363","updated":"2015-07-01 17:06:46.000000000","message":"will do","commit_id":"f2ba19eebfb43571f85a17fede4c95e0dc27cf5b"}],"setup.cfg":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"db5f7fd385ca9139cca19234c5c24065ea8d8395","unresolved":false,"context_lines":[{"line_number":202,"context_line":"neutron.ipam_drivers \u003d"},{"line_number":203,"context_line":"    fake \u003d neutron.tests.unit.ipam.fake_driver:FakeDriver"},{"line_number":204,"context_line":"    internal \u003d neutron.ipam.drivers.neutrondb_ipam.driver:NeutronDbPool"},{"line_number":205,"context_line":"neutron.agent.l2.extensions \u003d"},{"line_number":206,"context_line":"# These are for backwards compat with Icehouse notification_driver configuration values"},{"line_number":207,"context_line":"oslo.messaging.notify.drivers \u003d"},{"line_number":208,"context_line":"    neutron.openstack.common.notifier.log_notifier \u003d oslo_messaging.notify._impl_log:LogDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":11,"id":"ba3cc151_ebab9373","line":205,"updated":"2015-07-01 16:14:45.000000000","message":"missing part to what it equals","commit_id":"f2ba19eebfb43571f85a17fede4c95e0dc27cf5b"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0998886aed4ea1b600f907260fe608b054e2a70f","unresolved":false,"context_lines":[{"line_number":202,"context_line":"neutron.ipam_drivers \u003d"},{"line_number":203,"context_line":"    fake \u003d neutron.tests.unit.ipam.fake_driver:FakeDriver"},{"line_number":204,"context_line":"    internal \u003d neutron.ipam.drivers.neutrondb_ipam.driver:NeutronDbPool"},{"line_number":205,"context_line":"neutron.agent.l2.extensions \u003d"},{"line_number":206,"context_line":"# These are for backwards compat with Icehouse notification_driver configuration values"},{"line_number":207,"context_line":"oslo.messaging.notify.drivers \u003d"},{"line_number":208,"context_line":"    neutron.openstack.common.notifier.log_notifier \u003d oslo_messaging.notify._impl_log:LogDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":11,"id":"ba3cc151_76f686fa","line":205,"in_reply_to":"ba3cc151_ebab9373","updated":"2015-07-01 17:06:46.000000000","message":"It an empty one I add the qos in the qos patch. \nI added it as part of Ihar Hrachyshka comment.","commit_id":"f2ba19eebfb43571f85a17fede4c95e0dc27cf5b"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"f5be41863a695e8a09c8603aacd946f8c4b9096b","unresolved":false,"context_lines":[{"line_number":202,"context_line":"neutron.ipam_drivers \u003d"},{"line_number":203,"context_line":"    fake \u003d neutron.tests.unit.ipam.fake_driver:FakeDriver"},{"line_number":204,"context_line":"    internal \u003d neutron.ipam.drivers.neutrondb_ipam.driver:NeutronDbPool"},{"line_number":205,"context_line":"neutron.agent.l2.extensions \u003d"},{"line_number":206,"context_line":"# These are for backwards compat with Icehouse notification_driver configuration values"},{"line_number":207,"context_line":"oslo.messaging.notify.drivers \u003d"},{"line_number":208,"context_line":"    neutron.openstack.common.notifier.log_notifier \u003d oslo_messaging.notify._impl_log:LogDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":12,"id":"ba3cc151_32ab1c77","line":205,"updated":"2015-07-01 21:28:00.000000000","message":"is it ok for it to be empty?","commit_id":"cb158963b2a39ae19b7075944703c2313250d5fe"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"0397ef12d39ed391edb7871a009d0e02a5b11bb3","unresolved":false,"context_lines":[{"line_number":202,"context_line":"neutron.ipam_drivers \u003d"},{"line_number":203,"context_line":"    fake \u003d neutron.tests.unit.ipam.fake_driver:FakeDriver"},{"line_number":204,"context_line":"    internal \u003d neutron.ipam.drivers.neutrondb_ipam.driver:NeutronDbPool"},{"line_number":205,"context_line":"neutron.agent.l2.extensions \u003d"},{"line_number":206,"context_line":"# These are for backwards compat with Icehouse notification_driver configuration values"},{"line_number":207,"context_line":"oslo.messaging.notify.drivers \u003d"},{"line_number":208,"context_line":"    neutron.openstack.common.notifier.log_notifier \u003d oslo_messaging.notify._impl_log:LogDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":14,"id":"ba3cc151_98323e5d","line":205,"updated":"2015-07-02 05:28:49.000000000","message":"What one need to initialize here. Since, we are introducing it for the first time so notes will be helpful for others to understand.","commit_id":"0039ce04401a8ea1f0e2eca78f6d6889d2d82a5b"}]}
