)]}'
{"dragonflow/common/helpers.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4d1b833968f39429de050e3a8e4ccee1cb4361","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_log import log"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f231b9d_7c82d154","line":15,"updated":"2017-06-19 19:00:00.000000000","message":"Please rename to something more helpful than \u0027helpers\u0027. As a minimum: bridge_mapping.py. But see other comments.","commit_id":"5c538d129f04b7f33589e70030dd6d50cba9b824"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4d1b833968f39429de050e3a8e4ccee1cb4361","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def key(self):"},{"line_number":30,"context_line":"        return \"%s-%s\" % (self._key[0], self._key[1])"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def _extract_suffix(self, name):"},{"line_number":33,"context_line":"        return name.split(\u0027-\u0027)[1] if \u0027-\u0027 in name else name"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def gen_link_mapping(self,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f231b9d_b9575b27","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":36},"updated":"2017-06-19 19:00:00.000000000","message":"Where is this used?","commit_id":"5c538d129f04b7f33589e70030dd6d50cba9b824"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4d1b833968f39429de050e3a8e4ccee1cb4361","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        if bridge2_link_name is None:"},{"line_number":41,"context_line":"            bridge2_link_name \u003d \"%s-patch\" % self._key[self._bridge1_id]"},{"line_number":42,"context_line":"        mapping \u003d {self._key[self._bridge1_id]: bridge1_link_name,"},{"line_number":43,"context_line":"                   self._key[1 - self._bridge1_id]: bridge2_link_name}"},{"line_number":44,"context_line":"        return mapping"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def __repr__(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f231b9d_d908d72e","line":43,"updated":"2017-06-19 19:00:00.000000000","message":"Wouldn\u0027t it be easier to remember who is bridge1, who is bridge2, and only use _key/sort them in key()?","commit_id":"5c538d129f04b7f33589e70030dd6d50cba9b824"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4d1b833968f39429de050e3a8e4ccee1cb4361","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                   self._key[1 - self._bridge1_id]: bridge2_link_name}"},{"line_number":44,"context_line":"        return mapping"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def __repr__(self):"},{"line_number":47,"context_line":"        return self.key()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f231b9d_b9051b17","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":16},"updated":"2017-06-19 19:00:00.000000000","message":"This is __str__. __repr__ should return \u0027_Mapping(bridge1, bridge2)\u0027","commit_id":"5c538d129f04b7f33589e70030dd6d50cba9b824"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4d1b833968f39429de050e3a8e4ccee1cb4361","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get(self, bridge1, bridge2):"},{"line_number":55,"context_line":"        mapping \u003d _Mapping(bridge1, bridge2)"},{"line_number":56,"context_line":"        return self.get(mapping)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def add_mapping(self, bridge1, bridge2,"},{"line_number":59,"context_line":"                    mapping_func,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f231b9d_dc0d6536","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":32},"updated":"2017-06-19 19:00:00.000000000","message":"This looks like it should fail: self.get expects bridge1 and bridge2, but is given mapping. Did you mean \u0027self._mappings.get(mapping)\u0027 ?","commit_id":"5c538d129f04b7f33589e70030dd6d50cba9b824"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4d1b833968f39429de050e3a8e4ccee1cb4361","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        mapping \u003d _Mapping(bridge1, bridge2)"},{"line_number":64,"context_line":"        if not self._mappings.get(mapping.key()):"},{"line_number":65,"context_line":"            mapping \u003d mapping.gen_link_mapping("},{"line_number":66,"context_line":"                    bridge1_link_name,"},{"line_number":67,"context_line":"                    bridge2_link_name)"},{"line_number":68,"context_line":"            bridge1_mapping \u003d mapping_func("}],"source_content_type":"text/x-python","patch_set":2,"id":"7f231b9d_dc3b25c6","line":65,"range":{"start_line":65,"start_character":12,"end_line":65,"end_character":19},"updated":"2017-06-19 19:00:00.000000000","message":"This variable shadows the mapping defined in line 63.","commit_id":"5c538d129f04b7f33589e70030dd6d50cba9b824"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4d1b833968f39429de050e3a8e4ccee1cb4361","unresolved":false,"context_lines":[{"line_number":82,"context_line":"BRIDGE_MAPPINGS \u003d _BridgeMappings()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def generate_mapping(bridge1, bridge2, mapping_func,"},{"line_number":86,"context_line":"                     bridge1_link_name\u003dNone,"},{"line_number":87,"context_line":"                     bridge2_link_name\u003dNone):"},{"line_number":88,"context_line":"    global BRIDGE_MAPPINGS"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f231b9d_3cca19a1","line":85,"range":{"start_line":85,"start_character":4,"end_line":85,"end_character":20},"updated":"2017-06-19 19:00:00.000000000","message":"I think this library is like \u0027shooting a fly with a canon\u0027. It is very flexible, but the full extend is lost due to readability and maintainability issues. Wouldn\u0027t a simpler library that only handles patch-ports between bridges be more suitable to our purposes?","commit_id":"5c538d129f04b7f33589e70030dd6d50cba9b824"}],"dragonflow/controller/apps/dnat.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"18df82c6cbe534af1622ff2fb60cb87dd560cfee","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class DNATApp(df_base_app.DFlowApp):"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":61,"context_line":"        super(DNATApp, self).__init__(*args, **kwargs)"},{"line_number":62,"context_line":"        self.conf \u003d cfg.CONF.df_dnat_app"},{"line_number":63,"context_line":"        self.external_network_bridge \u003d self.conf.external_network_bridge"},{"line_number":64,"context_line":"        self.external_bridge_mac \u003d \"\""},{"line_number":65,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":66,"context_line":"        self.int_peer_patch_port \u003d self.conf.int_peer_patch_port"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf3e73b7_5c403a08","line":63,"range":{"start_line":60,"start_character":6,"end_line":63,"end_character":72},"updated":"2017-08-06 12:08:41.000000000","message":"unrelated","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"4bd2f4fff084b83431770f15179c9644915cf537","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class DNATApp(df_base_app.DFlowApp):"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":61,"context_line":"        super(DNATApp, self).__init__(*args, **kwargs)"},{"line_number":62,"context_line":"        self.conf \u003d cfg.CONF.df_dnat_app"},{"line_number":63,"context_line":"        self.external_network_bridge \u003d self.conf.external_network_bridge"},{"line_number":64,"context_line":"        self.external_bridge_mac \u003d \"\""},{"line_number":65,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":66,"context_line":"        self.int_peer_patch_port \u003d self.conf.int_peer_patch_port"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_152162b5","line":63,"range":{"start_line":60,"start_character":6,"end_line":63,"end_character":72},"in_reply_to":"bf3e73b7_5c403a08","updated":"2017-08-08 15:42:58.000000000","message":"fixed","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"18df82c6cbe534af1622ff2fb60cb87dd560cfee","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        mac \u003d ovs_port.mac_in_use"},{"line_number":220,"context_line":"        if (self.external_bridge_mac \u003d\u003d mac"},{"line_number":221,"context_line":"                or not mac"},{"line_number":222,"context_line":"                or mac \u003d\u003d ZERO_MAC):"},{"line_number":223,"context_line":"            return"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        for key, floatingip in self.local_floatingips.items():"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf3e73b7_9c36a2b4","line":222,"range":{"start_line":222,"start_character":26,"end_line":222,"end_character":34},"updated":"2017-08-06 12:08:41.000000000","message":"unrelated","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"4bd2f4fff084b83431770f15179c9644915cf537","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        mac \u003d ovs_port.mac_in_use"},{"line_number":220,"context_line":"        if (self.external_bridge_mac \u003d\u003d mac"},{"line_number":221,"context_line":"                or not mac"},{"line_number":222,"context_line":"                or mac \u003d\u003d ZERO_MAC):"},{"line_number":223,"context_line":"            return"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        for key, floatingip in self.local_floatingips.items():"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_f52dbea8","line":222,"range":{"start_line":222,"start_character":26,"end_line":222,"end_character":34},"in_reply_to":"bf3e73b7_9c36a2b4","updated":"2017-08-08 15:42:58.000000000","message":"fixed","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"}],"dragonflow/controller/provider_networks_app.py":[{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"2634bb05975688269e4b6ea84c9d215e17a9433d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                      \u0027bridge\u0027: bridge})"},{"line_number":66,"context_line":"            mappings \u003d self.vswitch_api.create_unique_patch_pair("},{"line_number":67,"context_line":"                    self.integration_bridge,"},{"line_number":68,"context_line":"                    bridge)"},{"line_number":69,"context_line":"            int_ofport \u003d mappings[self.integration_bridge]"},{"line_number":70,"context_line":"            self.int_ofports[physical_network] \u003d int_ofport"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_a3a7d2a7","line":68,"updated":"2017-07-03 05:46:24.000000000","message":"Why do we need diffrent patch port for each provider networks? can we have many external-bridges?","commit_id":"9599f2727d3828745cfda450368246556aeceafc"}],"dragonflow/ovsdb/commands.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"899f395a02e461d8a15ae85693300119613c328f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        ifaces \u003d getattr(port, \u0027interfaces\u0027, [])"},{"line_number":41,"context_line":"        options_dict \u003d getattr(iface, \u0027options\u0027, {})"},{"line_number":42,"context_line":"        external_ids \u003d getattr(iface, \u0027external_ids\u0027, {})"},{"line_number":43,"context_line":"        external_ids[\u0027peer_br\u0027] \u003d \"%s\" % peer.name"},{"line_number":44,"context_line":"        options_dict[\u0027peer\u0027] \u003d self.peer_port"},{"line_number":45,"context_line":"        iface.options \u003d options_dict"},{"line_number":46,"context_line":"        iface.external_ids \u003d external_ids"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff346bd7_746c3208","line":43,"range":{"start_line":43,"start_character":34,"end_line":43,"end_character":50},"updated":"2017-07-23 09:04:40.000000000","message":"Why not just: str(peer.name) ?","commit_id":"2135e10af1a94a99845ef2b2365016312dbeebc5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"899f395a02e461d8a15ae85693300119613c328f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        ifaces \u003d getattr(port, \u0027interfaces\u0027, [])"},{"line_number":41,"context_line":"        options_dict \u003d getattr(iface, \u0027options\u0027, {})"},{"line_number":42,"context_line":"        external_ids \u003d getattr(iface, \u0027external_ids\u0027, {})"},{"line_number":43,"context_line":"        external_ids[\u0027peer_br\u0027] \u003d \"%s\" % peer.name"},{"line_number":44,"context_line":"        options_dict[\u0027peer\u0027] \u003d self.peer_port"},{"line_number":45,"context_line":"        iface.options \u003d options_dict"},{"line_number":46,"context_line":"        iface.external_ids \u003d external_ids"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff346bd7_54712ee0","line":43,"range":{"start_line":43,"start_character":22,"end_line":43,"end_character":29},"updated":"2017-07-23 09:04:40.000000000","message":"Why not rename to peer-bridge ? (Shortcuts should be avoided if possible)","commit_id":"2135e10af1a94a99845ef2b2365016312dbeebc5"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"016ad45b6c1d1871c97086b9303c32b69c9cfc9c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        ifaces \u003d getattr(port, \u0027interfaces\u0027, [])"},{"line_number":41,"context_line":"        options_dict \u003d getattr(iface, \u0027options\u0027, {})"},{"line_number":42,"context_line":"        external_ids \u003d getattr(iface, \u0027external_ids\u0027, {})"},{"line_number":43,"context_line":"        external_ids[\u0027peer_br\u0027] \u003d \"%s\" % peer.name"},{"line_number":44,"context_line":"        options_dict[\u0027peer\u0027] \u003d self.peer_port"},{"line_number":45,"context_line":"        iface.options \u003d options_dict"},{"line_number":46,"context_line":"        iface.external_ids \u003d external_ids"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_54880c1e","line":43,"range":{"start_line":43,"start_character":34,"end_line":43,"end_character":50},"in_reply_to":"ff346bd7_746c3208","updated":"2017-07-30 11:42:56.000000000","message":"fixed","commit_id":"2135e10af1a94a99845ef2b2365016312dbeebc5"}],"dragonflow/ovsdb/patch_mapping.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f1e5c9777bb69b75b16679325e6f6556f79f7cdb","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        self.bridge1 \u003d bridge1"},{"line_number":25,"context_line":"        self.bridge2 \u003d bridge2"},{"line_number":26,"context_line":"        key \u003d [bridge1, bridge2]"},{"line_number":27,"context_line":"        self.key \u003d key.sort()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def _extract_suffix(self, name):"},{"line_number":30,"context_line":"        return name.split(\u0027-\u0027)[1] if \u0027-\u0027 in name else name"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_ff9ca66a","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":29},"updated":"2017-06-28 12:58:54.000000000","message":"key.sort() sorts in-place.","commit_id":"9599f2727d3828745cfda450368246556aeceafc"}],"dragonflow/ovsdb/vswitch_impl.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f1e5c9777bb69b75b16679325e6f6556f79f7cdb","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class OvsApi(object):"},{"line_number":35,"context_line":"    bridge_mapping \u003d dict()"},{"line_number":36,"context_line":"    \"\"\"The interface of openvswitch"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    Consumers use this class to set openvswitch or get results from"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_1f71a276","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":27},"updated":"2017-06-28 12:58:54.000000000","message":"Please place in constructor","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"0b70e957af123ec50880523021e10a21459cdd07","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class OvsApi(object):"},{"line_number":35,"context_line":"    bridge_mapping \u003d dict()"},{"line_number":36,"context_line":"    \"\"\"The interface of openvswitch"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    Consumers use this class to set openvswitch or get results from"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_c37580fc","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":27},"in_reply_to":"5f201791_1f71a276","updated":"2017-06-29 11:13:50.000000000","message":"This is a static class member","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f1e5c9777bb69b75b16679325e6f6556f79f7cdb","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                continue"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"            return iface[\u0027name\u0027]"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def create_patch_pair(self, local_bridge, peer_bridge,"},{"line_number":167,"context_line":"                          local_link_name\u003dNone, peer_link_name\u003dNone):"},{"line_number":168,"context_line":"        link_mapping \u003d mapping.Mapping(local_bridge, peer_bridge)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_7f0c1693","line":165,"updated":"2017-06-28 12:58:54.000000000","message":"Seems to me that Mapping is used to generate the key and the name, but I think neither warrant a new module or class.\n\nThe key can be generated with the built-in \u0027sorted\u0027 command. \n\nThen a generate patch-port name private function can be used for the rest. I think it would simplify things quite a lot.","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"0b70e957af123ec50880523021e10a21459cdd07","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                continue"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"            return iface[\u0027name\u0027]"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def create_patch_pair(self, local_bridge, peer_bridge,"},{"line_number":167,"context_line":"                          local_link_name\u003dNone, peer_link_name\u003dNone):"},{"line_number":168,"context_line":"        link_mapping \u003d mapping.Mapping(local_bridge, peer_bridge)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_2e0d3b37","line":165,"in_reply_to":"5f201791_7f0c1693","updated":"2017-06-29 11:13:50.000000000","message":"Yes it can, The mapping class simply encapsulates these actions to a single discrete module.","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f1e5c9777bb69b75b16679325e6f6556f79f7cdb","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def create_patch_pair(self, local_bridge, peer_bridge,"},{"line_number":167,"context_line":"                          local_link_name\u003dNone, peer_link_name\u003dNone):"},{"line_number":168,"context_line":"        link_mapping \u003d mapping.Mapping(local_bridge, peer_bridge)"},{"line_number":169,"context_line":"        links \u003d link_mapping.gen_link_mapping("},{"line_number":170,"context_line":"                    local_link_name,"},{"line_number":171,"context_line":"                    peer_link_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_3f58de85","line":168,"updated":"2017-06-28 12:58:54.000000000","message":"e.g.\n\nlocal_link_name \u003d self._patch_port_name(local_bridge, peer_bridge, local_link_name)\npeer_link_name \u003d self._patch_port_name(peer_bridge, local_bridge, peer_link_name)\n\nor even:\n\nlocal_link_name \u003d local_link_name or self._patch_port_name(local_bridge, peer_bridge)\npeer_link_name \u003d peer_link_name or self._patch_port_name(peer_bridge, local_bridge)","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f1e5c9777bb69b75b16679325e6f6556f79f7cdb","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        links \u003d link_mapping.gen_link_mapping("},{"line_number":170,"context_line":"                    local_link_name,"},{"line_number":171,"context_line":"                    peer_link_name)"},{"line_number":172,"context_line":"        local_bridge_mapping \u003d self.create_patch_port("},{"line_number":173,"context_line":"                    local_bridge,"},{"line_number":174,"context_line":"                    links[local_bridge],"},{"line_number":175,"context_line":"                    links[peer_bridge])"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_ff4dc6c3","line":172,"range":{"start_line":172,"start_character":8,"end_line":172,"end_character":28},"updated":"2017-06-28 12:58:54.000000000","message":"Maube rename to local_bridge_ofport (since that\u0027s the value it holds)?","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"0b70e957af123ec50880523021e10a21459cdd07","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        links \u003d link_mapping.gen_link_mapping("},{"line_number":170,"context_line":"                    local_link_name,"},{"line_number":171,"context_line":"                    peer_link_name)"},{"line_number":172,"context_line":"        local_bridge_mapping \u003d self.create_patch_port("},{"line_number":173,"context_line":"                    local_bridge,"},{"line_number":174,"context_line":"                    links[local_bridge],"},{"line_number":175,"context_line":"                    links[peer_bridge])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_afe82216","line":172,"range":{"start_line":172,"start_character":8,"end_line":172,"end_character":28},"in_reply_to":"5f201791_ff4dc6c3","updated":"2017-06-29 11:13:50.000000000","message":"Done","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f1e5c9777bb69b75b16679325e6f6556f79f7cdb","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                    local_bridge,"},{"line_number":174,"context_line":"                    links[local_bridge],"},{"line_number":175,"context_line":"                    links[peer_bridge])"},{"line_number":176,"context_line":"        peer_bridge_mapping \u003d self.create_patch_port("},{"line_number":177,"context_line":"                    peer_bridge,"},{"line_number":178,"context_line":"                    links[peer_bridge],"},{"line_number":179,"context_line":"                    links[local_bridge])"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_bfc98e26","line":176,"range":{"start_line":176,"start_character":8,"end_line":176,"end_character":27},"updated":"2017-06-28 12:58:54.000000000","message":"Same here","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"0b70e957af123ec50880523021e10a21459cdd07","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                    local_bridge,"},{"line_number":174,"context_line":"                    links[local_bridge],"},{"line_number":175,"context_line":"                    links[peer_bridge])"},{"line_number":176,"context_line":"        peer_bridge_mapping \u003d self.create_patch_port("},{"line_number":177,"context_line":"                    peer_bridge,"},{"line_number":178,"context_line":"                    links[peer_bridge],"},{"line_number":179,"context_line":"                    links[local_bridge])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_8fed6627","line":176,"range":{"start_line":176,"start_character":8,"end_line":176,"end_character":27},"in_reply_to":"5f201791_bfc98e26","updated":"2017-06-29 11:13:50.000000000","message":"Done","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f1e5c9777bb69b75b16679325e6f6556f79f7cdb","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def create_unique_patch_pair(self, local_bridge, peer_bridge,"},{"line_number":191,"context_line":"                                 local_link_name\u003dNone, peer_link_name\u003dNone):"},{"line_number":192,"context_line":"        link_mapping \u003d mapping.Mapping(local_bridge, peer_bridge)"},{"line_number":193,"context_line":"        patch_links \u003d self.bridge_mapping.get(link_mapping)"},{"line_number":194,"context_line":"        if patch_links:"},{"line_number":195,"context_line":"            return patch_links"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_9fcc9235","line":192,"range":{"start_line":192,"start_character":23,"end_line":192,"end_character":65},"updated":"2017-06-28 12:58:54.000000000","message":"e.g.\n\nlink_mapping \u003d sorted(local_bridge, peer_bridge)","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f1e5c9777bb69b75b16679325e6f6556f79f7cdb","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def create_unique_patch_pair(self, local_bridge, peer_bridge,"},{"line_number":191,"context_line":"                                 local_link_name\u003dNone, peer_link_name\u003dNone):"},{"line_number":192,"context_line":"        link_mapping \u003d mapping.Mapping(local_bridge, peer_bridge)"},{"line_number":193,"context_line":"        patch_links \u003d self.bridge_mapping.get(link_mapping)"},{"line_number":194,"context_line":"        if patch_links:"},{"line_number":195,"context_line":"            return patch_links"},{"line_number":196,"context_line":"        patch_links \u003d self.create_patch_pair("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_ffe2669f","line":193,"range":{"start_line":193,"start_character":42,"end_line":193,"end_character":45},"updated":"2017-06-28 12:58:54.000000000","message":"In fact, this might search by instance ID, rather than the key inside","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"06dbb3bb5e9f59a53e309e5ac4cced419ca97275","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def create_unique_patch_pair(self, local_bridge, peer_bridge,"},{"line_number":191,"context_line":"                                 local_link_name\u003dNone, peer_link_name\u003dNone):"},{"line_number":192,"context_line":"        link_mapping \u003d mapping.Mapping(local_bridge, peer_bridge)"},{"line_number":193,"context_line":"        patch_links \u003d self.bridge_mapping.get(link_mapping)"},{"line_number":194,"context_line":"        if patch_links:"},{"line_number":195,"context_line":"            return patch_links"},{"line_number":196,"context_line":"        patch_links \u003d self.create_patch_pair("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_5d669d2b","line":193,"range":{"start_line":193,"start_character":42,"end_line":193,"end_character":45},"in_reply_to":"3f1d235d_08efccb0","updated":"2017-07-03 03:50:53.000000000","message":"I think it won\u0027t. See the following examples (python 2.7):\n\n\u003e\u003e\u003e class A(object):\n...     a \u003d 5\n... \n\u003e\u003e\u003e a1 \u003d A()\n\u003e\u003e\u003e a2 \u003d A()\n\u003e\u003e\u003e a1 \u003d\u003d a2\nFalse\n\u003e\u003e\u003e id(a1)\n140259488438160\n\u003e\u003e\u003e id(a1) \u003d\u003d id(a2)\nFalse\n\u003e\u003e\u003e d \u003d {a1: 1, a2: 2}\n\u003e\u003e\u003e d\n{\u003c__main__.A object at 0x7f90b4fc1790\u003e: 1, \u003c__main__.A object at 0x7f90b4fc1750\u003e: 2}","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"241f25634644df888b393bc656f4f46ba76a5ee2","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def create_unique_patch_pair(self, local_bridge, peer_bridge,"},{"line_number":191,"context_line":"                                 local_link_name\u003dNone, peer_link_name\u003dNone):"},{"line_number":192,"context_line":"        link_mapping \u003d mapping.Mapping(local_bridge, peer_bridge)"},{"line_number":193,"context_line":"        patch_links \u003d self.bridge_mapping.get(link_mapping)"},{"line_number":194,"context_line":"        if patch_links:"},{"line_number":195,"context_line":"            return patch_links"},{"line_number":196,"context_line":"        patch_links \u003d self.create_patch_pair("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_a5d28133","line":193,"range":{"start_line":193,"start_character":42,"end_line":193,"end_character":45},"in_reply_to":"3f1d235d_6f7d6a6d","updated":"2017-06-29 12:26:03.000000000","message":"I meant python object id, i.e. id(link_mapping), since __hash__ isn\u0027t implemented.","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"16c64294bad7c5dd874d49d4eb8bbdd717b0334d","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def create_unique_patch_pair(self, local_bridge, peer_bridge,"},{"line_number":191,"context_line":"                                 local_link_name\u003dNone, peer_link_name\u003dNone):"},{"line_number":192,"context_line":"        link_mapping \u003d mapping.Mapping(local_bridge, peer_bridge)"},{"line_number":193,"context_line":"        patch_links \u003d self.bridge_mapping.get(link_mapping)"},{"line_number":194,"context_line":"        if patch_links:"},{"line_number":195,"context_line":"            return patch_links"},{"line_number":196,"context_line":"        patch_links \u003d self.create_patch_pair("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_08efccb0","line":193,"range":{"start_line":193,"start_character":42,"end_line":193,"end_character":45},"in_reply_to":"3f1d235d_a5d28133","updated":"2017-07-02 10:36:33.000000000","message":"would python comparison operator match to identical instances, which do not share the same objectid","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"0b70e957af123ec50880523021e10a21459cdd07","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def create_unique_patch_pair(self, local_bridge, peer_bridge,"},{"line_number":191,"context_line":"                                 local_link_name\u003dNone, peer_link_name\u003dNone):"},{"line_number":192,"context_line":"        link_mapping \u003d mapping.Mapping(local_bridge, peer_bridge)"},{"line_number":193,"context_line":"        patch_links \u003d self.bridge_mapping.get(link_mapping)"},{"line_number":194,"context_line":"        if patch_links:"},{"line_number":195,"context_line":"            return patch_links"},{"line_number":196,"context_line":"        patch_links \u003d self.create_patch_pair("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_6f7d6a6d","line":193,"range":{"start_line":193,"start_character":42,"end_line":193,"end_character":45},"in_reply_to":"5f201791_ffe2669f","updated":"2017-06-29 11:13:50.000000000","message":"I don\u0027t fully understand, do you mean bridge ovsdb instance id?","commit_id":"9599f2727d3828745cfda450368246556aeceafc"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"899f395a02e461d8a15ae85693300119613c328f","unresolved":false,"context_lines":[{"line_number":214,"context_line":"                  \u0027link1\u0027: local_bridge_mapping,"},{"line_number":215,"context_line":"                  \u0027bridge2\u0027: peer_bridge,"},{"line_number":216,"context_line":"                  \u0027link2\u0027: peer_bridge_mapping})"},{"line_number":217,"context_line":"        return links"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _create_patch_port(self, bridge, port, peer, peer_port):"},{"line_number":220,"context_line":"        if cfg.CONF.df.enable_dpdk:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff346bd7_3476aada","line":217,"range":{"start_line":217,"start_character":0,"end_line":217,"end_character":20},"updated":"2017-07-23 09:04:40.000000000","message":"Not downvoting because of this, but I would like to raise the question, is returning a map the best API? Maybe just return the two port names: local_link_name, peer_link_name ? I think it would make the client code clearer.","commit_id":"2135e10af1a94a99845ef2b2365016312dbeebc5"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"016ad45b6c1d1871c97086b9303c32b69c9cfc9c","unresolved":false,"context_lines":[{"line_number":214,"context_line":"                  \u0027link1\u0027: local_bridge_mapping,"},{"line_number":215,"context_line":"                  \u0027bridge2\u0027: peer_bridge,"},{"line_number":216,"context_line":"                  \u0027link2\u0027: peer_bridge_mapping})"},{"line_number":217,"context_line":"        return links"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _create_patch_port(self, bridge, port, peer, peer_port):"},{"line_number":220,"context_line":"        if cfg.CONF.df.enable_dpdk:"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_b4b738d9","line":217,"range":{"start_line":217,"start_character":0,"end_line":217,"end_character":20},"in_reply_to":"ff346bd7_3476aada","updated":"2017-07-30 11:42:56.000000000","message":"Omer, I tend to disagree, I think that a map interface is order-less, and as such you access you link by the bridge -name regardless if it local or remote. With that said. I don\u0027t find it as a major issue. And if your opinion will find another support, I will change the api to be positional.","commit_id":"2135e10af1a94a99845ef2b2365016312dbeebc5"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"18df82c6cbe534af1622ff2fb60cb87dd560cfee","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            bridge1_link_name \u003d \"%s-patch\" % bridge2"},{"line_number":172,"context_line":"        if bridge2_link_name is None:"},{"line_number":173,"context_line":"            bridge2_link_name \u003d \"%s-patch\" % bridge1"},{"line_number":174,"context_line":"        mapping \u003d {bridge1: bridge1_link_name,"},{"line_number":175,"context_line":"                   bridge2: bridge2_link_name}"},{"line_number":176,"context_line":"        LOG.debug(\u0027genrated mappings {%(bridge1)s: %(link1)s,\u0027"},{"line_number":177,"context_line":"                  \u0027 %(bridge2)s: %(link2)s}\u0027,"},{"line_number":178,"context_line":"                  {\u0027bridge1\u0027: bridge1,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf3e73b7_1c73d282","line":175,"range":{"start_line":174,"start_character":0,"end_line":175,"end_character":46},"updated":"2017-08-06 12:08:41.000000000","message":"I don\u0027t like this return type, it returns more data than it should. I can\u0027t think of a scenario where the called would need the bridge names.\n\nIn my opinion a return structured like (patch1, patch2) is a lot more elegant.","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"4bd2f4fff084b83431770f15179c9644915cf537","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            bridge1_link_name \u003d \"%s-patch\" % bridge2"},{"line_number":172,"context_line":"        if bridge2_link_name is None:"},{"line_number":173,"context_line":"            bridge2_link_name \u003d \"%s-patch\" % bridge1"},{"line_number":174,"context_line":"        mapping \u003d {bridge1: bridge1_link_name,"},{"line_number":175,"context_line":"                   bridge2: bridge2_link_name}"},{"line_number":176,"context_line":"        LOG.debug(\u0027genrated mappings {%(bridge1)s: %(link1)s,\u0027"},{"line_number":177,"context_line":"                  \u0027 %(bridge2)s: %(link2)s}\u0027,"},{"line_number":178,"context_line":"                  {\u0027bridge1\u0027: bridge1,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_55180a80","line":175,"range":{"start_line":174,"start_character":0,"end_line":175,"end_character":46},"in_reply_to":"bf3e73b7_1c73d282","updated":"2017-08-08 15:42:58.000000000","message":"fixed","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"18df82c6cbe534af1622ff2fb60cb87dd560cfee","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        patch_name \u003d self.bridge_mapping.get(network)"},{"line_number":189,"context_line":"        if patch_name:"},{"line_number":190,"context_line":"            return self.get_port_ofport(patch_name)"},{"line_number":191,"context_line":"        return None"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def create_patch_pair(self, local_bridge, peer_bridge,"},{"line_number":194,"context_line":"                          local_link_name\u003dNone, peer_link_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf3e73b7_fc6fee8f","line":191,"range":{"start_line":191,"start_character":0,"end_line":191,"end_character":19},"updated":"2017-08-06 12:08:41.000000000","message":"not needed","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"4bd2f4fff084b83431770f15179c9644915cf537","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        patch_name \u003d self.bridge_mapping.get(network)"},{"line_number":189,"context_line":"        if patch_name:"},{"line_number":190,"context_line":"            return self.get_port_ofport(patch_name)"},{"line_number":191,"context_line":"        return None"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def create_patch_pair(self, local_bridge, peer_bridge,"},{"line_number":194,"context_line":"                          local_link_name\u003dNone, peer_link_name\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_150a8225","line":191,"range":{"start_line":191,"start_character":0,"end_line":191,"end_character":19},"in_reply_to":"bf3e73b7_fc6fee8f","updated":"2017-08-08 15:42:58.000000000","message":"fixed","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"18df82c6cbe534af1622ff2fb60cb87dd560cfee","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                    links[peer_bridge],"},{"line_number":208,"context_line":"                    local_bridge,"},{"line_number":209,"context_line":"                    links[local_bridge])"},{"line_number":210,"context_line":"        LOG.info(\"created patch ports \""},{"line_number":211,"context_line":"                 \"{%(bridge1)s: %(link1)s,\""},{"line_number":212,"context_line":"                 \" %(bridge2)s: %(link2)s}\","},{"line_number":213,"context_line":"                 {\u0027bridge1\u0027: local_bridge,"},{"line_number":214,"context_line":"                  \u0027link1\u0027: local_bridge_mapping,"},{"line_number":215,"context_line":"                  \u0027bridge2\u0027: peer_bridge,"},{"line_number":216,"context_line":"                  \u0027link2\u0027: peer_bridge_mapping})"},{"line_number":217,"context_line":"        return links"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _create_patch_port(self, bridge, port, peer, peer_port):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf3e73b7_1cf872c2","line":216,"range":{"start_line":210,"start_character":8,"end_line":216,"end_character":48},"updated":"2017-08-06 12:08:41.000000000","message":"This log is pretty similar to one on line 176, I don\u0027t think we need both","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"4bd2f4fff084b83431770f15179c9644915cf537","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                    links[peer_bridge],"},{"line_number":208,"context_line":"                    local_bridge,"},{"line_number":209,"context_line":"                    links[local_bridge])"},{"line_number":210,"context_line":"        LOG.info(\"created patch ports \""},{"line_number":211,"context_line":"                 \"{%(bridge1)s: %(link1)s,\""},{"line_number":212,"context_line":"                 \" %(bridge2)s: %(link2)s}\","},{"line_number":213,"context_line":"                 {\u0027bridge1\u0027: local_bridge,"},{"line_number":214,"context_line":"                  \u0027link1\u0027: local_bridge_mapping,"},{"line_number":215,"context_line":"                  \u0027bridge2\u0027: peer_bridge,"},{"line_number":216,"context_line":"                  \u0027link2\u0027: peer_bridge_mapping})"},{"line_number":217,"context_line":"        return links"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _create_patch_port(self, bridge, port, peer, peer_port):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_7008bc27","line":216,"range":{"start_line":210,"start_character":8,"end_line":216,"end_character":48},"in_reply_to":"bf3e73b7_1cf872c2","updated":"2017-08-08 15:42:58.000000000","message":"fixed","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"18df82c6cbe534af1622ff2fb60cb87dd560cfee","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            self.ovsdb.add_br(bridge, datapath_type\u003d\u0027system\u0027).execute()"},{"line_number":224,"context_line":"        if not self.patch_port_exist(port):"},{"line_number":225,"context_line":"            self.ovsdb.add_patch_port(bridge, port, peer, peer_port).execute()"},{"line_number":226,"context_line":"        return self.get_port_ofport(port)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def patch_port_exist(self, port):"},{"line_number":229,"context_line":"        return \u0027patch\u0027 \u003d\u003d self._db_get_val(\u0027Interface\u0027, port, \u0027type\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf3e73b7_fc1dae0f","line":226,"range":{"start_line":226,"start_character":7,"end_line":226,"end_character":41},"updated":"2017-08-06 12:08:41.000000000","message":"Aside from being logged in method above, ofport is not being used, and the callers of create_patch_pair call get_ofport for one of the link anyway. I think this lookup can be dropped.","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"4bd2f4fff084b83431770f15179c9644915cf537","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            self.ovsdb.add_br(bridge, datapath_type\u003d\u0027system\u0027).execute()"},{"line_number":224,"context_line":"        if not self.patch_port_exist(port):"},{"line_number":225,"context_line":"            self.ovsdb.add_patch_port(bridge, port, peer, peer_port).execute()"},{"line_number":226,"context_line":"        return self.get_port_ofport(port)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def patch_port_exist(self, port):"},{"line_number":229,"context_line":"        return \u0027patch\u0027 \u003d\u003d self._db_get_val(\u0027Interface\u0027, port, \u0027type\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_500db835","line":226,"range":{"start_line":226,"start_character":7,"end_line":226,"end_character":41},"in_reply_to":"bf3e73b7_fc1dae0f","updated":"2017-08-08 15:42:58.000000000","message":"fixed","commit_id":"4fe205de864b77dc82dbb3c847407c4df13f1c7d"}]}
