)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"1ef2ee7349c0a1bce08ec547221647f1d9264b01","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2017-01-22 16:01:23 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"provider_networks_app"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I390402cde57106c7076ab3d6cc932744d3c40bca"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a3905b3_a5b40082","line":8,"updated":"2017-01-22 16:25:45.000000000","message":"Please add blueprint link to commit messages","commit_id":"2c68ab6c8075c1f53c07302393d7c68577c85ece"}],"dragonflow/common/utils.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"21f32f93de8c7bc1239fc0d1b64d2c150c7ba3fb","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        (n_const.VHOST_USER_DEVICE_PREFIX + port_id)[:14])"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def set_bitmask(width):"},{"line_number":47,"context_line":"    return ~((-1 \u003e\u003e width) \u003c\u003c width)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_91891078","line":46,"range":{"start_line":46,"start_character":4,"end_line":46,"end_character":15},"updated":"2017-02-15 08:58:00.000000000","message":"rename to: get_bitmask. set looks like your changing something that already exists.","commit_id":"c1292bc970ebfcc5ba8abdc0eff40e9050d8e3e4"}],"dragonflow/conf/df_provider_networks.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"a98f2b4004e2dfaf33a575e22a823eddd1a7fb8b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":21,"id":"da36d5c6_c228cd9c","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":21},"updated":"2017-02-25 03:01:23.000000000","message":"2017","commit_id":"6be5f9309025d8a0d33062cef47e8708629670a2"}],"dragonflow/controller/l2_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"21f32f93de8c7bc1239fc0d1b64d2c150c7ba3fb","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                                                              topic)"},{"line_number":373,"context_line":"        self._add_l2_responders(lport)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def _del_network_flows_on_last_port_down(self,"},{"line_number":376,"context_line":"                                             local_network_id,"},{"line_number":377,"context_line":"                                             segmentation_id,"},{"line_number":378,"context_line":"                                             network_type):"},{"line_number":379,"context_line":"        network \u003d self.local_networks.get(local_network_id)"},{"line_number":380,"context_line":"        if network and network.local_ports:"},{"line_number":381,"context_line":"            return"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        LOG.info(_LI(\"Remove network flows on last port down. Network type \""},{"line_number":384,"context_line":"                     \"is %(type)s, and segmentation ID is %(s_id)s.\"),"},{"line_number":385,"context_line":"                 {\u0027type\u0027: network_type, \u0027s_id\u0027: segmentation_id})"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def _add_multicast_broadcast_handling_for_local_port(self,"},{"line_number":388,"context_line":"                                                         lport_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_33405334","line":385,"range":{"start_line":375,"start_character":1,"end_line":385,"end_character":65},"updated":"2017-02-15 08:58:00.000000000","message":"This method doesn\u0027t do anything anymore","commit_id":"c1292bc970ebfcc5ba8abdc0eff40e9050d8e3e4"}],"dragonflow/controller/provider_networks_app.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"1ef2ee7349c0a1bce08ec547221647f1d9264b01","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ProviderNetworks(df_base_app.DFlowApp):"},{"line_number":36,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":37,"context_line":"        super(ProviderNetworks, self).__init__(*args, **kwargs)"},{"line_number":38,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a3905b3_05b07489","line":35,"range":{"start_line":35,"start_character":6,"end_line":35,"end_character":22},"updated":"2017-01-22 16:25:45.000000000","message":"Up until now there is was convention of adding _app/App to module name/app class. I think its worth keeping for ease-of-navigation sake.","commit_id":"2c68ab6c8075c1f53c07302393d7c68577c85ece"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"ba7c75401a77fae361842c9dce9ef1cb1a468ede","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class ProviderNetworks(df_base_app.DFlowApp):"},{"line_number":36,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":37,"context_line":"        super(ProviderNetworks, self).__init__(*args, **kwargs)"},{"line_number":38,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_5309f330","line":35,"range":{"start_line":35,"start_character":6,"end_line":35,"end_character":22},"in_reply_to":"5a3905b3_05b07489","updated":"2017-01-25 15:47:44.000000000","message":"OK","commit_id":"2c68ab6c8075c1f53c07302393d7c68577c85ece"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"1ef2ee7349c0a1bce08ec547221647f1d9264b01","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        super(ProviderNetworks, self).__init__(*args, **kwargs)"},{"line_number":38,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":39,"context_line":"        self.logical_networks \u003d LogicalNetworks()"},{"line_number":40,"context_line":"        self.bridge_mappings \u003d self._parse_bridge_mappings("},{"line_number":41,"context_line":"                cfg.CONF.df_provider_networks.bridge_mappings)"},{"line_number":42,"context_line":"        self.int_ofports \u003d {}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _parse_bridge_mappings(self, bridge_mappings):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a3905b3_c5702cdf","line":41,"range":{"start_line":40,"start_character":0,"end_line":41,"end_character":62},"updated":"2017-01-22 16:25:45.000000000","message":"Do we need this as attribute? Only used in setup_physical_bridges","commit_id":"2c68ab6c8075c1f53c07302393d7c68577c85ece"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"ba7c75401a77fae361842c9dce9ef1cb1a468ede","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        super(ProviderNetworks, self).__init__(*args, **kwargs)"},{"line_number":38,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":39,"context_line":"        self.logical_networks \u003d LogicalNetworks()"},{"line_number":40,"context_line":"        self.bridge_mappings \u003d self._parse_bridge_mappings("},{"line_number":41,"context_line":"                cfg.CONF.df_provider_networks.bridge_mappings)"},{"line_number":42,"context_line":"        self.int_ofports \u003d {}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _parse_bridge_mappings(self, bridge_mappings):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a461143_d31c037a","line":41,"range":{"start_line":40,"start_character":0,"end_line":41,"end_character":62},"in_reply_to":"5a3905b3_c5702cdf","updated":"2017-01-25 15:47:44.000000000","message":"Yes. but it is called later on with switch_features_handler hook","commit_id":"2c68ab6c8075c1f53c07302393d7c68577c85ece"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"1ef2ee7349c0a1bce08ec547221647f1d9264b01","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                                   network_id,"},{"line_number":88,"context_line":"                                   network_type)"},{"line_number":89,"context_line":"        self.logical_networks.add_local_port(port_id\u003dlport.get_id(),"},{"line_number":90,"context_line":"                                           network_id\u003dnetwork_id,"},{"line_number":91,"context_line":"                                           network_type\u003dnetwork_type)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _match_actions_by_network_type(self, lport, network_id, network_type):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a3905b3_057794d3","line":90,"range":{"start_line":90,"start_character":41,"end_line":90,"end_character":43},"updated":"2017-01-22 16:25:45.000000000","message":"indent","commit_id":"2c68ab6c8075c1f53c07302393d7c68577c85ece"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"770653f44ca2c287271d1258e82f7fd466fa6cf5","unresolved":false,"context_lines":[{"line_number":29,"context_line":"NET_VLAN \u003d \u0027vlan\u0027"},{"line_number":30,"context_line":"NET_FLAT \u003d \u0027flat\u0027"},{"line_number":31,"context_line":"NETWORK_TYPES \u003d (NET_VLAN, NET_FLAT)"},{"line_number":32,"context_line":"ZERO_MAC \u003d \u002700:00:00:00:00:00\u0027"},{"line_number":33,"context_line":"BUM_MAC_MASK \u003d \u002701:00:00:00:00:00\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_6c43a96c","line":32,"updated":"2017-01-31 13:11:50.000000000","message":"nit: move it to constants","commit_id":"1c3861a217f4e0f7ad8853f91ec04dc4282a46a5"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c95a3b03ff727097d2be004b4b5e5954d76ca8b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"           :param bridge_mappings: map physical network names to bridge names."},{"line_number":61,"context_line":"        \u0027\u0027\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        #TODO(oanson) Detect bridge type. For OVS - use patch ports."},{"line_number":64,"context_line":"        #For Linux bridge - use veth pairs"},{"line_number":65,"context_line":"        #TODO(oanson) Rename patch ports names"},{"line_number":66,"context_line":"        for physical_network, bridge in six.iteritems(bridge_mappings):"},{"line_number":67,"context_line":"            LOG.info(_LI(\"Mapping physical network %(physical_network)s to \""},{"line_number":68,"context_line":"                         \"bridge %(bridge)s\"),"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a430d35_07196922","line":65,"range":{"start_line":63,"start_character":8,"end_line":65,"end_character":46},"updated":"2017-02-07 09:51:06.000000000","message":"Why are these TODOs included? Isn\u0027t a bug better?","commit_id":"7b768e94b7af093190189ea2efd59805a64597d7"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c95a3b03ff727097d2be004b4b5e5954d76ca8b","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def add_local_port(self, lport):"},{"line_number":85,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":86,"context_line":"        #TODO(oanson) Add treatment for router:external\u003dExternal OR add"},{"line_number":87,"context_line":"        #special treatment for floatingip ports OR Add special treatment"},{"line_number":88,"context_line":"        #for (assoc) floating ip"},{"line_number":89,"context_line":"        if network_type not in NETWORK_TYPES:"},{"line_number":90,"context_line":"            return"},{"line_number":91,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a430d35_27a9057c","line":88,"range":{"start_line":86,"start_character":8,"end_line":88,"end_character":32},"updated":"2017-02-07 09:51:06.000000000","message":"Same comment","commit_id":"7b768e94b7af093190189ea2efd59805a64597d7"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c95a3b03ff727097d2be004b4b5e5954d76ca8b","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        self._egress_external_flow(lport, network_id)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _l2_lookup_flow(self, network_id):"},{"line_number":131,"context_line":"        LOG.info(_LI(\u0027l2 lookup flow for network %(net_id)s\u0027),"},{"line_number":132,"context_line":"                {\u0027net_id\u0027: network_id})"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        match \u003d self._make_bum_match(metadata\u003dnetwork_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a430d35_879d590c","line":131,"range":{"start_line":131,"start_character":8,"end_line":131,"end_character":16},"updated":"2017-02-07 09:51:06.000000000","message":"I think you can move some of these logs to debug level. I\u0027m not sure that logging for each flow installed is necessary.","commit_id":"7b768e94b7af093190189ea2efd59805a64597d7"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c95a3b03ff727097d2be004b4b5e5954d76ca8b","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            match\u003dmatch)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _egress_flow(self, lport, network_id, network_type):"},{"line_number":143,"context_line":"        LOG.info(_LI(\u0027egrees flow for network %(net_id)s\u0027),"},{"line_number":144,"context_line":"                {\u0027net_id\u0027: network_id})"},{"line_number":145,"context_line":"        match \u003d self.parser.OFPMatch(metadata\u003dnetwork_id)"},{"line_number":146,"context_line":"        inst \u003d [self.parser.OFPInstructionGotoTable("}],"source_content_type":"text/x-python","patch_set":15,"id":"1a430d35_676a2df0","line":143,"range":{"start_line":143,"start_character":8,"end_line":143,"end_character":16},"updated":"2017-02-07 09:51:06.000000000","message":"Same, debug level","commit_id":"7b768e94b7af093190189ea2efd59805a64597d7"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c95a3b03ff727097d2be004b4b5e5954d76ca8b","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            match\u003dmatch)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _egress_flow(self, lport, network_id, network_type):"},{"line_number":143,"context_line":"        LOG.info(_LI(\u0027egrees flow for network %(net_id)s\u0027),"},{"line_number":144,"context_line":"                {\u0027net_id\u0027: network_id})"},{"line_number":145,"context_line":"        match \u003d self.parser.OFPMatch(metadata\u003dnetwork_id)"},{"line_number":146,"context_line":"        inst \u003d [self.parser.OFPInstructionGotoTable("}],"source_content_type":"text/x-python","patch_set":15,"id":"1a430d35_876b99f0","line":143,"range":{"start_line":143,"start_character":22,"end_line":143,"end_character":28},"updated":"2017-02-07 09:51:06.000000000","message":"egress","commit_id":"7b768e94b7af093190189ea2efd59805a64597d7"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c95a3b03ff727097d2be004b4b5e5954d76ca8b","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            match\u003dmatch)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def _egress_external_flow(self, lport, network_id):"},{"line_number":172,"context_line":"        LOG.info(_LI(\u0027egrees external flow for network %(net_id)s\u0027),"},{"line_number":173,"context_line":"                {\u0027net_id\u0027: network_id})"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        physical_network \u003d lport.get_external_value(\u0027physical_network\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a430d35_67514d36","line":172,"range":{"start_line":172,"start_character":8,"end_line":172,"end_character":16},"updated":"2017-02-07 09:51:06.000000000","message":"Same, debug level","commit_id":"7b768e94b7af093190189ea2efd59805a64597d7"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"7c95a3b03ff727097d2be004b4b5e5954d76ca8b","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            match\u003dmatch)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def _egress_external_flow(self, lport, network_id):"},{"line_number":172,"context_line":"        LOG.info(_LI(\u0027egrees external flow for network %(net_id)s\u0027),"},{"line_number":173,"context_line":"                {\u0027net_id\u0027: network_id})"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        physical_network \u003d lport.get_external_value(\u0027physical_network\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a430d35_e7cd3d86","line":172,"range":{"start_line":172,"start_character":22,"end_line":172,"end_character":28},"updated":"2017-02-07 09:51:06.000000000","message":"egress","commit_id":"7b768e94b7af093190189ea2efd59805a64597d7"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"d6ea18e472f3eb84962b3fa3594b16faa6002434","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from dragonflow.common import utils"},{"line_number":19,"context_line":"from dragonflow import conf as cfg"},{"line_number":20,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":21,"context_line":"from dragonflow.controller.common.logical_networks import LogicalNetworks"},{"line_number":22,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":23,"context_line":"from neutron_lib.utils import helpers"},{"line_number":24,"context_line":"from oslo_log import log"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a430d35_8871780e","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":73},"updated":"2017-02-09 12:57:13.000000000","message":"Import the module instead","commit_id":"d0913385665808edbedee7edd3867773b457c3fe"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"d6ea18e472f3eb84962b3fa3594b16faa6002434","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_log import log"},{"line_number":25,"context_line":"from ryu.lib import mac as mac_api"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import six"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"NET_VLAN \u003d \u0027vlan\u0027"},{"line_number":30,"context_line":"NET_FLAT \u003d \u0027flat\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a430d35_2857a458","line":27,"updated":"2017-02-09 12:57:13.000000000","message":"Please refer to [1] for import order\n\nhttp://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"d0913385665808edbedee7edd3867773b457c3fe"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"d6ea18e472f3eb84962b3fa3594b16faa6002434","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_log import log"},{"line_number":25,"context_line":"from ryu.lib import mac as mac_api"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import six"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"NET_VLAN \u003d \u0027vlan\u0027"},{"line_number":30,"context_line":"NET_FLAT \u003d \u0027flat\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a430d35_08eae873","line":27,"range":{"start_line":27,"start_character":7,"end_line":27,"end_character":10},"updated":"2017-02-09 12:57:13.000000000","message":"We\u0027re dropping usage of python-six for dict iter function:\nhttps://review.openstack.org/#/c/429593/","commit_id":"d0913385665808edbedee7edd3867773b457c3fe"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"d6ea18e472f3eb84962b3fa3594b16faa6002434","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"NET_VLAN \u003d \u0027vlan\u0027"},{"line_number":30,"context_line":"NET_FLAT \u003d \u0027flat\u0027"},{"line_number":31,"context_line":"NETWORK_TYPES \u003d (NET_VLAN, NET_FLAT)"},{"line_number":32,"context_line":"VLAN_TAG_BITS \u003d 12"},{"line_number":33,"context_line":"VLAN_MASK \u003d utils.set_bitmask(VLAN_TAG_BITS)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1a430d35_68928cf7","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":13},"updated":"2017-02-09 12:57:13.000000000","message":"This one is not taken from configuration?","commit_id":"d0913385665808edbedee7edd3867773b457c3fe"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"f2b472518b4b6a7f174912fe857a0dfc144518d2","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"NET_VLAN \u003d \u0027vlan\u0027"},{"line_number":30,"context_line":"NET_FLAT \u003d \u0027flat\u0027"},{"line_number":31,"context_line":"NETWORK_TYPES \u003d (NET_VLAN, NET_FLAT)"},{"line_number":32,"context_line":"VLAN_TAG_BITS \u003d 12"},{"line_number":33,"context_line":"VLAN_MASK \u003d utils.set_bitmask(VLAN_TAG_BITS)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa31d9ce_d3dcfe48","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":13},"in_reply_to":"1a430d35_68928cf7","updated":"2017-02-09 22:13:40.000000000","message":"No","commit_id":"d0913385665808edbedee7edd3867773b457c3fe"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"d6ea18e472f3eb84962b3fa3594b16faa6002434","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                 \u0027lport\u0027: lport})"},{"line_number":91,"context_line":"        if port_count \u003d\u003d 0:"},{"line_number":92,"context_line":"            self._new_network_flow(lport,"},{"line_number":93,"context_line":"                                   network_id,"},{"line_number":94,"context_line":"                                   network_type)"},{"line_number":95,"context_line":"        self.logical_networks.add_local_port(port_id\u003dlport.get_id(),"},{"line_number":96,"context_line":"                                           network_id\u003dnetwork_id,"},{"line_number":97,"context_line":"                                           network_type\u003dnetwork_type)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a430d35_ab01ce06","line":94,"range":{"start_line":93,"start_character":35,"end_line":94,"end_character":47},"updated":"2017-02-09 12:57:13.000000000","message":"Both network ID and type can be retrieved from the lport, maybe we can drop the from the parameters...","commit_id":"d0913385665808edbedee7edd3867773b457c3fe"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"f2b472518b4b6a7f174912fe857a0dfc144518d2","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                 \u0027lport\u0027: lport})"},{"line_number":91,"context_line":"        if port_count \u003d\u003d 0:"},{"line_number":92,"context_line":"            self._new_network_flow(lport,"},{"line_number":93,"context_line":"                                   network_id,"},{"line_number":94,"context_line":"                                   network_type)"},{"line_number":95,"context_line":"        self.logical_networks.add_local_port(port_id\u003dlport.get_id(),"},{"line_number":96,"context_line":"                                           network_id\u003dnetwork_id,"},{"line_number":97,"context_line":"                                           network_type\u003dnetwork_type)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa31d9ce_f3b4a2d2","line":94,"range":{"start_line":93,"start_character":35,"end_line":94,"end_character":47},"in_reply_to":"1a430d35_ab01ce06","updated":"2017-02-09 22:13:40.000000000","message":"these parameters are extracted, before being passed to the private member functions. Of course it there were friendly get-ers functions,  lport could have been passed as a paramater, otherwise these valuse are extracted as little as possible, only when required.","commit_id":"d0913385665808edbedee7edd3867773b457c3fe"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"21f32f93de8c7bc1239fc0d1b64d2c150c7ba3fb","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"           :param bridge_mappings: map physical network names to bridge names."},{"line_number":60,"context_line":"        \u0027\u0027\u0027"},{"line_number":61,"context_line":"        for physical_network, bridge in bridge_mappings.items():"},{"line_number":62,"context_line":"            LOG.info(_LI(\"Mapping physical network %(physical_network)s to \""},{"line_number":63,"context_line":"                         \"bridge %(bridge)s\"),"},{"line_number":64,"context_line":"                     {\u0027physical_network\u0027: physical_network,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_f39b1b64","line":61,"range":{"start_line":61,"start_character":30,"end_line":61,"end_character":36},"updated":"2017-02-15 08:58:00.000000000","message":"nit: handling the case where bridge is a linux bridge (and not ovs) is done in a separate patch?","commit_id":"c1292bc970ebfcc5ba8abdc0eff40e9050d8e3e4"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"7ec5d3e4d271d7239bd3d0c74f4fa305d0febd10","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"           :param bridge_mappings: map physical network names to bridge names."},{"line_number":60,"context_line":"        \u0027\u0027\u0027"},{"line_number":61,"context_line":"        for physical_network, bridge in bridge_mappings.items():"},{"line_number":62,"context_line":"            LOG.info(_LI(\"Mapping physical network %(physical_network)s to \""},{"line_number":63,"context_line":"                         \"bridge %(bridge)s\"),"},{"line_number":64,"context_line":"                     {\u0027physical_network\u0027: physical_network,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_c46b841c","line":61,"range":{"start_line":61,"start_character":30,"end_line":61,"end_character":36},"in_reply_to":"fa31d9ce_f39b1b64","updated":"2017-02-15 15:55:43.000000000","message":"Yes","commit_id":"c1292bc970ebfcc5ba8abdc0eff40e9050d8e3e4"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"21f32f93de8c7bc1239fc0d1b64d2c150c7ba3fb","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        actions \u003d ["},{"line_number":100,"context_line":"            self.parser.OFPActionSetField(metadata\u003dnetwork_id)]"},{"line_number":101,"context_line":"        match \u003d None"},{"line_number":102,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":103,"context_line":"        if network_type \u003d\u003d NET_VLAN:"},{"line_number":104,"context_line":"            segmentation_id \u003d lport.get_external_value(\u0027segmentation_id\u0027)"},{"line_number":105,"context_line":"            match \u003d self.parser.OFPMatch()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_53d94721","line":102,"range":{"start_line":102,"start_character":0,"end_line":102,"end_character":63},"updated":"2017-02-15 08:58:00.000000000","message":"You\u0027re shadowing network_type argument.","commit_id":"c1292bc970ebfcc5ba8abdc0eff40e9050d8e3e4"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"a98f2b4004e2dfaf33a575e22a823eddd1a7fb8b","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":21,"id":"da36d5c6_e22311bb","line":1,"updated":"2017-02-25 03:01:23.000000000","message":"extra empty line","commit_id":"6be5f9309025d8a0d33062cef47e8708629670a2"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"a98f2b4004e2dfaf33a575e22a823eddd1a7fb8b","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":21,"id":"da36d5c6_222a8990","line":2,"range":{"start_line":2,"start_character":16,"end_line":2,"end_character":20},"updated":"2017-02-25 03:01:23.000000000","message":"2017","commit_id":"6be5f9309025d8a0d33062cef47e8708629670a2"}],"dragonflow/tests/fullstack/test_l2_flows.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"21f32f93de8c7bc1239fc0d1b64d2c150c7ba3fb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_9d3acc97","line":1,"updated":"2017-02-15 08:58:00.000000000","message":"nit: Some changes in this file belong in a separate patch.","commit_id":"c1292bc970ebfcc5ba8abdc0eff40e9050d8e3e4"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"21f32f93de8c7bc1239fc0d1b64d2c150c7ba3fb","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                                     hex(segmentation_id),"},{"line_number":95,"context_line":"                                     tunnel_key_hex,"},{"line_number":96,"context_line":"                                     mac, ofport)"},{"line_number":97,"context_line":"        for key in six.iterkeys(r):"},{"line_number":98,"context_line":"            self.assertIsNotNone(r[key], key)"},{"line_number":99,"context_line":"        vm.close()"},{"line_number":100,"context_line":"        network.close()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_6201f305","line":97,"range":{"start_line":97,"start_character":19,"end_line":97,"end_character":34},"updated":"2017-02-15 08:58:00.000000000","message":"Use r.keys() rather than six.iterkeys(r)\n\nOr maybe rewrite this block as:\nfor key, value in r.items():\n    self.assertIsNotNode(value, key)\n\nAnd save the lookup?","commit_id":"c1292bc970ebfcc5ba8abdc0eff40e9050d8e3e4"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"21f32f93de8c7bc1239fc0d1b64d2c150c7ba3fb","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                                   vlan_min,"},{"line_number":153,"context_line":"                                   port_key_hex,"},{"line_number":154,"context_line":"                                   mac)"},{"line_number":155,"context_line":"        for key in six.iterkeys(r):"},{"line_number":156,"context_line":"            self.assertIsNotNone(r[key], key)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        self.assertIsNotNone(r)"},{"line_number":159,"context_line":"        vm.server.stop()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_bd531016","line":156,"range":{"start_line":155,"start_character":0,"end_line":156,"end_character":45},"updated":"2017-02-15 08:58:00.000000000","message":"Same here","commit_id":"c1292bc970ebfcc5ba8abdc0eff40e9050d8e3e4"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"21f32f93de8c7bc1239fc0d1b64d2c150c7ba3fb","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        port_key_hex \u003d hex(port_key)"},{"line_number":325,"context_line":"        r \u003d self._check_flat_flows(ovs.dump(self.integration_bridge),"},{"line_number":326,"context_line":"                                   metadataid, port_key_hex, mac)"},{"line_number":327,"context_line":"        for key in six.iterkeys(r):"},{"line_number":328,"context_line":"            self.assertIsNotNone(r[key], key)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        vm.server.stop()"},{"line_number":331,"context_line":"        vm.close()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_5de7743f","line":328,"range":{"start_line":327,"start_character":0,"end_line":328,"end_character":45},"updated":"2017-02-15 08:58:00.000000000","message":"And here","commit_id":"c1292bc970ebfcc5ba8abdc0eff40e9050d8e3e4"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"a98f2b4004e2dfaf33a575e22a823eddd1a7fb8b","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_config import cfg"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import ConfigParser"},{"line_number":19,"context_line":"from dragonflow.common import utils as df_utils"},{"line_number":20,"context_line":"from dragonflow.controller.common import constants as const"}],"source_content_type":"text/x-python","patch_set":21,"id":"da36d5c6_621e4171","line":17,"updated":"2017-02-25 03:01:23.000000000","message":"not related extra line","commit_id":"6be5f9309025d8a0d33062cef47e8708629670a2"}],"dragonflow/tests/unit/test_provider_net_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"21f32f93de8c7bc1239fc0d1b64d2c150c7ba3fb","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.app.int_ofports[\u0027phynet\u0027] \u003d 1"},{"line_number":50,"context_line":"        self.controller.update_lport(fake_local_vlan_port1)"},{"line_number":51,"context_line":"        self.app.mod_flow.assert_called_with("},{"line_number":52,"context_line":"            inst\u003dmock.ANY,"},{"line_number":53,"context_line":"            match\u003dmock.ANY,"},{"line_number":54,"context_line":"            priority\u003dconst.PRIORITY_HIGH,"},{"line_number":55,"context_line":"            table_id\u003dconst.EGRESS_EXTERNAL_TABLE)"},{"line_number":56,"context_line":"        self.app.mod_flow.reset_mock()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_3de64015","line":53,"range":{"start_line":52,"start_character":0,"end_line":53,"end_character":27},"updated":"2017-02-15 08:58:00.000000000","message":"Matching a real inst and match would make a more meaningful test.","commit_id":"c1292bc970ebfcc5ba8abdc0eff40e9050d8e3e4"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"a98f2b4004e2dfaf33a575e22a823eddd1a7fb8b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":21,"id":"da36d5c6_e20a3125","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2017-02-25 03:01:23.000000000","message":"2017","commit_id":"6be5f9309025d8a0d33062cef47e8708629670a2"}]}
