)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"99f437b6fc0d22b7d6bc66c3392479181f5ab58f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"lb: Separate Agent Loop from LinuxBridge specific impl"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Rename br_mgr to mgr"},{"line_number":10,"context_line":"- Remove fix agent_id and delegate to manager class"},{"line_number":11,"context_line":"- Move agent_state confiugrations to manager class"},{"line_number":12,"context_line":"- Rename get_tap_device* to get_device*"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba8a016a_143f49d7","line":9,"updated":"2015-11-17 14:31:52.000000000","message":"This list doesn\u0027t really help to understand the aim of the change.\n\nIMO, it should explain that it defines a ML2 L2 agent base/abstract class","commit_id":"f4fb65829fb1b2bc3490768d056af31ce3521bd6"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"982763b205800035304aacbd30dc235c5cc1c842","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Andreas Scheuring \u003candreas.scheuring@de.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-17 17:19:52 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"lb: modular-l2-agt: Separate AgentLoop from LinuxBridge specific impl"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The goal is to extract the common agent code from the linuxbridge agent"},{"line_number":10,"context_line":"to share this code with other agents (e.g. sriov and new macvtap [1])."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba8a016a_54270a12","line":7,"updated":"2015-11-17 16:27:04.000000000","message":"reword to not exceed 65 chars","commit_id":"0815f316b13d1e8a4cca3c01e38e31ca9b4a4ec3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"This is a first step into the direction of a so called modular l2"},{"line_number":12,"context_line":"agent."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Therfore all linuxbridge implementation specifics are moved into the"},{"line_number":15,"context_line":"LinuxBridgeManager class. The manager class will be passed as argument"},{"line_number":16,"context_line":"into the common agent loop instead of instantiating it in its"},{"line_number":17,"context_line":"constructor."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"da6ed579_c95c284d","line":14,"updated":"2016-01-15 14:49:10.000000000","message":"Therefore","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"1121c9a3bc459c5c70b1bed3ca35b57e1383cacc","unresolved":false,"context_lines":[{"line_number":11,"context_line":"This is a first step into the direction of a so called modular l2"},{"line_number":12,"context_line":"agent."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Therfore all linuxbridge implementation specifics are moved into the"},{"line_number":15,"context_line":"LinuxBridgeManager class. The manager class will be passed as argument"},{"line_number":16,"context_line":"into the common agent loop instead of instantiating it in its"},{"line_number":17,"context_line":"constructor."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"da6ed579_3a02dbb4","line":14,"in_reply_to":"da6ed579_c95c284d","updated":"2016-01-15 18:07:39.000000000","message":"Done","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"between the common agent loop and the impl specific manager class."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"In a follow up patchset, the common agent loop will be moved into a"},{"line_number":23,"context_line":"new file. This has not yet happend to simplify tracking the code"},{"line_number":24,"context_line":"changes during review."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"[1] https://bugs.launchpad.net/neutron/+bug/1480979"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"da6ed579_a90f7435","line":23,"updated":"2016-01-15 14:49:10.000000000","message":"happened","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"1121c9a3bc459c5c70b1bed3ca35b57e1383cacc","unresolved":false,"context_lines":[{"line_number":20,"context_line":"between the common agent loop and the impl specific manager class."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"In a follow up patchset, the common agent loop will be moved into a"},{"line_number":23,"context_line":"new file. This has not yet happend to simplify tracking the code"},{"line_number":24,"context_line":"changes during review."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"[1] https://bugs.launchpad.net/neutron/+bug/1480979"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"da6ed579_5afd4faf","line":23,"in_reply_to":"da6ed579_a90f7435","updated":"2016-01-15 18:07:39.000000000","message":"Done","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"In a follow up patchset, the common agent loop will be moved into a"},{"line_number":23,"context_line":"new file. This has not yet happend to simplify tracking the code"},{"line_number":24,"context_line":"changes during review."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"[1] https://bugs.launchpad.net/neutron/+bug/1480979"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"da6ed579_5f61cad1","line":24,"updated":"2016-01-15 14:49:10.000000000","message":"Thanks for that! Really helps.","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"}],"neutron/agent/common/common_agent_manager_base.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"8a1e5913e6b60386b009e8702e3248ca7467bad8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_afa4f2a5","line":1,"updated":"2015-11-17 12:38:33.000000000","message":"I don\u0027t understand why this module is not in neutron.plugins.ml2 or a one of it subpackages","commit_id":"f4fb65829fb1b2bc3490768d056af31ce3521bd6"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"27da68b99faf8a919c242a10f9560e958dd0304b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_05107da7","line":1,"in_reply_to":"ba8a016a_25d10158","updated":"2015-11-17 13:05:47.000000000","message":"i would suggest:\n\n neutron.plugins.ml2.drivers.agent","commit_id":"f4fb65829fb1b2bc3490768d056af31ce3521bd6"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"d984231d2503bc8ef4633f694b7e84b564d65610","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_25d10158","line":1,"in_reply_to":"ba8a016a_afa4f2a5","updated":"2015-11-17 12:56:42.000000000","message":"I\u0027m open to suggestions where to put it. I will look out for a better location somewhere beyond ml2.","commit_id":"f4fb65829fb1b2bc3490768d056af31ce3521bd6"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"8a1e5913e6b60386b009e8702e3248ca7467bad8","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import abc"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NetworkSegment(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_afcb9252","line":18,"updated":"2015-11-17 12:38:33.000000000","message":"These imports should not be grouped: abc is stdlib, six is not","commit_id":"f4fb65829fb1b2bc3490768d056af31ce3521bd6"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"d984231d2503bc8ef4633f694b7e84b564d65610","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import abc"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NetworkSegment(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_e5a53904","line":18,"in_reply_to":"ba8a016a_afcb9252","updated":"2015-11-17 12:56:42.000000000","message":"ok","commit_id":"f4fb65829fb1b2bc3490768d056af31ce3521bd6"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"8a1e5913e6b60386b009e8702e3248ca7467bad8","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def __init__(self):"},{"line_number":33,"context_line":"        self.network_map \u003d {}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @abc.abstractproperty"},{"line_number":36,"context_line":"    def agent_binary(self):"},{"line_number":37,"context_line":"        \"\"\"Agent binary String.\"\"\""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_0f873ed8","line":35,"updated":"2015-11-17 12:38:33.000000000","message":"abstractproperty is deprecated since py3.3[1]\n\n[1] https://docs.python.org/3.5/library/abc.html#abc.abstractproperty","commit_id":"f4fb65829fb1b2bc3490768d056af31ce3521bd6"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"d984231d2503bc8ef4633f694b7e84b564d65610","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def __init__(self):"},{"line_number":33,"context_line":"        self.network_map \u003d {}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @abc.abstractproperty"},{"line_number":36,"context_line":"    def agent_binary(self):"},{"line_number":37,"context_line":"        \"\"\"Agent binary String.\"\"\""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_656389dd","line":35,"in_reply_to":"ba8a016a_0f873ed8","updated":"2015-11-17 12:56:42.000000000","message":"wasn\u0027t aware of that - thanks for this hint!","commit_id":"f4fb65829fb1b2bc3490768d056af31ce3521bd6"}],"neutron/plugins/ml2/drivers/agent/agent_manager_base.py":[{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"982763b205800035304aacbd30dc235c5cc1c842","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":30,"context_line":"class AgentManagerBase(object):"},{"line_number":31,"context_line":"    \"\"\"Base class for managers that are used with the common agent loop."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    This class must be inherited by a manager class that is used"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_745a4e52","line":30,"updated":"2015-11-17 16:27:04.000000000","message":"what about versioning?","commit_id":"0815f316b13d1e8a4cca3c01e38e31ca9b4a4ec3"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"982763b205800035304aacbd30dc235c5cc1c842","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @abc.abstractmethod"},{"line_number":48,"context_line":"    def remove_port_binding(self, network_id, physical_network, interface_id):"},{"line_number":49,"context_line":"        \"\"\"Set\u0027s the device to admin_state_down. "},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        Will be removed with with patchset"},{"line_number":52,"context_line":"        https://review.openstack.org/#/c/193485/"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_1478a2f1","line":49,"updated":"2015-11-17 16:27:04.000000000","message":"remove blank","commit_id":"0815f316b13d1e8a4cca3c01e38e31ca9b4a4ec3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class NetworkSegment(object):"},{"line_number":26,"context_line":"    def __init__(self, network_type, physical_network, segmentation_id):"},{"line_number":27,"context_line":"        self.network_type \u003d network_type"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_9f23c255","line":24,"updated":"2016-01-15 14:49:10.000000000","message":"Those classes are not supposed to be used by out-of-tree code and are not part of public neutron/ml2 API. I think we should make it explicit somehow. Either by renaming those classes to start with underscores, or maybe docstring.","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        \"\"\""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @abc.abstractmethod"},{"line_number":100,"context_line":"    def get_devices(self):"},{"line_number":101,"context_line":"        \"\"\"Get all relevant devices of this host."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        Get a list of all devices of a certain type (e.g. tap or macvtap) that"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_bf6b261d","line":100,"updated":"2016-01-15 14:49:10.000000000","message":"should the name maybe be more explicit, like \u0027get_all_devices\u0027?","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        \"\"\"Get all relevant devices of this host."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        Get a list of all devices of a certain type (e.g. tap or macvtap) that"},{"line_number":104,"context_line":"        the manager manager class supports. Usually those list is based on"},{"line_number":105,"context_line":"        the devices that show up in the sysfs. It\u0027s NOT restricted to devices"},{"line_number":106,"context_line":"        that are already managed by the manager class."},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_3f0ad68a","line":104,"updated":"2016-01-15 14:49:10.000000000","message":"manager manager -\u003e manager, those -\u003e this","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        the devices that show up in the sysfs. It\u0027s NOT restricted to devices"},{"line_number":106,"context_line":"        that are already managed by the manager class."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        :return: list -- the list of all devices"},{"line_number":109,"context_line":"        \"\"\""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_bafb3478","line":108,"updated":"2016-01-15 14:49:10.000000000","message":"what\u0027s the format of devices?","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def get_rpc_callbacks(self, context, agent, sg_agent):"},{"line_number":121,"context_line":"        \"\"\"Returns the class containing all the agent rpc callback methods."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        :return: class - the class containing the agent rpc callback methods"},{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_7a761c07","line":123,"updated":"2016-01-15 14:49:10.000000000","message":"specify that it should reflect CommonAgentManagerRpcCallBackBase interface.","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    def get_rpc_consumers(self):"},{"line_number":128,"context_line":"        \"\"\"Get a list of topics for which an RPC consumer should be created"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        :return: list -- A list of topics. Each topic has a name, an"},{"line_number":131,"context_line":"                         operation, and an optional host param keying the"},{"line_number":132,"context_line":"                         subscription to topic.host for plugin calls."},{"line_number":133,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_1ad360d6","line":130,"updated":"2016-01-15 14:49:10.000000000","message":"so what\u0027s the format of the topic? is it some tuple?","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @abc.abstractmethod"},{"line_number":136,"context_line":"    def plug_interface(self, network_id, network_type, physical_network,"},{"line_number":137,"context_line":"                      segmentation_id, port_id):"},{"line_number":138,"context_line":"        \"\"\"Plug the interface (device)."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        :param network_id: The UUID of the Neutron network"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_3af1846b","line":137,"updated":"2016-01-15 14:49:10.000000000","message":"indent one space more","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        \"\"\"Plug the interface (device)."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        :param network_id: The UUID of the Neutron network"},{"line_number":141,"context_line":"        :param network_type: The type of the Neutron network"},{"line_number":142,"context_line":"        :param physical_network: The physical network used by the Neutron"},{"line_number":143,"context_line":"        network."},{"line_number":144,"context_line":"        :param segmentation_id: The segmentation_id used by the Neutron network"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_daae282d","line":141,"updated":"2016-01-15 14:49:10.000000000","message":"params at line 141 to 144 could probably use NetworkSegment object instead? That would make it more clear what\u0027s the interface (as long as you describe the NetworkSegment class itself, that you should since it\u0027s part of the API).","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        network."},{"line_number":144,"context_line":"        :param segmentation_id: The segmentation_id used by the Neutron network"},{"line_number":145,"context_line":"        :param port_id: The UUID of the Neutron port used."},{"line_number":146,"context_line":"        :return: bool -- True if the interface is plugged now."},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_1a14c04a","line":146,"updated":"2016-01-15 14:49:10.000000000","message":"what is the returned value to be used for? is it an error indicator, or we assume it\u0027s ok when impl does not plug an interface when requested?","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @abc.abstractmethod"},{"line_number":150,"context_line":"    def setup_arp_spoofing_protection(self, device, device_details):"},{"line_number":151,"context_line":"        \"\"\"Setup the arp spoofing portection for the given port."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        :param device: The device to set up arp spoofing rules for."},{"line_number":154,"context_line":"        :param device_details: The device_details map"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_3502f70a","line":151,"updated":"2016-01-15 14:49:10.000000000","message":"protection","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def setup_arp_spoofing_protection(self, device, device_details):"},{"line_number":151,"context_line":"        \"\"\"Setup the arp spoofing portection for the given port."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        :param device: The device to set up arp spoofing rules for."},{"line_number":154,"context_line":"        :param device_details: The device_details map"},{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_152253a3","line":153,"updated":"2016-01-15 14:49:10.000000000","message":"what\u0027s device? is it port id maybe?","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    def delete_arp_spoofing_protection(self, devices):"},{"line_number":159,"context_line":"        \"\"\"Remove the arp spoofing protection for the given port."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        :param devices: List of devices that have been removed."},{"line_number":162,"context_line":"        \"\"\""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_553d2b8d","line":161,"updated":"2016-01-15 14:49:10.000000000","message":"The format of devices is really unclear","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        host"},{"line_number":170,"context_line":"        \"\"\""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def add_network(self, device_details):"},{"line_number":173,"context_line":"        \"\"\"Add a network to the agent internal network list."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param device_details: The device details map received from the neutron"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_d51efb0a","line":172,"updated":"2016-01-15 14:49:10.000000000","message":"I think network_map should not be accessed directly from implementation. I guess we may need more public methods to operate on the map, like get_network, delete_network and friends.\n\nAnd if you go this route, please add some tests that would target the code.","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c0f639aaf9785333c73f92eab720a92ac2d824e0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                                        device_details.get(\u0027segmentation_id\u0027))"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def get_updated_devices(self):"},{"line_number":90,"context_line":"        \"blabla\""},{"line_number":91,"context_line":"        return self.updated_devices"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def clear_updated_devices(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba63e191_40c2fd86","line":90,"range":{"start_line":90,"start_character":9,"end_line":90,"end_character":15},"updated":"2016-01-19 14:41:01.000000000","message":"update docstring","commit_id":"455b82a7d1d13d96ecdf21e93c85a702c8e9e468"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c0f639aaf9785333c73f92eab720a92ac2d824e0","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        return self.updated_devices"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def clear_updated_devices(self):"},{"line_number":94,"context_line":"        \"blabla\""},{"line_number":95,"context_line":"        self.updated_devices \u003d set()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ba63e191_6041410b","line":94,"range":{"start_line":94,"start_character":9,"end_line":94,"end_character":15},"updated":"2016-01-19 14:41:01.000000000","message":"update docstring","commit_id":"455b82a7d1d13d96ecdf21e93c85a702c8e9e468"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c0f639aaf9785333c73f92eab720a92ac2d824e0","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        \"\"\"Returns the class containing all the agent rpc callback methods"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        :return: class - the class containing the agent rpc callback methods."},{"line_number":162,"context_line":"        It must reflect the CommonAgentManagerRpcCallBackBase Interface."},{"line_number":163,"context_line":"        \"\"\""},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba63e191_20cfc980","line":162,"range":{"start_line":162,"start_character":10,"end_line":162,"end_character":11},"updated":"2016-01-19 14:41:01.000000000","message":"indentation","commit_id":"455b82a7d1d13d96ecdf21e93c85a702c8e9e468"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c0f639aaf9785333c73f92eab720a92ac2d824e0","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        :param network_id: The UUID of the Neutron network"},{"line_number":181,"context_line":"        :param network_type: The type of the Neutron network"},{"line_number":182,"context_line":"        :param physical_network: The physical network used by the Neutron"},{"line_number":183,"context_line":"        network."},{"line_number":184,"context_line":"        :param segmentation_id: The segmentation_id used by the Neutron network"},{"line_number":185,"context_line":"        :param port_id: The UUID of the Neutron port used."},{"line_number":186,"context_line":"        :param device_owner: The device owner of the port"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba63e191_4093dd5b","line":183,"range":{"start_line":183,"start_character":8,"end_line":183,"end_character":15},"updated":"2016-01-19 14:41:01.000000000","message":"indentation","commit_id":"455b82a7d1d13d96ecdf21e93c85a702c8e9e468"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c0f639aaf9785333c73f92eab720a92ac2d824e0","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        :param port_id: The UUID of the Neutron port used."},{"line_number":186,"context_line":"        :param device_owner: The device owner of the port"},{"line_number":187,"context_line":"        :return: bool -- True if the interface is plugged now. False if the"},{"line_number":188,"context_line":"        interface could not be plugged."},{"line_number":189,"context_line":"        \"\"\""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba63e191_009de564","line":188,"range":{"start_line":188,"start_character":18,"end_line":188,"end_character":23},"updated":"2016-01-19 14:41:01.000000000","message":"indentation all over this file","commit_id":"455b82a7d1d13d96ecdf21e93c85a702c8e9e468"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6558aaef39bc24b92a836fba09dc1a5b480533aa","unresolved":false,"context_lines":[{"line_number":28,"context_line":"class NetworkSegment(object):"},{"line_number":29,"context_line":"    \"\"\"Represents a Neutron network segment"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    This is a Neutron internal class and is NOT part of the public Neutron/ML2"},{"line_number":32,"context_line":"    API. It should NOT be used by out-of-tree code!"},{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":"    def __init__(self, network_type, physical_network, segmentation_id):"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_d687ca10","line":31,"updated":"2016-01-20 13:42:01.000000000","message":"Instead of putting those comments, it\u0027s quite common to just prepend an underscore to private symbols. I suggest we go that route instead of copy-pasting the same text in each docstring.","commit_id":"99214ddc0ac2f979116f0b684ee26edb0067a232"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"1be6a17db819f8b5c4dc94219a5b222a38d051f2","unresolved":false,"context_lines":[{"line_number":28,"context_line":"class NetworkSegment(object):"},{"line_number":29,"context_line":"    \"\"\"Represents a Neutron network segment"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    This is a Neutron internal class and is NOT part of the public Neutron/ML2"},{"line_number":32,"context_line":"    API. It should NOT be used by out-of-tree code!"},{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":"    def __init__(self, network_type, physical_network, segmentation_id):"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_73686bbb","line":31,"in_reply_to":"9a68dd71_d687ca10","updated":"2016-01-20 16:40:10.000000000","message":"Done","commit_id":"99214ddc0ac2f979116f0b684ee26edb0067a232"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6558aaef39bc24b92a836fba09dc1a5b480533aa","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def get_all_devices(self):"},{"line_number":141,"context_line":"        \"\"\"Get a list of all devices of the managed type from this host"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        A device in this context is a String that represents an network device."},{"line_number":144,"context_line":"        This can for example be the name of the device or its MAC address."},{"line_number":145,"context_line":"        This value will be stored in the Plug-in and be part of the"},{"line_number":146,"context_line":"        device_details."}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_96e632e7","line":143,"updated":"2016-01-20 13:42:01.000000000","message":"a network device","commit_id":"99214ddc0ac2f979116f0b684ee26edb0067a232"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"1be6a17db819f8b5c4dc94219a5b222a38d051f2","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def get_all_devices(self):"},{"line_number":141,"context_line":"        \"\"\"Get a list of all devices of the managed type from this host"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        A device in this context is a String that represents an network device."},{"line_number":144,"context_line":"        This can for example be the name of the device or its MAC address."},{"line_number":145,"context_line":"        This value will be stored in the Plug-in and be part of the"},{"line_number":146,"context_line":"        device_details."}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_d35b572d","line":143,"in_reply_to":"9a68dd71_96e632e7","updated":"2016-01-20 16:40:10.000000000","message":"Done","commit_id":"99214ddc0ac2f979116f0b684ee26edb0067a232"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6558aaef39bc24b92a836fba09dc1a5b480533aa","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        :return: list -- A list of topics. Each topic in this list is a list"},{"line_number":175,"context_line":"                         consisting of a name, an operation, and an optional"},{"line_number":176,"context_line":"                         host param  keying the  subscription to topic.host for"},{"line_number":177,"context_line":"                         plugin calls."},{"line_number":178,"context_line":"        \"\"\""},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_162002f7","line":176,"updated":"2016-01-20 13:42:01.000000000","message":"some redundant spaces here","commit_id":"99214ddc0ac2f979116f0b684ee26edb0067a232"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"1be6a17db819f8b5c4dc94219a5b222a38d051f2","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        :return: list -- A list of topics. Each topic in this list is a list"},{"line_number":175,"context_line":"                         consisting of a name, an operation, and an optional"},{"line_number":176,"context_line":"                         host param  keying the  subscription to topic.host for"},{"line_number":177,"context_line":"                         plugin calls."},{"line_number":178,"context_line":"        \"\"\""},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_b36d83ce","line":176,"in_reply_to":"9a68dd71_162002f7","updated":"2016-01-20 16:40:10.000000000","message":"eagle eye ;)","commit_id":"99214ddc0ac2f979116f0b684ee26edb0067a232"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6558aaef39bc24b92a836fba09dc1a5b480533aa","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :param network_id: The UUID of the Neutron network"},{"line_number":186,"context_line":"        :param network_type: The type of the Neutron network"},{"line_number":187,"context_line":"        :param physical_network: The physical network used by the Neutron"},{"line_number":188,"context_line":"            network."},{"line_number":189,"context_line":"        :param segmentation_id: The segmentation_id used by the Neutron network"},{"line_number":190,"context_line":"        :param port_id: The UUID of the Neutron port used."}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_b6ec9690","line":187,"updated":"2016-01-20 13:42:01.000000000","message":"I still think that it would be better if NetworkSegment is used to pass those values into the common class. I also think that it would be better to allow agents to construct the object before passing it to add_network(), instead of proxying device_details in the common class.\n\nI think it would make API a bit more clean and better defined.","commit_id":"99214ddc0ac2f979116f0b684ee26edb0067a232"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"1be6a17db819f8b5c4dc94219a5b222a38d051f2","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :param network_id: The UUID of the Neutron network"},{"line_number":186,"context_line":"        :param network_type: The type of the Neutron network"},{"line_number":187,"context_line":"        :param physical_network: The physical network used by the Neutron"},{"line_number":188,"context_line":"            network."},{"line_number":189,"context_line":"        :param segmentation_id: The segmentation_id used by the Neutron network"},{"line_number":190,"context_line":"        :param port_id: The UUID of the Neutron port used."}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_734b8b2c","line":187,"in_reply_to":"9a68dd71_b6ec9690","updated":"2016-01-20 16:40:10.000000000","message":"Done","commit_id":"99214ddc0ac2f979116f0b684ee26edb0067a232"},{"author":{"_account_id":11255,"name":"Dustin Lundquist","username":"dustin.lundquist","inactive":true},"change_message_id":"a1e5ef1ac00368050547af791c1e3ace0908f3fd","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        return self.updated_devices"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def clear_updated_devices(self):"},{"line_number":83,"context_line":"        \"\"\"Resets the list that stores updated devices.\"\"\""},{"line_number":84,"context_line":"        self.updated_devices \u003d set()"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a68dd71_58a692c2","line":82,"updated":"2016-01-20 18:58:02.000000000","message":"This interface creates an opportunity for a race condition, since fetching the set of updated devices is a separate operation from clearing that set. Given comment in LinuxBridgeNeutronAgentRPC scan_devices() maybe this should be one method that returns that replaces the set and returns the old set rather than depending on the consumer to involve itself with threading details.","commit_id":"ab2c4c185259bdfed03b9e6bd7ce3a7d45c6609b"},{"author":{"_account_id":11255,"name":"Dustin Lundquist","username":"dustin.lundquist","inactive":true},"change_message_id":"40b130e9f4d8378f2c64131dd37b35a00dc05c57","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.context \u003d context"},{"line_number":42,"context_line":"        self.agent \u003d agent"},{"line_number":43,"context_line":"        self.sg_agent \u003d sg_agent"},{"line_number":44,"context_line":"        self.network_map \u003d {}"},{"line_number":45,"context_line":"        # stores received port_updates and port_deletes for"},{"line_number":46,"context_line":"        # processing by the main loop"},{"line_number":47,"context_line":"        self.updated_devices \u003d set()"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_1f55171c","line":44,"updated":"2016-01-21 22:41:45.000000000","message":"Moving network_map move from LinuxBridgeManager to here rather than _CommonAgentManagerBase may warrant mention in the commit message. It does look like it is more tightly coupled with RPC than manager.","commit_id":"0c51f8c3f67747c1c8c65310c2a9a52ae3bcb47e"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"f8aa361ae54e8d1d867907fa5301133667d383f4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.context \u003d context"},{"line_number":42,"context_line":"        self.agent \u003d agent"},{"line_number":43,"context_line":"        self.sg_agent \u003d sg_agent"},{"line_number":44,"context_line":"        self.network_map \u003d {}"},{"line_number":45,"context_line":"        # stores received port_updates and port_deletes for"},{"line_number":46,"context_line":"        # processing by the main loop"},{"line_number":47,"context_line":"        self.updated_devices \u003d set()"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_b1e8b211","line":44,"in_reply_to":"9a68dd71_1f55171c","updated":"2016-01-22 07:15:24.000000000","message":"Done","commit_id":"0c51f8c3f67747c1c8c65310c2a9a52ae3bcb47e"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"84bd999b17a616ec0f959372120612dff443c74d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class _NetworkSegment(object):"},{"line_number":26,"context_line":"    \"\"\"Represents a Neutron network segment\"\"\""},{"line_number":27,"context_line":"    def __init__(self, network_type, physical_network, segmentation_id):"},{"line_number":28,"context_line":"        self.network_type \u003d network_type"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_5d2e1b44","line":25,"updated":"2016-01-22 12:35:22.000000000","message":"itto","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"84bd999b17a616ec0f959372120612dff443c74d","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":34,"context_line":"class _CommonAgentManagerRpcCallBackBase(object):"},{"line_number":35,"context_line":"    \"\"\"Base class for managers RPC callbacks."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    This class must be inherited by a RPC callback class that is used"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_ddfbebbf","line":34,"updated":"2016-01-22 12:35:22.000000000","message":"You should remove the _ otherwise it\u0027s a private class","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"079742620c9e47819cb0ba33480afd0ee90a0537","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":34,"context_line":"class _CommonAgentManagerRpcCallBackBase(object):"},{"line_number":35,"context_line":"    \"\"\"Base class for managers RPC callbacks."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    This class must be inherited by a RPC callback class that is used"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_f9a59aa1","line":34,"in_reply_to":"9a68dd71_ddfbebbf","updated":"2016-01-22 14:52:52.000000000","message":"This was basically a whish from Ihar. The point is, that we wanted to make clear that those classes do not belong to the public ML2 API and should not be used out-of-tree. \n\nFirst I added comments with such a note to each class docstring. Ihar recommended to just make them private instead of copying the comment to each class. So I did not change it in the latest patchset.\n\nIs there another way of making this clear?","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"84bd999b17a616ec0f959372120612dff443c74d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def get_and_clear_updated_devices(self):"},{"line_number":76,"context_line":"        \"\"\"Get and clear the list of devices for which a update was received."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        :return: list - A list with updated devices. Format is [\u0027tap1\u0027, \u0027tap2\u0027]"},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Save and reinitialize the set variable that the port_update RPC uses."}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_e06ac8b2","line":78,"updated":"2016-01-22 12:35:22.000000000","message":"it returns a set not a list","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"079742620c9e47819cb0ba33480afd0ee90a0537","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def get_and_clear_updated_devices(self):"},{"line_number":76,"context_line":"        \"\"\"Get and clear the list of devices for which a update was received."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        :return: list - A list with updated devices. Format is [\u0027tap1\u0027, \u0027tap2\u0027]"},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Save and reinitialize the set variable that the port_update RPC uses."}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_390d72e8","line":78,"in_reply_to":"9a68dd71_e06ac8b2","updated":"2016-01-22 14:52:52.000000000","message":"Done","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"84bd999b17a616ec0f959372120612dff443c74d","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":90,"context_line":"class _CommonAgentManagerBase(object):"},{"line_number":91,"context_line":"    \"\"\"Base class for managers that are used with the common agent loop."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    This class must be inherited by a manager class that is used"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_9d01f3b1","line":90,"updated":"2016-01-22 12:35:22.000000000","message":"itto","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"84bd999b17a616ec0f959372120612dff443c74d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\"Enforce admin_state for a port"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :param port_id: The UUID of the Neutron Port"},{"line_number":102,"context_line":"        :param param: True for admin_state_up, False for admin_state_down"},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_dd976b46","line":102,"range":{"start_line":102,"start_character":15,"end_line":102,"end_character":20},"updated":"2016-01-22 12:35:22.000000000","message":"s/param/admin_state_up","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"079742620c9e47819cb0ba33480afd0ee90a0537","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\"Enforce admin_state for a port"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :param port_id: The UUID of the Neutron Port"},{"line_number":102,"context_line":"        :param param: True for admin_state_up, False for admin_state_down"},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_f9fb5abf","line":102,"range":{"start_line":102,"start_character":15,"end_line":102,"end_character":20},"in_reply_to":"9a68dd71_dd976b46","updated":"2016-01-22 14:52:52.000000000","message":"Done","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"84bd999b17a616ec0f959372120612dff443c74d","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        The content of this map is part of the agent state reports to the"},{"line_number":110,"context_line":"        neutron server."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        :return: map -- the map containing the configuration values"},{"line_number":113,"context_line":"        \"\"\""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_5ddffb0c","line":112,"updated":"2016-01-22 12:35:22.000000000","message":"iirc, it should be:\n\n :returns: map containing configuration values\n :rtype: dict\n # or\n :rtype: collections.Mapping","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"079742620c9e47819cb0ba33480afd0ee90a0537","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        The content of this map is part of the agent state reports to the"},{"line_number":110,"context_line":"        neutron server."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        :return: map -- the map containing the configuration values"},{"line_number":113,"context_line":"        \"\"\""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_19f98ec7","line":112,"in_reply_to":"9a68dd71_5ddffb0c","updated":"2016-01-22 14:52:52.000000000","message":"Done: specified dict as rtype","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"9b438d1474a84f9070e37eb30a1aa79a36417826","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":34,"context_line":"class _CommonAgentManagerRpcCallBackBase(object):"},{"line_number":35,"context_line":"    \"\"\"Base class for managers RPC callbacks."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    This class must be inherited by a RPC callback class that is used"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a5de9d1_8ac4a440","line":34,"updated":"2016-01-28 00:30:54.000000000","message":"Follow-up to PS26 comments: \n\nAccording to python coding style, classes starting with \"_\" are private to their module and we should not use such convention with a different meaning to avoid any trouble: to me, it\u0027s unclear that they are ML2 internal classes instead of private classes.\n \nIMO, the right approach to highlight they are ML2 internal classes is to add a remark in the docstring as you proposed previously.","commit_id":"8bb6558b64ac53821af6db5a8a0529a1098f1178"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"0182ebf4927e38e0b12cc62eb774070dce94b8ed","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":34,"context_line":"class _CommonAgentManagerRpcCallBackBase(object):"},{"line_number":35,"context_line":"    \"\"\"Base class for managers RPC callbacks."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    This class must be inherited by a RPC callback class that is used"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a5de9d1_8c2b5930","line":34,"in_reply_to":"7a5de9d1_8ac4a440","updated":"2016-01-28 07:30:47.000000000","message":"I\u0027ll talk to Ihar regarding this and push a follow up patchset! Thanks!","commit_id":"8bb6558b64ac53821af6db5a8a0529a1098f1178"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"51819bbfac7a99d7651623ee01880c8c7e1fad8b","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        :return: list -- A list of topics. Each topic in this list is a list"},{"line_number":160,"context_line":"                         consisting of a name, an operation, and an optional"},{"line_number":161,"context_line":"                         host param  keying the subscription to topic.host for"},{"line_number":162,"context_line":"                         plugin calls."},{"line_number":163,"context_line":"        \"\"\""},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"7a5de9d1_0068baf4","line":161,"updated":"2016-01-27 11:45:57.000000000","message":"more redundant spaces here! but let\u0027s leave as-is, let\u0027s merge the thing.","commit_id":"8bb6558b64ac53821af6db5a8a0529a1098f1178"}],"neutron/plugins/ml2/drivers/agent/config.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6558aaef39bc24b92a836fba09dc1a5b480533aa","unresolved":false,"context_lines":[{"line_number":26,"context_line":"               help\u003d_(\"Set new timeout in seconds for new rpc calls after \""},{"line_number":27,"context_line":"                      \"agent receives SIGTERM. If value is set to 0, rpc \""},{"line_number":28,"context_line":"                      \"timeout won\u0027t be changed\")),"},{"line_number":29,"context_line":"    # TODO(kevinbenton): The following opt is duplicated between the OVS agent"},{"line_number":30,"context_line":"    # and the Linuxbridge agent to make it easy to back-port. These shared opts"},{"line_number":31,"context_line":"    # should be moved into a common agent config options location as part of"},{"line_number":32,"context_line":"    # the deduplication work."}],"source_content_type":"text/x-python","patch_set":22,"id":"9a68dd71_b6ba566d","line":29,"updated":"2016-01-20 13:42:01.000000000","message":"does that TODO still apply?","commit_id":"99214ddc0ac2f979116f0b684ee26edb0067a232"}],"neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py":[{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"f7a865ca803e89a37a333a0a22048d2d70caf952","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self.segmentation_id \u003d segmentation_id"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class LinuxBridgeManager(object):"},{"line_number":77,"context_line":"    def __init__(self, bridge_mappings, interface_mappings):"},{"line_number":78,"context_line":"        super(LinuxBridgeManager, self).__init__()"},{"line_number":79,"context_line":"        self.bridge_mappings \u003d bridge_mappings"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_31786a8f","line":76,"updated":"2015-11-17 10:50:50.000000000","message":"Inheritance from Interface missing","commit_id":"f4fb65829fb1b2bc3490768d056af31ce3521bd6"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"f7a865ca803e89a37a333a0a22048d2d70caf952","unresolved":false,"context_lines":[{"line_number":847,"context_line":"               physical_interfaces."},{"line_number":848,"context_line":"        :param polling_interval: interval (secs) to poll DB."},{"line_number":849,"context_line":"        :param quitting_rpc_timeout: timeout in seconds for rpc calls after"},{"line_number":850,"context_line":"               stop is called."},{"line_number":851,"context_line":"        \"\"\""},{"line_number":852,"context_line":"        super(CommonAgentLoop, self).__init__()"},{"line_number":853,"context_line":"        self.mgr \u003d manager"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_71e35234","line":850,"updated":"2015-11-17 10:50:50.000000000","message":"update docstring","commit_id":"f4fb65829fb1b2bc3490768d056af31ce3521bd6"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"982763b205800035304aacbd30dc235c5cc1c842","unresolved":false,"context_lines":[{"line_number":849,"context_line":"               stop is called."},{"line_number":850,"context_line":"        \"\"\""},{"line_number":851,"context_line":"        super(CommonAgentLoop, self).__init__()"},{"line_number":852,"context_line":"        self.mgr \u003d manager"},{"line_number":853,"context_line":"        self.polling_interval \u003d polling_interval"},{"line_number":854,"context_line":"        self.quitting_rpc_timeout \u003d quitting_rpc_timeout"},{"line_number":855,"context_line":"        self.agent_type \u003d agent_type"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_54038a42","line":852,"updated":"2015-11-17 16:27:04.000000000","message":"enforce that manager object inherits from the interface","commit_id":"0815f316b13d1e8a4cca3c01e38e31ca9b4a4ec3"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"8b38393b19bf15f40968223c9c81764e72113de5","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                      segmentation_id, port_id):"},{"line_number":455,"context_line":"        self.network_map[network_id] \u003d NetworkSegment(network_type,"},{"line_number":456,"context_line":"                                                      physical_network,"},{"line_number":457,"context_line":"                                                      segmentation_id)"},{"line_number":458,"context_line":"        tap_device_name \u003d self.get_tap_device_name(port_id)"},{"line_number":459,"context_line":"        return self.add_tap_interface(network_id, network_type,"},{"line_number":460,"context_line":"                                      physical_network, segmentation_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_ab6c1b37","side":"PARENT","line":457,"updated":"2015-11-20 16:01:59.000000000","message":"Can this be safely dropped?","commit_id":"2c3496db90d1665e243c4b946d1ed11ae13b5ccb"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"93601591ccef1bbfb21ab25c9ec1fe304e868b6b","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                      segmentation_id, port_id):"},{"line_number":455,"context_line":"        self.network_map[network_id] \u003d NetworkSegment(network_type,"},{"line_number":456,"context_line":"                                                      physical_network,"},{"line_number":457,"context_line":"                                                      segmentation_id)"},{"line_number":458,"context_line":"        tap_device_name \u003d self.get_tap_device_name(port_id)"},{"line_number":459,"context_line":"        return self.add_tap_interface(network_id, network_type,"},{"line_number":460,"context_line":"                                      physical_network, segmentation_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_97a3469e","side":"PARENT","line":457,"in_reply_to":"ba8a016a_2e810e4e","updated":"2015-11-23 09:23:05.000000000","message":"And the reason for doing this just came back to my mind: The add_interface method is part of the impl specific manager class. But adding a network to the map must happen for each impl - and I cannot force each impl to do this. That\u0027s why I moved it down to the common part.","commit_id":"2c3496db90d1665e243c4b946d1ed11ae13b5ccb"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"624cb3b2336cedd71a6ef3f8abe4501eba3055ef","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                      segmentation_id, port_id):"},{"line_number":455,"context_line":"        self.network_map[network_id] \u003d NetworkSegment(network_type,"},{"line_number":456,"context_line":"                                                      physical_network,"},{"line_number":457,"context_line":"                                                      segmentation_id)"},{"line_number":458,"context_line":"        tap_device_name \u003d self.get_tap_device_name(port_id)"},{"line_number":459,"context_line":"        return self.add_tap_interface(network_id, network_type,"},{"line_number":460,"context_line":"                                      physical_network, segmentation_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_2e810e4e","side":"PARENT","line":457,"in_reply_to":"ba8a016a_96e61a15","updated":"2015-11-20 20:03:18.000000000","message":"Thx, that\u0027s what I was looking for","commit_id":"2c3496db90d1665e243c4b946d1ed11ae13b5ccb"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"8623c0e73d229a3622c75d2e3921518d470d8474","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                      segmentation_id, port_id):"},{"line_number":455,"context_line":"        self.network_map[network_id] \u003d NetworkSegment(network_type,"},{"line_number":456,"context_line":"                                                      physical_network,"},{"line_number":457,"context_line":"                                                      segmentation_id)"},{"line_number":458,"context_line":"        tap_device_name \u003d self.get_tap_device_name(port_id)"},{"line_number":459,"context_line":"        return self.add_tap_interface(network_id, network_type,"},{"line_number":460,"context_line":"                                      physical_network, segmentation_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_96e61a15","side":"PARENT","line":457,"in_reply_to":"ba8a016a_ab6c1b37","updated":"2015-11-20 16:13:40.000000000","message":"See line 970 (on the right side). I just moved this call out of the add_interface method and now call it explicitly. The reason was just the context. It sounded strange to add a network in the add_interface method. Rather I\u0027d like to call it explicitly.","commit_id":"2c3496db90d1665e243c4b946d1ed11ae13b5ccb"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"change_message_id":"a931d4a89999aa90023700fa842640c57482a265","unresolved":false,"context_lines":[{"line_number":842,"context_line":"        :param bridge_mappings: dict mapping physical_networks to"},{"line_number":843,"context_line":"               physical_bridges."},{"line_number":844,"context_line":"        :param interface_mappings: dict mapping physical_networks to"},{"line_number":845,"context_line":"               physical_interfaces."},{"line_number":846,"context_line":"        :param polling_interval: interval (secs) to poll DB."},{"line_number":847,"context_line":"        :param quitting_rpc_timeout: timeout in seconds for rpc calls after"},{"line_number":848,"context_line":"               stop is called."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_188e402e","line":845,"updated":"2015-12-02 23:51:16.000000000","message":"Update doc string.","commit_id":"ec3298c0c82e810ab4a46ad77b1fbf3c75b047e8"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"1121c9a3bc459c5c70b1bed3ca35b57e1383cacc","unresolved":false,"context_lines":[{"line_number":50,"context_line":"from neutron.plugins.ml2.drivers.l2pop.rpc_manager \\"},{"line_number":51,"context_line":"    import l2population_rpc as l2pop_rpc"},{"line_number":52,"context_line":"from neutron.plugins.ml2.drivers.linuxbridge.agent import arp_protect"},{"line_number":53,"context_line":"from neutron.plugins.ml2.drivers.linuxbridge.agent.common import config  # noqa"},{"line_number":54,"context_line":"from neutron.plugins.ml2.drivers.linuxbridge.agent.common \\"},{"line_number":55,"context_line":"    import constants as lconst"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_c50ac078","line":53,"range":{"start_line":53,"start_character":45,"end_line":53,"end_character":50},"updated":"2016-01-15 18:07:39.000000000","message":"split config, too!!!!","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":679,"context_line":"            configurations[\u0027tunneling_ip\u0027] \u003d self.local_ip"},{"line_number":680,"context_line":"            configurations[\u0027tunnel_types\u0027] \u003d [p_const.TYPE_VXLAN]"},{"line_number":681,"context_line":"            configurations[\u0027l2_population\u0027] \u003d cfg.CONF.VXLAN.l2_population"},{"line_number":682,"context_line":"        return configurations"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    def get_rpc_callbacks(self, context, agent, sg_agent):"},{"line_number":685,"context_line":"        return LinuxBridgeRpcCallbacks(context, agent, sg_agent)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_b03d95c5","line":682,"updated":"2016-01-15 14:49:10.000000000","message":"I believe you lost extensions from the dict.","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"1121c9a3bc459c5c70b1bed3ca35b57e1383cacc","unresolved":false,"context_lines":[{"line_number":679,"context_line":"            configurations[\u0027tunneling_ip\u0027] \u003d self.local_ip"},{"line_number":680,"context_line":"            configurations[\u0027tunnel_types\u0027] \u003d [p_const.TYPE_VXLAN]"},{"line_number":681,"context_line":"            configurations[\u0027l2_population\u0027] \u003d cfg.CONF.VXLAN.l2_population"},{"line_number":682,"context_line":"        return configurations"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    def get_rpc_callbacks(self, context, agent, sg_agent):"},{"line_number":685,"context_line":"        return LinuxBridgeRpcCallbacks(context, agent, sg_agent)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_5a522f36","line":682,"in_reply_to":"da6ed579_b03d95c5","updated":"2016-01-15 18:07:39.000000000","message":"wow, good finding!","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":725,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.4\u0027)"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"    def __init__(self, context, agent, sg_agent):"},{"line_number":728,"context_line":"        super(LinuxBridgeRpcCallbacks, self).__init__(context, agent, sg_agent)"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    def network_delete(self, context, **kwargs):"},{"line_number":731,"context_line":"        LOG.debug(\"network_delete received\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_70195d21","line":728,"updated":"2016-01-15 14:49:10.000000000","message":"The __init__ method is redundant. Remove.","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"1121c9a3bc459c5c70b1bed3ca35b57e1383cacc","unresolved":false,"context_lines":[{"line_number":725,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.4\u0027)"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"    def __init__(self, context, agent, sg_agent):"},{"line_number":728,"context_line":"        super(LinuxBridgeRpcCallbacks, self).__init__(context, agent, sg_agent)"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    def network_delete(self, context, **kwargs):"},{"line_number":731,"context_line":"        LOG.debug(\"network_delete received\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_da3cdfe2","line":728,"in_reply_to":"da6ed579_70195d21","updated":"2016-01-15 18:07:39.000000000","message":"Done","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":732,"context_line":"        network_id \u003d kwargs.get(\u0027network_id\u0027)"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"        # NOTE(nick-ma-z): Don\u0027t remove pre-existing user-defined bridges"},{"line_number":735,"context_line":"        if network_id in self.agent.mgr.network_map:"},{"line_number":736,"context_line":"            phynet \u003d self.agent.mgr.network_map[network_id].physical_network"},{"line_number":737,"context_line":"            if phynet and phynet in self.agent.mgr.bridge_mappings:"},{"line_number":738,"context_line":"                LOG.info(_LI(\"Physical network %s is defined in \""}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_f0aead7f","line":735,"updated":"2016-01-15 14:49:10.000000000","message":"I think API could be more abstract if we don\u0027t need to mess with the map directly. Instead, there should be a getter and modifier I think.","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"1121c9a3bc459c5c70b1bed3ca35b57e1383cacc","unresolved":false,"context_lines":[{"line_number":732,"context_line":"        network_id \u003d kwargs.get(\u0027network_id\u0027)"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"        # NOTE(nick-ma-z): Don\u0027t remove pre-existing user-defined bridges"},{"line_number":735,"context_line":"        if network_id in self.agent.mgr.network_map:"},{"line_number":736,"context_line":"            phynet \u003d self.agent.mgr.network_map[network_id].physical_network"},{"line_number":737,"context_line":"            if phynet and phynet in self.agent.mgr.bridge_mappings:"},{"line_number":738,"context_line":"                LOG.info(_LI(\"Physical network %s is defined in \""}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_05bd38d7","line":735,"in_reply_to":"da6ed579_f0aead7f","updated":"2016-01-15 18:07:39.000000000","message":"I moved it into the rpc class, as this is the only user. so no need for a public api....","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c800e509cfbff9edc7333814c885d908179c30d5","unresolved":false,"context_lines":[{"line_number":855,"context_line":"        :param polling_interval: interval (secs) to poll DB."},{"line_number":856,"context_line":"        :param quitting_rpc_timeout: timeout in seconds for rpc calls after"},{"line_number":857,"context_line":"               stop is called."},{"line_number":858,"context_line":"        :param agent_type: Specifies the the type of the agent"},{"line_number":859,"context_line":"        :param agent_binary: The agent binary string"},{"line_number":860,"context_line":"        \"\"\""},{"line_number":861,"context_line":"        super(CommonAgentLoop, self).__init__()"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_10d341d6","line":858,"updated":"2016-01-15 14:49:10.000000000","message":"the the","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"1121c9a3bc459c5c70b1bed3ca35b57e1383cacc","unresolved":false,"context_lines":[{"line_number":855,"context_line":"        :param polling_interval: interval (secs) to poll DB."},{"line_number":856,"context_line":"        :param quitting_rpc_timeout: timeout in seconds for rpc calls after"},{"line_number":857,"context_line":"               stop is called."},{"line_number":858,"context_line":"        :param agent_type: Specifies the the type of the agent"},{"line_number":859,"context_line":"        :param agent_binary: The agent binary string"},{"line_number":860,"context_line":"        \"\"\""},{"line_number":861,"context_line":"        super(CommonAgentLoop, self).__init__()"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_c555e0f9","line":858,"in_reply_to":"da6ed579_10d341d6","updated":"2016-01-15 18:07:39.000000000","message":"Done","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"358e074d1341cf44a0ea239df7ac9dd3a74b48e8","unresolved":false,"context_lines":[{"line_number":963,"context_line":"        self.ext_manager \u003d ("},{"line_number":964,"context_line":"            ext_manager.AgentExtensionsManager(cfg.CONF))"},{"line_number":965,"context_line":"        self.ext_manager.initialize("},{"line_number":966,"context_line":"            connection, lconst.EXTENSION_DRIVER_TYPE)"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"    def _clean_network_ports(self, device):"},{"line_number":969,"context_line":"        for netid, ports_list in self.network_ports.items():"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_3aec2429","line":966,"range":{"start_line":966,"start_character":31,"end_line":966,"end_character":52},"updated":"2016-01-15 13:58:29.000000000","message":"this must be made configurable, too!","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c0f639aaf9785333c73f92eab720a92ac2d824e0","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        subinterface_name \u003d \u0027%s.%s\u0027 % (physical_interface, vlan_id)"},{"line_number":148,"context_line":"        return subinterface_name"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def get_device_name(self, port_id):"},{"line_number":151,"context_line":"        return self.get_tap_device_name(port_id)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def get_tap_device_name(self, interface_id):"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba63e191_4a24610c","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":23},"updated":"2016-01-19 14:41:01.000000000","message":"should not be required anymore as it has been removed from the public interface. All internal callers should use get get_device_name again...","commit_id":"455b82a7d1d13d96ecdf21e93c85a702c8e9e468"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c0f639aaf9785333c73f92eab720a92ac2d824e0","unresolved":false,"context_lines":[{"line_number":673,"context_line":""},{"line_number":674,"context_line":"    def get_agent_configurations(self):"},{"line_number":675,"context_line":"        configurations \u003d {\u0027bridge_mappings\u0027: self.bridge_mappings,"},{"line_number":676,"context_line":"                          \u0027interface_mappings\u0027: self.interface_mappings,"},{"line_number":677,"context_line":"                          }"},{"line_number":678,"context_line":"        if self.vxlan_mode !\u003d lconst.VXLAN_NONE:"},{"line_number":679,"context_line":"            configurations[\u0027tunneling_ip\u0027] \u003d self.local_ip"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba63e191_8a11f9ae","line":676,"range":{"start_line":676,"start_character":71,"end_line":676,"end_character":72},"updated":"2016-01-19 14:41:01.000000000","message":"remove \u0027,\u0027","commit_id":"455b82a7d1d13d96ecdf21e93c85a702c8e9e468"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c0f639aaf9785333c73f92eab720a92ac2d824e0","unresolved":false,"context_lines":[{"line_number":879,"context_line":""},{"line_number":880,"context_line":"        # stores received port_updates and port_deletes for"},{"line_number":881,"context_line":"        # processing by the main loop"},{"line_number":882,"context_line":"        #self.updated_devices \u003d set()"},{"line_number":883,"context_line":""},{"line_number":884,"context_line":"        # stores all configured ports on agent"},{"line_number":885,"context_line":"        self.network_ports \u003d collections.defaultdict(list)"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba63e191_f04e62c0","line":882,"range":{"start_line":882,"start_character":9,"end_line":882,"end_character":13},"updated":"2016-01-19 14:41:01.000000000","message":"remove those 3 lines!","commit_id":"455b82a7d1d13d96ecdf21e93c85a702c8e9e468"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"84bd999b17a616ec0f959372120612dff443c74d","unresolved":false,"context_lines":[{"line_number":532,"context_line":"            LOG.debug(\"Done deleting interface %s\", interface)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def get_all_devices(self):"},{"line_number":535,"context_line":"        return self.get_tap_devices()"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def get_tap_devices(self):"},{"line_number":538,"context_line":"        devices \u003d set()"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_3d7fa767","line":535,"updated":"2016-01-22 12:35:22.000000000","message":"Why not merging get_all_device and get_tap_device?","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"079742620c9e47819cb0ba33480afd0ee90a0537","unresolved":false,"context_lines":[{"line_number":532,"context_line":"            LOG.debug(\"Done deleting interface %s\", interface)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def get_all_devices(self):"},{"line_number":535,"context_line":"        return self.get_tap_devices()"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def get_tap_devices(self):"},{"line_number":538,"context_line":"        devices \u003d set()"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_595b86f6","line":535,"in_reply_to":"9a68dd71_3d7fa767","updated":"2016-01-22 14:52:52.000000000","message":"Done","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"84bd999b17a616ec0f959372120612dff443c74d","unresolved":false,"context_lines":[{"line_number":667,"context_line":"                LOG.error(_LE(\"Unable to obtain MAC address for unique ID. \""},{"line_number":668,"context_line":"                              \"Agent terminated!\"))"},{"line_number":669,"context_line":"                exit(1)"},{"line_number":670,"context_line":"        return \u0027%s%s\u0027 % (\u0027lb\u0027, (mac.replace(\":\", \"\")))"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    def get_agent_configurations(self):"},{"line_number":673,"context_line":"        configurations \u003d {\u0027bridge_mappings\u0027: self.bridge_mappings,"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_5d393ba3","line":670,"range":{"start_line":670,"start_character":26,"end_line":670,"end_character":28},"updated":"2016-01-22 12:35:22.000000000","message":"use:\n\n return \u0027lb%s\u0027 % mac.replace(\":\", \"\")","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"079742620c9e47819cb0ba33480afd0ee90a0537","unresolved":false,"context_lines":[{"line_number":667,"context_line":"                LOG.error(_LE(\"Unable to obtain MAC address for unique ID. \""},{"line_number":668,"context_line":"                              \"Agent terminated!\"))"},{"line_number":669,"context_line":"                exit(1)"},{"line_number":670,"context_line":"        return \u0027%s%s\u0027 % (\u0027lb\u0027, (mac.replace(\":\", \"\")))"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    def get_agent_configurations(self):"},{"line_number":673,"context_line":"        configurations \u003d {\u0027bridge_mappings\u0027: self.bridge_mappings,"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a68dd71_f974ba68","line":670,"range":{"start_line":670,"start_character":26,"end_line":670,"end_character":28},"in_reply_to":"9a68dd71_5d393ba3","updated":"2016-01-22 14:52:52.000000000","message":"Done","commit_id":"6128537cd92b4c4f6e593a70297cd0357950efcc"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"9b438d1474a84f9070e37eb30a1aa79a36417826","unresolved":false,"context_lines":[{"line_number":838,"context_line":"            getattr(self, method)(context, values)"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"class CommonAgentLoop(service.Service):"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"    def __init__(self, manager, polling_interval,"},{"line_number":844,"context_line":"                 quitting_rpc_timeout, agent_type, agent_binary):"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a5de9d1_4a2b0cec","line":841,"range":{"start_line":841,"start_character":0,"end_line":841,"end_character":39},"updated":"2016-01-28 00:30:54.000000000","message":"This cannot be moved to amb module or an abstract class will be defined in follow-up changes?","commit_id":"8bb6558b64ac53821af6db5a8a0529a1098f1178"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"0182ebf4927e38e0b12cc62eb774070dce94b8ed","unresolved":false,"context_lines":[{"line_number":838,"context_line":"            getattr(self, method)(context, values)"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"class CommonAgentLoop(service.Service):"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"    def __init__(self, manager, polling_interval,"},{"line_number":844,"context_line":"                 quitting_rpc_timeout, agent_type, agent_binary):"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a5de9d1_2cfa65be","line":841,"range":{"start_line":841,"start_character":0,"end_line":841,"end_character":39},"in_reply_to":"7a5de9d1_4a2b0cec","updated":"2016-01-28 07:30:47.000000000","message":"Right, I will move it into the other module in a follow up patchset (to make reviewing this more easy). However I haven\u0027t planned to create an abstract interface for it, as there is only one implementation. But what probably makes sense is to make the internally used methods private (_). I will do this in the next version of this patchset.","commit_id":"8bb6558b64ac53821af6db5a8a0529a1098f1178"}],"neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py":[{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"89828e742d92ef176913b6225e3c844c0af87e7d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        cfg.CONF.set_default(\u0027firewall_driver\u0027,"},{"line_number":115,"context_line":"                             \u0027neutron.agent.firewall.NoopFirewallDriver\u0027,"},{"line_number":116,"context_line":"                             group\u003d\u0027SECURITYGROUP\u0027)"},{"line_number":117,"context_line":"        cfg.CONF.set_override(\u0027local_ip\u0027, LOCAL_IP, \u0027VXLAN\u0027)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        manager \u003d mock.Mock()"},{"line_number":120,"context_line":"        manager.get_devices.return_value \u003d []"}],"source_content_type":"text/x-python","patch_set":17,"id":"da6ed579_9a99907b","line":117,"range":{"start_line":117,"start_character":17,"end_line":117,"end_character":29},"updated":"2016-01-15 14:02:40.000000000","message":"remove this line - not required","commit_id":"06fbff63e96c6a91f68893cb41652ee090153bc5"}]}
