)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8939417fa6713dfb0a78961e0c8e7a23c34377fd","unresolved":false,"context_lines":[{"line_number":11,"context_line":"* Neutron driver"},{"line_number":12,"context_line":"* devstack updates to use q-trunk"},{"line_number":13,"context_line":"* unit tests"},{"line_number":14,"context_line":"* fullstack tests"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I3b940635853525d55fec67a09383083d6ab3adb8"},{"line_number":17,"context_line":"Implements: bp vlan-trunk"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba2be162_7eb055de","line":14,"range":{"start_line":14,"start_character":1,"end_line":14,"end_character":17},"updated":"2017-03-01 08:25:00.000000000","message":"I think this one is missing","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0781d703eca45637c8b4a4d8c3912d221a595d57","unresolved":false,"context_lines":[{"line_number":11,"context_line":"* Neutron driver"},{"line_number":12,"context_line":"* devstack updates to use q-trunk"},{"line_number":13,"context_line":"* unit tests"},{"line_number":14,"context_line":"* fullstack tests"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I3b940635853525d55fec67a09383083d6ab3adb8"},{"line_number":17,"context_line":"Implements: bp vlan-trunk"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba2be162_0dd70e24","line":14,"range":{"start_line":14,"start_character":1,"end_line":14,"end_character":17},"in_reply_to":"ba2be162_7eb055de","updated":"2017-03-01 20:59:11.000000000","message":"Hence the [WIP] tag. unit tests aren\u0027t complete either","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"}],"dragonflow/controller/df_local_controller.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"55d8ca81acb6bb3f9fa8b0375e82c17d97be0df0","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                    trunk.ChildPortSegmentation(port\u003dlport.id),"},{"line_number":366,"context_line":"                    trunk.ChildPortSegmentation.get_index(\u0027lport_id\u0027))"},{"line_number":367,"context_line":"            if cps:"},{"line_number":368,"context_line":"                LOG.debug(\u0027Found CPS: %r %r\u0027, cps, cps.parent)"},{"line_number":369,"context_line":"                lport.ofport \u003d cps.parent.ofport"},{"line_number":370,"context_line":"                lport.chassis \u003d self.chassis_name"},{"line_number":371,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_68e30207","line":368,"range":{"start_line":368,"start_character":33,"end_line":368,"end_character":36},"updated":"2017-05-30 13:08:50.000000000","message":"Better not to be acronym.","commit_id":"58b3a9fe519b79af052b0664fd83ac72df8b18bb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a16d5b7931d0a1cce3fa251484bda14cae2de996","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                    trunk.ChildPortSegmentation(port\u003dlport.id),"},{"line_number":366,"context_line":"                    trunk.ChildPortSegmentation.get_index(\u0027lport_id\u0027))"},{"line_number":367,"context_line":"            if cps:"},{"line_number":368,"context_line":"                LOG.debug(\u0027Found CPS: %r %r\u0027, cps, cps.parent)"},{"line_number":369,"context_line":"                lport.ofport \u003d cps.parent.ofport"},{"line_number":370,"context_line":"                lport.chassis \u003d self.chassis_name"},{"line_number":371,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_7f346393","line":368,"in_reply_to":"df140735_68e30207","updated":"2017-06-06 11:47:58.000000000","message":"Debug code. Will remove","commit_id":"58b3a9fe519b79af052b0664fd83ac72df8b18bb"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"55d8ca81acb6bb3f9fa8b0375e82c17d97be0df0","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                return True"},{"line_number":372,"context_line":"        except Exception:"},{"line_number":373,"context_line":"            # Not found. Do nothing"},{"line_number":374,"context_line":"            LOG.exception(\u0027cps get_one\u0027)"},{"line_number":375,"context_line":"            pass"},{"line_number":376,"context_line":"        return False"},{"line_number":377,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_08bc86da","line":374,"range":{"start_line":374,"start_character":27,"end_line":374,"end_character":38},"updated":"2017-05-30 13:08:50.000000000","message":"should be something more meaningful.","commit_id":"58b3a9fe519b79af052b0664fd83ac72df8b18bb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a16d5b7931d0a1cce3fa251484bda14cae2de996","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                return True"},{"line_number":372,"context_line":"        except Exception:"},{"line_number":373,"context_line":"            # Not found. Do nothing"},{"line_number":374,"context_line":"            LOG.exception(\u0027cps get_one\u0027)"},{"line_number":375,"context_line":"            pass"},{"line_number":376,"context_line":"        return False"},{"line_number":377,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_bffc3bb5","line":374,"in_reply_to":"df140735_08bc86da","updated":"2017-06-06 11:47:58.000000000","message":"Will do","commit_id":"58b3a9fe519b79af052b0664fd83ac72df8b18bb"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"55d8ca81acb6bb3f9fa8b0375e82c17d97be0df0","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        except Exception:"},{"line_number":373,"context_line":"            # Not found. Do nothing"},{"line_number":374,"context_line":"            LOG.exception(\u0027cps get_one\u0027)"},{"line_number":375,"context_line":"            pass"},{"line_number":376,"context_line":"        return False"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def update_lport(self, lport):"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_a8ba3adb","line":375,"range":{"start_line":375,"start_character":12,"end_line":375,"end_character":16},"updated":"2017-05-30 13:08:50.000000000","message":"This is not needed.","commit_id":"58b3a9fe519b79af052b0664fd83ac72df8b18bb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a16d5b7931d0a1cce3fa251484bda14cae2de996","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        except Exception:"},{"line_number":373,"context_line":"            # Not found. Do nothing"},{"line_number":374,"context_line":"            LOG.exception(\u0027cps get_one\u0027)"},{"line_number":375,"context_line":"            pass"},{"line_number":376,"context_line":"        return False"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def update_lport(self, lport):"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_ff1f5305","line":375,"in_reply_to":"df140735_a8ba3adb","updated":"2017-06-06 11:47:58.000000000","message":"Yes. Will remove.","commit_id":"58b3a9fe519b79af052b0664fd83ac72df8b18bb"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"3a5704ad6ea623596a508553fb085409e72916dc","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                    trunk.ChildPortSegmentation.get_index(\u0027lport_id\u0027))"},{"line_number":372,"context_line":"            if cps:"},{"line_number":373,"context_line":"                lport.ofport \u003d cps.parent.ofport"},{"line_number":374,"context_line":"                lport.chassis \u003d self.chassis_name"},{"line_number":375,"context_line":"                return True"},{"line_number":376,"context_line":"        except Exception:"},{"line_number":377,"context_line":"            # Not found. Do nothing"}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_44a3c100","line":374,"range":{"start_line":374,"start_character":16,"end_line":374,"end_character":49},"updated":"2017-06-06 14:04:59.000000000","message":"Don\u0027t we do this in trunk driver L116?","commit_id":"d6d1f939854b40dc9fb8552843a0ae30f782f2bf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6cd36734e134da36ba6c51e003ed6628f328bc77","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                    trunk.ChildPortSegmentation.get_index(\u0027lport_id\u0027))"},{"line_number":372,"context_line":"            if cps:"},{"line_number":373,"context_line":"                lport.ofport \u003d cps.parent.ofport"},{"line_number":374,"context_line":"                lport.chassis \u003d self.chassis_name"},{"line_number":375,"context_line":"                return True"},{"line_number":376,"context_line":"        except Exception:"},{"line_number":377,"context_line":"            # Not found. Do nothing"}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_678fe729","line":374,"range":{"start_line":374,"start_character":16,"end_line":374,"end_character":49},"in_reply_to":"df140735_44a3c100","updated":"2017-06-06 14:13:58.000000000","message":"True. Will remove.","commit_id":"d6d1f939854b40dc9fb8552843a0ae30f782f2bf"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"3a5704ad6ea623596a508553fb085409e72916dc","unresolved":false,"context_lines":[{"line_number":382,"context_line":"    def update_lport(self, lport):"},{"line_number":383,"context_line":"        chassis \u003d lport.chassis"},{"line_number":384,"context_line":"        if (not lport.remote_vtep and"},{"line_number":385,"context_line":"                not self._is_trunk_subport(lport) and"},{"line_number":386,"context_line":"                not self._is_physical_chassis(chassis)):"},{"line_number":387,"context_line":"            LOG.debug((\"Port %s has not been bound or it is a vPort\"),"},{"line_number":388,"context_line":"                      lport.id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_30b92c78","line":385,"range":{"start_line":385,"start_character":25,"end_line":385,"end_character":42},"updated":"2017-06-06 14:04:59.000000000","message":"This call does not look like something that should mutate lport (L373-374)","commit_id":"d6d1f939854b40dc9fb8552843a0ae30f782f2bf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6cd36734e134da36ba6c51e003ed6628f328bc77","unresolved":false,"context_lines":[{"line_number":382,"context_line":"    def update_lport(self, lport):"},{"line_number":383,"context_line":"        chassis \u003d lport.chassis"},{"line_number":384,"context_line":"        if (not lport.remote_vtep and"},{"line_number":385,"context_line":"                not self._is_trunk_subport(lport) and"},{"line_number":386,"context_line":"                not self._is_physical_chassis(chassis)):"},{"line_number":387,"context_line":"            LOG.debug((\"Port %s has not been bound or it is a vPort\"),"},{"line_number":388,"context_line":"                      lport.id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_07d38b05","line":385,"range":{"start_line":385,"start_character":25,"end_line":385,"end_character":42},"in_reply_to":"df140735_30b92c78","updated":"2017-06-06 14:13:58.000000000","message":"I\u0027ll rename the method. I will be removed anyway for bug #1690775","commit_id":"d6d1f939854b40dc9fb8552843a0ae30f782f2bf"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0bc8f4beaa18edc1c64937d07858641d1c190cd1","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        except Exception:"},{"line_number":331,"context_line":"            # Not found. Do nothing"},{"line_number":332,"context_line":"            pass"},{"line_number":333,"context_line":"        return None"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def update_lport(self, lport):"},{"line_number":336,"context_line":"        chassis \u003d lport.chassis"}],"source_content_type":"text/x-python","patch_set":22,"id":"bf091321_baccbb89","line":333,"range":{"start_line":333,"start_character":0,"end_line":333,"end_character":19},"updated":"2017-06-09 01:41:15.000000000","message":"This is not necessary. None is returned by default if no explicit return.","commit_id":"08557b018c16a0f92aaf3779ee9ccd31d7bc1623"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a230ba8777dbf62f98c7d95331eaa58f8f7a2d52","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        except Exception:"},{"line_number":331,"context_line":"            # Not found. Do nothing"},{"line_number":332,"context_line":"            pass"},{"line_number":333,"context_line":"        return None"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def update_lport(self, lport):"},{"line_number":336,"context_line":"        chassis \u003d lport.chassis"}],"source_content_type":"text/x-python","patch_set":22,"id":"bf091321_1b2289a5","line":333,"range":{"start_line":333,"start_character":0,"end_line":333,"end_character":19},"in_reply_to":"bf091321_baccbb89","updated":"2017-06-09 13:18:40.000000000","message":"Done","commit_id":"08557b018c16a0f92aaf3779ee9ccd31d7bc1623"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8a460627e511d80fe68fa545ff8765b17a97c571","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        is_local \u003d (chassis.id \u003d\u003d self.chassis_name)"},{"line_number":233,"context_line":"        lport.is_local \u003d is_local"},{"line_number":234,"context_line":"        if is_local:"},{"line_number":235,"context_line":"            if not lport.ofport:"},{"line_number":236,"context_line":"                lport.ofport \u003d self.vswitch_api.get_port_ofport_by_id(lport.id)"},{"line_number":237,"context_line":"            if not lport.ofport:"},{"line_number":238,"context_line":"                # Not attached to the switch. Maybe it\u0027s a subport?"},{"line_number":239,"context_line":"                lport.ofport \u003d self._get_trunk_subport_ofport(lport)"},{"line_number":240,"context_line":"        else:"},{"line_number":241,"context_line":"            lport.peer_vtep_address \u003d (chassis.id if lport.remote_vtep else"},{"line_number":242,"context_line":"                                       chassis.ip)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_5ea937dd","line":239,"range":{"start_line":235,"start_character":9,"end_line":239,"end_character":68},"updated":"2017-06-11 11:01:27.000000000","message":"This code block is a bit confusing","commit_id":"5b4a3035261ba38fd52ccb09413138accaacb19d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9cd6e8ed43673b52097af5de095fd4736ac35064","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        is_local \u003d (chassis.id \u003d\u003d self.chassis_name)"},{"line_number":233,"context_line":"        lport.is_local \u003d is_local"},{"line_number":234,"context_line":"        if is_local:"},{"line_number":235,"context_line":"            if not lport.ofport:"},{"line_number":236,"context_line":"                lport.ofport \u003d self.vswitch_api.get_port_ofport_by_id(lport.id)"},{"line_number":237,"context_line":"            if not lport.ofport:"},{"line_number":238,"context_line":"                # Not attached to the switch. Maybe it\u0027s a subport?"},{"line_number":239,"context_line":"                lport.ofport \u003d self._get_trunk_subport_ofport(lport)"},{"line_number":240,"context_line":"        else:"},{"line_number":241,"context_line":"            lport.peer_vtep_address \u003d (chassis.id if lport.remote_vtep else"},{"line_number":242,"context_line":"                                       chassis.ip)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_1994f98a","line":239,"range":{"start_line":235,"start_character":9,"end_line":239,"end_character":68},"in_reply_to":"7f231b9d_5ea937dd","updated":"2017-06-11 14:06:51.000000000","message":"Yes.\n\nI am hoping fixing bug 1690775 would fix that. I\u0027d be happy to hear suggestions for a stop-gap measure.","commit_id":"5b4a3035261ba38fd52ccb09413138accaacb19d"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8a460627e511d80fe68fa545ff8765b17a97c571","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            if cps:"},{"line_number":269,"context_line":"                return cps.parent.ofport"},{"line_number":270,"context_line":"        except Exception:"},{"line_number":271,"context_line":"            # Not found. Do nothing"},{"line_number":272,"context_line":"            pass"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def update_lport(self, lport):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_feb7e339","line":271,"updated":"2017-06-11 11:01:27.000000000","message":"Maybe log?","commit_id":"5b4a3035261ba38fd52ccb09413138accaacb19d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9cd6e8ed43673b52097af5de095fd4736ac35064","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            if cps:"},{"line_number":269,"context_line":"                return cps.parent.ofport"},{"line_number":270,"context_line":"        except Exception:"},{"line_number":271,"context_line":"            # Not found. Do nothing"},{"line_number":272,"context_line":"            pass"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def update_lport(self, lport):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_59f711f7","line":271,"in_reply_to":"7f231b9d_feb7e339","updated":"2017-06-11 14:06:51.000000000","message":"A log might be interesting in the caller, but since it didn\u0027t exist in the past, I think it should be added in a different patch (if still wanted)","commit_id":"5b4a3035261ba38fd52ccb09413138accaacb19d"}],"dragonflow/controller/metadata_service_app.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"72c026877f7029808d43adada3bfe68474e0abc2","unresolved":false,"context_lines":[{"line_number":489,"context_line":"            raise exceptions.NoRemoteIPProxyException()"},{"line_number":490,"context_line":"        tunnel_key \u003d int(netaddr.IPAddress(remote_addr) \u0026 ~0x80000000)"},{"line_number":491,"context_line":"        lport \u003d self._get_logical_port_by_tunnel_key(tunnel_key)"},{"line_number":492,"context_line":"        headers \u003d dict(req.headers)"},{"line_number":493,"context_line":"        tenant_id \u003d lport.topic"},{"line_number":494,"context_line":"        instance_id \u003d lport.device_id"},{"line_number":495,"context_line":"        ip \u003d lport.ip"},{"line_number":496,"context_line":"        headers.update({"},{"line_number":497,"context_line":"            \u0027X-Forwarded-For\u0027: str(ip),"},{"line_number":498,"context_line":"            \u0027X-Tenant-ID\u0027: tenant_id,"},{"line_number":499,"context_line":"            \u0027X-Instance-ID\u0027: instance_id,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_999bf764","line":496,"range":{"start_line":492,"start_character":0,"end_line":496,"end_character":24},"updated":"2017-05-22 13:52:21.000000000","message":"Leftovers from lport patch?","commit_id":"0428e334482a73b241131937678f2a38babeb586"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4c5d58dfaec26c181efd48b585cd3549856fc9c9","unresolved":false,"context_lines":[{"line_number":489,"context_line":"            raise exceptions.NoRemoteIPProxyException()"},{"line_number":490,"context_line":"        tunnel_key \u003d int(netaddr.IPAddress(remote_addr) \u0026 ~0x80000000)"},{"line_number":491,"context_line":"        lport \u003d self._get_logical_port_by_tunnel_key(tunnel_key)"},{"line_number":492,"context_line":"        headers \u003d dict(req.headers)"},{"line_number":493,"context_line":"        tenant_id \u003d lport.topic"},{"line_number":494,"context_line":"        instance_id \u003d lport.device_id"},{"line_number":495,"context_line":"        ip \u003d lport.ip"},{"line_number":496,"context_line":"        headers.update({"},{"line_number":497,"context_line":"            \u0027X-Forwarded-For\u0027: str(ip),"},{"line_number":498,"context_line":"            \u0027X-Tenant-ID\u0027: tenant_id,"},{"line_number":499,"context_line":"            \u0027X-Instance-ID\u0027: instance_id,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_c4e4e2e2","line":496,"range":{"start_line":492,"start_character":0,"end_line":496,"end_character":24},"in_reply_to":"ff0f0b1f_999bf764","updated":"2017-05-23 14:42:06.000000000","message":"Well, bah. Will split.","commit_id":"0428e334482a73b241131937678f2a38babeb586"}],"dragonflow/controller/trunk_app.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8939417fa6713dfb0a78961e0c8e7a23c34377fd","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @df_base_app.register_event(trunk.ChildPortSegmentation, \u0027created\u0027)"},{"line_number":24,"context_line":"    def _child_port_segmentation_created(self, child_port_segmentation):"},{"line_number":25,"context_line":"        # Classification rule"},{"line_number":26,"context_line":"        self._add_classification_rule(child_port_segmentation)"},{"line_number":27,"context_line":"        # Dispatch rule"},{"line_number":28,"context_line":"        self._add_dispatch_rule(child_port_segmentation)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_d35bfa52","line":25,"range":{"start_line":25,"start_character":7,"end_line":25,"end_character":29},"updated":"2017-03-01 08:25:00.000000000","message":"seems redundant","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0781d703eca45637c8b4a4d8c3912d221a595d57","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @df_base_app.register_event(trunk.ChildPortSegmentation, \u0027created\u0027)"},{"line_number":24,"context_line":"    def _child_port_segmentation_created(self, child_port_segmentation):"},{"line_number":25,"context_line":"        # Classification rule"},{"line_number":26,"context_line":"        self._add_classification_rule(child_port_segmentation)"},{"line_number":27,"context_line":"        # Dispatch rule"},{"line_number":28,"context_line":"        self._add_dispatch_rule(child_port_segmentation)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_6de88ae3","line":25,"range":{"start_line":25,"start_character":7,"end_line":25,"end_character":29},"in_reply_to":"ba2be162_d35bfa52","updated":"2017-03-01 20:59:11.000000000","message":"Will do","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8939417fa6713dfb0a78961e0c8e7a23c34377fd","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    def _child_port_segmentation_created(self, child_port_segmentation):"},{"line_number":25,"context_line":"        # Classification rule"},{"line_number":26,"context_line":"        self._add_classification_rule(child_port_segmentation)"},{"line_number":27,"context_line":"        # Dispatch rule"},{"line_number":28,"context_line":"        self._add_dispatch_rule(child_port_segmentation)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def _get_classification_match(self, child_port_segmentation):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_3331b60c","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":23},"updated":"2017-03-01 08:25:00.000000000","message":"ditto","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0781d703eca45637c8b4a4d8c3912d221a595d57","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    def _child_port_segmentation_created(self, child_port_segmentation):"},{"line_number":25,"context_line":"        # Classification rule"},{"line_number":26,"context_line":"        self._add_classification_rule(child_port_segmentation)"},{"line_number":27,"context_line":"        # Dispatch rule"},{"line_number":28,"context_line":"        self._add_dispatch_rule(child_port_segmentation)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def _get_classification_match(self, child_port_segmentation):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_adf282d0","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":23},"in_reply_to":"ba2be162_3331b60c","updated":"2017-03-01 20:59:11.000000000","message":"Will do","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8939417fa6713dfb0a78961e0c8e7a23c34377fd","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                in_port\u003dchild_port_segmentation.parent.ofport,"},{"line_number":36,"context_line":"                vlan_vid\u003dchild_port_segmentation.segmentation_id"},{"line_number":37,"context_line":"            )"},{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            raise exceptions.UnsupportedSegmentationType("},{"line_number":40,"context_line":"                segmentation_type\u003dsegmentation_type"},{"line_number":41,"context_line":"            )"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _get_classification_actions(self, child_port_segmentation):"},{"line_number":44,"context_line":"        segmentation_type \u003d child_port_segmentation.segmentation_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_de65c1e1","line":41,"range":{"start_line":38,"start_character":1,"end_line":41,"end_character":13},"updated":"2017-03-01 08:25:00.000000000","message":"I would expect the validation to be applied at the entrance to the nb db and not in the App. In any case type validation should be applied once","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"580d3335a6a5dfd35523b20224bba12f0234a69e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                in_port\u003dchild_port_segmentation.parent.ofport,"},{"line_number":36,"context_line":"                vlan_vid\u003dchild_port_segmentation.segmentation_id"},{"line_number":37,"context_line":"            )"},{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            raise exceptions.UnsupportedSegmentationType("},{"line_number":40,"context_line":"                segmentation_type\u003dsegmentation_type"},{"line_number":41,"context_line":"            )"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _get_classification_actions(self, child_port_segmentation):"},{"line_number":44,"context_line":"        segmentation_type \u003d child_port_segmentation.segmentation_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_6521824d","line":41,"range":{"start_line":38,"start_character":1,"end_line":41,"end_character":13},"in_reply_to":"ba2be162_de65c1e1","updated":"2017-03-19 12:50:05.000000000","message":"The enum field already validates it holds an acceptable value. I don\u0027t think we need to restrict it further.\n\nBut maybe we can check if the type is supported in _child_port_segmentation_created et al.","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0781d703eca45637c8b4a4d8c3912d221a595d57","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                in_port\u003dchild_port_segmentation.parent.ofport,"},{"line_number":36,"context_line":"                vlan_vid\u003dchild_port_segmentation.segmentation_id"},{"line_number":37,"context_line":"            )"},{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            raise exceptions.UnsupportedSegmentationType("},{"line_number":40,"context_line":"                segmentation_type\u003dsegmentation_type"},{"line_number":41,"context_line":"            )"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _get_classification_actions(self, child_port_segmentation):"},{"line_number":44,"context_line":"        segmentation_type \u003d child_port_segmentation.segmentation_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_cdedf6f0","line":41,"range":{"start_line":38,"start_character":1,"end_line":41,"end_character":13},"in_reply_to":"ba2be162_de65c1e1","updated":"2017-03-01 20:59:11.000000000","message":"Will move validation to model code","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8939417fa6713dfb0a78961e0c8e7a23c34377fd","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            actions\u003dactions,"},{"line_number":86,"context_line":"        )"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_dispatch_match(self, child_port_segmentation):"},{"line_number":89,"context_line":"        lport \u003d child_port_segmentation.port"},{"line_number":90,"context_line":"        match \u003d self.parser.OFPMatch(reg7\u003dlport.unique_key)"},{"line_number":91,"context_line":"        return match"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _get_dispatch_actions(self, child_port_segmentation):"},{"line_number":94,"context_line":"        segmentation_type \u003d child_port_segmentation.segmentation_type"},{"line_number":95,"context_line":"        if segmentation_type \u003d\u003d \u0027vlan\u0027:"},{"line_number":96,"context_line":"            # TODO(oanson) Not dynamic enough"},{"line_number":97,"context_line":"            vlan_tag \u003d child_port_segmentation.segmentation_id"},{"line_number":98,"context_line":"            vlan_tag |\u003d self.ofproto.OFPVID_PRESENT"},{"line_number":99,"context_line":"            actions \u003d [self.parser.OFPActionPushVlan(),"},{"line_number":100,"context_line":"                       self.parser.OFPActionSetField(vlan_vid\u003dvlan_tag)]"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            raise exceptions.UnsupportedSegmentationType("},{"line_number":103,"context_line":"                segmentation_type\u003dsegmentation_type"},{"line_number":104,"context_line":"            )"},{"line_number":105,"context_line":"        ofport \u003d child_port_segmentation.parent.ofport"},{"line_number":106,"context_line":"        actions.append("},{"line_number":107,"context_line":"            self.parser.OFPActionOutput(ofport,"},{"line_number":108,"context_line":"                                        self.ofproto.OFPCML_NO_BUFFER))"},{"line_number":109,"context_line":"        return actions"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @df_base_app.register_event(trunk.ChildPortSegmentation, \u0027deleted\u0027)"},{"line_number":112,"context_line":"    def _child_port_segmentation_deleted(self, child_port_segmentation):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_3ee97d1b","line":109,"range":{"start_line":88,"start_character":1,"end_line":109,"end_character":22},"updated":"2017-03-01 08:25:00.000000000","message":"nit: group _get methods near to _get_classification_xxx methods","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0781d703eca45637c8b4a4d8c3912d221a595d57","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            actions\u003dactions,"},{"line_number":86,"context_line":"        )"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_dispatch_match(self, child_port_segmentation):"},{"line_number":89,"context_line":"        lport \u003d child_port_segmentation.port"},{"line_number":90,"context_line":"        match \u003d self.parser.OFPMatch(reg7\u003dlport.unique_key)"},{"line_number":91,"context_line":"        return match"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _get_dispatch_actions(self, child_port_segmentation):"},{"line_number":94,"context_line":"        segmentation_type \u003d child_port_segmentation.segmentation_type"},{"line_number":95,"context_line":"        if segmentation_type \u003d\u003d \u0027vlan\u0027:"},{"line_number":96,"context_line":"            # TODO(oanson) Not dynamic enough"},{"line_number":97,"context_line":"            vlan_tag \u003d child_port_segmentation.segmentation_id"},{"line_number":98,"context_line":"            vlan_tag |\u003d self.ofproto.OFPVID_PRESENT"},{"line_number":99,"context_line":"            actions \u003d [self.parser.OFPActionPushVlan(),"},{"line_number":100,"context_line":"                       self.parser.OFPActionSetField(vlan_vid\u003dvlan_tag)]"},{"line_number":101,"context_line":"        else:"},{"line_number":102,"context_line":"            raise exceptions.UnsupportedSegmentationType("},{"line_number":103,"context_line":"                segmentation_type\u003dsegmentation_type"},{"line_number":104,"context_line":"            )"},{"line_number":105,"context_line":"        ofport \u003d child_port_segmentation.parent.ofport"},{"line_number":106,"context_line":"        actions.append("},{"line_number":107,"context_line":"            self.parser.OFPActionOutput(ofport,"},{"line_number":108,"context_line":"                                        self.ofproto.OFPCML_NO_BUFFER))"},{"line_number":109,"context_line":"        return actions"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @df_base_app.register_event(trunk.ChildPortSegmentation, \u0027deleted\u0027)"},{"line_number":112,"context_line":"    def _child_port_segmentation_deleted(self, child_port_segmentation):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_adc9a27a","line":109,"range":{"start_line":88,"start_character":1,"end_line":109,"end_character":22},"in_reply_to":"ba2be162_3ee97d1b","updated":"2017-03-01 20:59:11.000000000","message":"I grouped methods that are used by each other together to make reading more fluent. I prefer this ordering, unless you have strong objections.","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8939417fa6713dfb0a78961e0c8e7a23c34377fd","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @df_base_app.register_event(trunk.ChildPortSegmentation, \u0027deleted\u0027)"},{"line_number":112,"context_line":"    def _child_port_segmentation_deleted(self, child_port_segmentation):"},{"line_number":113,"context_line":"        # Classification rule"},{"line_number":114,"context_line":"        self._delete_classification_rule(child_port_segmentation)"},{"line_number":115,"context_line":"        # Dispatch rule"},{"line_number":116,"context_line":"        self._delete_dispatch_rule(child_port_segmentation)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_5ed55141","line":113,"range":{"start_line":113,"start_character":8,"end_line":113,"end_character":29},"updated":"2017-03-01 08:25:00.000000000","message":"not adding any additional details, better to remove","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0781d703eca45637c8b4a4d8c3912d221a595d57","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @df_base_app.register_event(trunk.ChildPortSegmentation, \u0027deleted\u0027)"},{"line_number":112,"context_line":"    def _child_port_segmentation_deleted(self, child_port_segmentation):"},{"line_number":113,"context_line":"        # Classification rule"},{"line_number":114,"context_line":"        self._delete_classification_rule(child_port_segmentation)"},{"line_number":115,"context_line":"        # Dispatch rule"},{"line_number":116,"context_line":"        self._delete_dispatch_rule(child_port_segmentation)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_cdc41661","line":113,"range":{"start_line":113,"start_character":8,"end_line":113,"end_character":29},"in_reply_to":"ba2be162_5ed55141","updated":"2017-03-01 20:59:11.000000000","message":"Will do","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"72c026877f7029808d43adada3bfe68474e0abc2","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        match.set_in_port(self._get_ofport(child_port_segmentation))"},{"line_number":42,"context_line":"        if segmentation_type \u003d\u003d \u0027vlan\u0027:"},{"line_number":43,"context_line":"            match.set_vlan_vid(child_port_segmentation.segmentation_id)"},{"line_number":44,"context_line":"            return match"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _get_classification_actions(self, child_port_segmentation):"},{"line_number":47,"context_line":"        segmentation_type \u003d child_port_segmentation.segmentation_type"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_f915539d","line":44,"updated":"2017-05-22 13:52:21.000000000","message":"Maybe UnsupportedSegmentationType here?","commit_id":"0428e334482a73b241131937678f2a38babeb586"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4c5d58dfaec26c181efd48b585cd3549856fc9c9","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        match.set_in_port(self._get_ofport(child_port_segmentation))"},{"line_number":42,"context_line":"        if segmentation_type \u003d\u003d \u0027vlan\u0027:"},{"line_number":43,"context_line":"            match.set_vlan_vid(child_port_segmentation.segmentation_id)"},{"line_number":44,"context_line":"            return match"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _get_classification_actions(self, child_port_segmentation):"},{"line_number":47,"context_line":"        segmentation_type \u003d child_port_segmentation.segmentation_type"}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_24d5dee5","line":44,"in_reply_to":"ff0f0b1f_f915539d","updated":"2017-05-23 14:42:06.000000000","message":"Will fix","commit_id":"0428e334482a73b241131937678f2a38babeb586"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"72c026877f7029808d43adada3bfe68474e0abc2","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        )"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _get_dispatch_match(self, child_port_segmentation):"},{"line_number":93,"context_line":"        lport \u003d child_port_segmentation.port.get_object()"},{"line_number":94,"context_line":"        if not lport:"},{"line_number":95,"context_line":"            lport \u003d self.nb_api.get(child_port_segmentation.port)"},{"line_number":96,"context_line":"        match \u003d self.parser.OFPMatch(reg7\u003dlport.unique_key)"},{"line_number":97,"context_line":"        return match"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_998537d2","line":95,"range":{"start_line":93,"start_character":2,"end_line":95,"end_character":65},"updated":"2017-05-22 13:52:21.000000000","message":"I think this should be hidden away behind proxy implementation","commit_id":"0428e334482a73b241131937678f2a38babeb586"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4c5d58dfaec26c181efd48b585cd3549856fc9c9","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        )"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _get_dispatch_match(self, child_port_segmentation):"},{"line_number":93,"context_line":"        lport \u003d child_port_segmentation.port.get_object()"},{"line_number":94,"context_line":"        if not lport:"},{"line_number":95,"context_line":"            lport \u003d self.nb_api.get(child_port_segmentation.port)"},{"line_number":96,"context_line":"        match \u003d self.parser.OFPMatch(reg7\u003dlport.unique_key)"},{"line_number":97,"context_line":"        return match"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_84fb8a77","line":95,"range":{"start_line":93,"start_character":2,"end_line":95,"end_character":65},"in_reply_to":"ff0f0b1f_998537d2","updated":"2017-05-23 14:42:06.000000000","message":"Maybe. Although we *know* it will be None at this point. Let me think what to do here.","commit_id":"0428e334482a73b241131937678f2a38babeb586"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"72c026877f7029808d43adada3bfe68474e0abc2","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            )"},{"line_number":113,"context_line":"        ofport \u003d self._get_ofport(child_port_segmentation)"},{"line_number":114,"context_line":"        actions.append("},{"line_number":115,"context_line":"            self.parser.OFPActionOutput(ofport,"},{"line_number":116,"context_line":"                                        self.ofproto.OFPCML_NO_BUFFER))"},{"line_number":117,"context_line":"        return actions"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_f9631341","line":115,"range":{"start_line":115,"start_character":24,"end_line":115,"end_character":39},"updated":"2017-05-22 13:52:21.000000000","message":"Why not set reg7+goto EGRESS_TABLE, we have classification app for dealing with ofports","commit_id":"0428e334482a73b241131937678f2a38babeb586"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"29e59bc6582f29df9f7b80703cd85cf9e28902cd","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            )"},{"line_number":113,"context_line":"        ofport \u003d self._get_ofport(child_port_segmentation)"},{"line_number":114,"context_line":"        actions.append("},{"line_number":115,"context_line":"            self.parser.OFPActionOutput(ofport,"},{"line_number":116,"context_line":"                                        self.ofproto.OFPCML_NO_BUFFER))"},{"line_number":117,"context_line":"        return actions"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"df140735_c5c1fd30","line":115,"range":{"start_line":115,"start_character":24,"end_line":115,"end_character":39},"in_reply_to":"df140735_d390ac98","updated":"2017-05-28 15:31:16.000000000","message":"I changed my mind. Doing it your way is better. But I\u0027m considering to wait with it till bug 1690775 is resolved.","commit_id":"0428e334482a73b241131937678f2a38babeb586"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7e1f3d1bc1c3d80bb131e2a6cdaaf503252f8c77","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            )"},{"line_number":113,"context_line":"        ofport \u003d self._get_ofport(child_port_segmentation)"},{"line_number":114,"context_line":"        actions.append("},{"line_number":115,"context_line":"            self.parser.OFPActionOutput(ofport,"},{"line_number":116,"context_line":"                                        self.ofproto.OFPCML_NO_BUFFER))"},{"line_number":117,"context_line":"        return actions"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_dd454945","line":115,"range":{"start_line":115,"start_character":24,"end_line":115,"end_character":39},"in_reply_to":"ff0f0b1f_042d3afd","updated":"2017-05-26 05:56:31.000000000","message":"I\u0027m not really convinced but I won\u0027t block because of this.","commit_id":"0428e334482a73b241131937678f2a38babeb586"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7643b556674050085fb9956d2e280d4c70fac03c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            )"},{"line_number":113,"context_line":"        ofport \u003d self._get_ofport(child_port_segmentation)"},{"line_number":114,"context_line":"        actions.append("},{"line_number":115,"context_line":"            self.parser.OFPActionOutput(ofport,"},{"line_number":116,"context_line":"                                        self.ofproto.OFPCML_NO_BUFFER))"},{"line_number":117,"context_line":"        return actions"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"df140735_d390ac98","line":115,"range":{"start_line":115,"start_character":24,"end_line":115,"end_character":39},"in_reply_to":"ff0f0b1f_dd454945","updated":"2017-05-28 05:11:10.000000000","message":"The alternative would be to add the vlan tag, change reg7, and resubmit to this table (Or add another table in the way).\n\nBoth solutions have their merits. I\u0027d be happy to hear the opinion of other reviewers.","commit_id":"0428e334482a73b241131937678f2a38babeb586"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4c5d58dfaec26c181efd48b585cd3549856fc9c9","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            )"},{"line_number":113,"context_line":"        ofport \u003d self._get_ofport(child_port_segmentation)"},{"line_number":114,"context_line":"        actions.append("},{"line_number":115,"context_line":"            self.parser.OFPActionOutput(ofport,"},{"line_number":116,"context_line":"                                        self.ofproto.OFPCML_NO_BUFFER))"},{"line_number":117,"context_line":"        return actions"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ff0f0b1f_042d3afd","line":115,"range":{"start_line":115,"start_character":24,"end_line":115,"end_character":39},"in_reply_to":"ff0f0b1f_f9631341","updated":"2017-05-23 14:42:06.000000000","message":"This is installed in INGRESS_DISPATCH_TABLE. goto:EGRESS_TABLE means resubmitting to this table.\n\nThis is suppose to replace the regular dispatch action, because it adds a vlan tag.","commit_id":"0428e334482a73b241131937678f2a38babeb586"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"55d8ca81acb6bb3f9fa8b0375e82c17d97be0df0","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            LOG.info(\"trunk_app:_get_dispatch_actions: Setting vlan_id: %s\","},{"line_number":112,"context_line":"                     hex(vlan_tag))"},{"line_number":113,"context_line":"        else:"},{"line_number":114,"context_line":"            raise exceptions.UnsupportedSegmentationType("},{"line_number":115,"context_line":"                segmentation_type\u003dsegmentation_type"},{"line_number":116,"context_line":"            )"},{"line_number":117,"context_line":"        ofport \u003d self._get_ofport(child_port_segmentation)"},{"line_number":118,"context_line":"        actions.append("},{"line_number":119,"context_line":"            self.parser.OFPActionOutput(ofport,"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_2874ea34","line":116,"range":{"start_line":114,"start_character":0,"end_line":116,"end_character":13},"updated":"2017-05-30 13:08:50.000000000","message":"I think all these exception could be in the beginning of _child_port_segmentation_created(or maybe _child_port_segmentation_deleted as well)\n\nBesides, based on the definition of ChildPortSegmentation, is it possible that code runs into this exception?","commit_id":"58b3a9fe519b79af052b0664fd83ac72df8b18bb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a16d5b7931d0a1cce3fa251484bda14cae2de996","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        else:"},{"line_number":114,"context_line":"            raise exceptions.UnsupportedSegmentationType("},{"line_number":115,"context_line":"                segmentation_type\u003dsegmentation_type"},{"line_number":116,"context_line":"            )"},{"line_number":117,"context_line":"        ofport \u003d self._get_ofport(child_port_segmentation)"},{"line_number":118,"context_line":"        actions.append("},{"line_number":119,"context_line":"            self.parser.OFPActionOutput(ofport,"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_ffce3358","line":116,"in_reply_to":"df140735_2874ea34","updated":"2017-06-06 11:47:58.000000000","message":"tl;dr: I\u0027ll rewrite the two relevant functions to have a better structure.\n\nThe design behind this function structure is that vlan isn\u0027t the only possible segmentation type (mpls seems like an intuitive second type). With that in mind, these functions will have a dissipater like if-else structure. The else block is a fall-through that in theory should never happen, but we still want to be notified (version mismatch, bug in the nb code, etc.). I\u0027ll rewrite these methods to have a more dispatcher-line pattern.","commit_id":"58b3a9fe519b79af052b0664fd83ac72df8b18bb"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0bc8f4beaa18edc1c64937d07858641d1c190cd1","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    self.ofproto.OFPVID_PRESENT)"},{"line_number":117,"context_line":"        actions.extend((self.parser.OFPActionPushVlan(),"},{"line_number":118,"context_line":"                        self.parser.OFPActionSetField(vlan_vid\u003dvlan_tag)))"},{"line_number":119,"context_line":"        LOG.info(\"trunk_app:_get_dispatch_actions: Setting vlan_id: %s\","},{"line_number":120,"context_line":"                 hex(vlan_tag))"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def _get_dispatch_actions(self, child_port_segmentation):"}],"source_content_type":"text/x-python","patch_set":22,"id":"bf091321_ba7a7b21","line":119,"range":{"start_line":119,"start_character":28,"end_line":119,"end_character":49},"updated":"2017-06-09 01:41:15.000000000","message":"Should this be _add_dispatch_actions_vlan?","commit_id":"08557b018c16a0f92aaf3779ee9ccd31d7bc1623"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a230ba8777dbf62f98c7d95331eaa58f8f7a2d52","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    self.ofproto.OFPVID_PRESENT)"},{"line_number":117,"context_line":"        actions.extend((self.parser.OFPActionPushVlan(),"},{"line_number":118,"context_line":"                        self.parser.OFPActionSetField(vlan_vid\u003dvlan_tag)))"},{"line_number":119,"context_line":"        LOG.info(\"trunk_app:_get_dispatch_actions: Setting vlan_id: %s\","},{"line_number":120,"context_line":"                 hex(vlan_tag))"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def _get_dispatch_actions(self, child_port_segmentation):"}],"source_content_type":"text/x-python","patch_set":22,"id":"bf091321_fb0d9537","line":119,"range":{"start_line":119,"start_character":28,"end_line":119,"end_character":49},"in_reply_to":"bf091321_ba7a7b21","updated":"2017-06-09 13:18:40.000000000","message":"Yes it should :)","commit_id":"08557b018c16a0f92aaf3779ee9ccd31d7bc1623"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8a460627e511d80fe68fa545ff8765b17a97c571","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                                        self.ofproto.OFPCML_NO_BUFFER))"},{"line_number":136,"context_line":"        return actions"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    @df_base_app.register_event(trunk.ChildPortSegmentation,"},{"line_number":139,"context_line":"                                model_constants.EVENT_DELETED)"},{"line_number":140,"context_line":"    def _child_port_segmentation_deleted(self, child_port_segmentation):"},{"line_number":141,"context_line":"        self._delete_classification_rule(child_port_segmentation)"},{"line_number":142,"context_line":"        self._delete_dispatch_rule(child_port_segmentation)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _delete_classification_rule(self, child_port_segmentation):"},{"line_number":145,"context_line":"        match \u003d self._get_classification_match(child_port_segmentation)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_fe900398","line":142,"range":{"start_line":138,"start_character":3,"end_line":142,"end_character":59},"updated":"2017-06-11 11:01:27.000000000","message":"Just a suggestion, for better readability, I would suggest to collocate methods serving events close to each other.","commit_id":"5b4a3035261ba38fd52ccb09413138accaacb19d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9cd6e8ed43673b52097af5de095fd4736ac35064","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                                        self.ofproto.OFPCML_NO_BUFFER))"},{"line_number":136,"context_line":"        return actions"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    @df_base_app.register_event(trunk.ChildPortSegmentation,"},{"line_number":139,"context_line":"                                model_constants.EVENT_DELETED)"},{"line_number":140,"context_line":"    def _child_port_segmentation_deleted(self, child_port_segmentation):"},{"line_number":141,"context_line":"        self._delete_classification_rule(child_port_segmentation)"},{"line_number":142,"context_line":"        self._delete_dispatch_rule(child_port_segmentation)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _delete_classification_rule(self, child_port_segmentation):"},{"line_number":145,"context_line":"        match \u003d self._get_classification_match(child_port_segmentation)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_19d99982","line":142,"range":{"start_line":138,"start_character":3,"end_line":142,"end_character":59},"in_reply_to":"7f231b9d_fe900398","updated":"2017-06-11 14:06:51.000000000","message":"I thought this ordering, though less conventional, passes the flow of the application.\n\nWill change if you insist.","commit_id":"5b4a3035261ba38fd52ccb09413138accaacb19d"}],"dragonflow/db/models/trunk.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8939417fa6713dfb0a78961e0c8e7a23c34377fd","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"SUPPORTED_SEGMENTATION_TYPES \u003d (\u0027vlan\u0027, )"},{"line_number":26,"context_line":"UUID_NAMESPACE \u003d uuid.UUID(\u0027a11fee2a-d833-4e22-be31-f915b55f1f77\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@mf.register_model"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_7e41350b","line":26,"range":{"start_line":26,"start_character":27,"end_line":26,"end_character":65},"updated":"2017-03-01 08:25:00.000000000","message":"where this comes from?","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0781d703eca45637c8b4a4d8c3912d221a595d57","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"SUPPORTED_SEGMENTATION_TYPES \u003d (\u0027vlan\u0027, )"},{"line_number":26,"context_line":"UUID_NAMESPACE \u003d uuid.UUID(\u0027a11fee2a-d833-4e22-be31-f915b55f1f77\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@mf.register_model"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_8d913e55","line":26,"range":{"start_line":26,"start_character":27,"end_line":26,"end_character":65},"in_reply_to":"ba2be162_7e41350b","updated":"2017-03-01 20:59:11.000000000","message":"Randomly generated with uuid.uuid4. I only need it to have my own namespace to generate IDs for ChildPortSegmentation objects.","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"55d8ca81acb6bb3f9fa8b0375e82c17d97be0df0","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"SUPPORTED_SEGMENTATION_TYPES \u003d (\u0027vlan\u0027, )"},{"line_number":26,"context_line":"UUID_NAMESPACE \u003d uuid.UUID(\u0027a11fee2a-d833-4e22-be31-f915b55f1f77\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@mf.register_model"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_e8bcb2bc","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":66},"updated":"2017-05-30 13:08:50.000000000","message":"Is it used?","commit_id":"58b3a9fe519b79af052b0664fd83ac72df8b18bb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a16d5b7931d0a1cce3fa251484bda14cae2de996","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"SUPPORTED_SEGMENTATION_TYPES \u003d (\u0027vlan\u0027, )"},{"line_number":26,"context_line":"UUID_NAMESPACE \u003d uuid.UUID(\u0027a11fee2a-d833-4e22-be31-f915b55f1f77\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@mf.register_model"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_df45afb5","line":26,"in_reply_to":"df140735_e8bcb2bc","updated":"2017-06-06 11:47:58.000000000","message":"Yes. In the child segmentation model, the id is auto generated with this uuid as namespace, and it\u0027s fields as values, to get a predictable value for id.","commit_id":"58b3a9fe519b79af052b0664fd83ac72df8b18bb"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0bc8f4beaa18edc1c64937d07858641d1c190cd1","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"SEGMENTATION_TYPE_VLAN \u003d \u0027vlan\u0027"},{"line_number":26,"context_line":"SUPPORTED_SEGMENTATION_TYPES \u003d (SEGMENTATION_TYPE_VLAN, )"},{"line_number":27,"context_line":"UUID_NAMESPACE \u003d uuid.UUID(\u0027a11fee2a-d833-4e22-be31-f915b55f1f77\u0027)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"bf091321_1ab287e7","line":26,"range":{"start_line":26,"start_character":32,"end_line":26,"end_character":54},"updated":"2017-06-09 01:41:15.000000000","message":"Maybe use neutron-lib.constants.TYPE_VLAN ?","commit_id":"08557b018c16a0f92aaf3779ee9ccd31d7bc1623"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"51f6db0d28b0161a87c4832d57ab216ad2e58680","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"SEGMENTATION_TYPE_VLAN \u003d \u0027vlan\u0027"},{"line_number":26,"context_line":"SUPPORTED_SEGMENTATION_TYPES \u003d (SEGMENTATION_TYPE_VLAN, )"},{"line_number":27,"context_line":"UUID_NAMESPACE \u003d uuid.UUID(\u0027a11fee2a-d833-4e22-be31-f915b55f1f77\u0027)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"bf091321_d5dce075","line":26,"range":{"start_line":26,"start_character":32,"end_line":26,"end_character":54},"in_reply_to":"bf091321_1ab287e7","updated":"2017-06-09 02:27:19.000000000","message":"+1 use neutron-lib as much as possible","commit_id":"08557b018c16a0f92aaf3779ee9ccd31d7bc1623"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a230ba8777dbf62f98c7d95331eaa58f8f7a2d52","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"SEGMENTATION_TYPE_VLAN \u003d \u0027vlan\u0027"},{"line_number":26,"context_line":"SUPPORTED_SEGMENTATION_TYPES \u003d (SEGMENTATION_TYPE_VLAN, )"},{"line_number":27,"context_line":"UUID_NAMESPACE \u003d uuid.UUID(\u0027a11fee2a-d833-4e22-be31-f915b55f1f77\u0027)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"bf091321_9b1c596b","line":26,"range":{"start_line":26,"start_character":32,"end_line":26,"end_character":54},"in_reply_to":"bf091321_d5dce075","updated":"2017-06-09 13:18:40.000000000","message":"Done","commit_id":"08557b018c16a0f92aaf3779ee9ccd31d7bc1623"}],"dragonflow/neutron/services/trunk/driver.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a1c4f3cf0542c6bf37e0021afa10f46d22afc995","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron.callbacks import events"},{"line_number":18,"context_line":"from neutron.callbacks import registry"},{"line_number":19,"context_line":"from neutron.services.trunk import constants"},{"line_number":20,"context_line":"from neutron.services.trunk.drivers import base"},{"line_number":21,"context_line":"from neutron_lib.api.definitions import portbindings"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f013ff3_1feee821","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":38},"updated":"2017-05-16 12:08:28.000000000","message":"This has to be from neutron_lib","commit_id":"7e56f103f5c94ca041a762e3cf11f87df1047377"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"3a5704ad6ea623596a508553fb085409e72916dc","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            segmentation_id\u003dsubport.segmentation_id,"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":"        self.nb_api.create(model)"},{"line_number":115,"context_line":"        child \u003d self.nb_api.get(l2.LogicalPort(id\u003dsubport.port_id))"},{"line_number":116,"context_line":"        child.chassis \u003d df_parent.chassis"},{"line_number":117,"context_line":"        self.nb_api.update(child)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _delete_subports_handler(self, *args, **kwargs):"},{"line_number":120,"context_line":"        \"\"\"Handle the event that subports were deleted\"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_247fad66","line":117,"range":{"start_line":115,"start_character":8,"end_line":117,"end_character":33},"updated":"2017-06-06 14:04:59.000000000","message":"You don\u0027t need to .get() explicitly here:\n\n self.nb_api.update(\n     l2.LogicalPort(\n         id\u003dsubport.port_id,\n         chassis\u003ddf_parent.chassis,\n     ),\n )","commit_id":"d6d1f939854b40dc9fb8552843a0ae30f782f2bf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6cd36734e134da36ba6c51e003ed6628f328bc77","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            segmentation_id\u003dsubport.segmentation_id,"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":"        self.nb_api.create(model)"},{"line_number":115,"context_line":"        child \u003d self.nb_api.get(l2.LogicalPort(id\u003dsubport.port_id))"},{"line_number":116,"context_line":"        child.chassis \u003d df_parent.chassis"},{"line_number":117,"context_line":"        self.nb_api.update(child)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _delete_subports_handler(self, *args, **kwargs):"},{"line_number":120,"context_line":"        \"\"\"Handle the event that subports were deleted\"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_87a31bb2","line":117,"range":{"start_line":115,"start_character":8,"end_line":117,"end_character":33},"in_reply_to":"df140735_247fad66","updated":"2017-06-06 14:13:58.000000000","message":"Will fix.","commit_id":"d6d1f939854b40dc9fb8552843a0ae30f782f2bf"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"3a5704ad6ea623596a508553fb085409e72916dc","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        )"},{"line_number":145,"context_line":"        self.nb_api.delete(model)"},{"line_number":146,"context_line":"        child \u003d self.nb_api.get(l2.LogicalPort(id\u003dsubport.port_id))"},{"line_number":147,"context_line":"        child.chassis \u003d None"},{"line_number":148,"context_line":"        self.nb_api.update(child)"}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_e494158d","line":147,"range":{"start_line":147,"start_character":14,"end_line":147,"end_character":21},"updated":"2017-06-06 14:04:59.000000000","message":"Same","commit_id":"d6d1f939854b40dc9fb8552843a0ae30f782f2bf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6cd36734e134da36ba6c51e003ed6628f328bc77","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        )"},{"line_number":145,"context_line":"        self.nb_api.delete(model)"},{"line_number":146,"context_line":"        child \u003d self.nb_api.get(l2.LogicalPort(id\u003dsubport.port_id))"},{"line_number":147,"context_line":"        child.chassis \u003d None"},{"line_number":148,"context_line":"        self.nb_api.update(child)"}],"source_content_type":"text/x-python","patch_set":20,"id":"df140735_27ac4f9d","line":147,"range":{"start_line":147,"start_character":14,"end_line":147,"end_character":21},"in_reply_to":"df140735_e494158d","updated":"2017-06-06 14:13:58.000000000","message":"Will fix.","commit_id":"d6d1f939854b40dc9fb8552843a0ae30f782f2bf"}],"dragonflow/neutron/services/trunk/drivers/dragonflow/driver.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8939417fa6713dfb0a78961e0c8e7a23c34377fd","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                           constants.SUBPORTS, events.AFTER_DELETE)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _get_subport_id(self, trunk, subport):"},{"line_number":59,"context_line":"        \"\"\"Generate a repeatable uuid, so we can identify the Dragonflow"},{"line_number":60,"context_line":"        ChildPortSegmentation object"},{"line_number":61,"context_line":"        \"\"\""},{"line_number":62,"context_line":"        base \u003d \"{}/{}\".format(trunk.port_id, subport.port_id)"},{"line_number":63,"context_line":"        return str(uuid.uuid5(trunk_models.UUID_NAMESPACE, base))"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_1e74b933","line":61,"range":{"start_line":59,"start_character":8,"end_line":61,"end_character":11},"updated":"2017-03-01 08:25:00.000000000","message":"Please split the first line and add blank line in between","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0781d703eca45637c8b4a4d8c3912d221a595d57","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                           constants.SUBPORTS, events.AFTER_DELETE)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _get_subport_id(self, trunk, subport):"},{"line_number":59,"context_line":"        \"\"\"Generate a repeatable uuid, so we can identify the Dragonflow"},{"line_number":60,"context_line":"        ChildPortSegmentation object"},{"line_number":61,"context_line":"        \"\"\""},{"line_number":62,"context_line":"        base \u003d \"{}/{}\".format(trunk.port_id, subport.port_id)"},{"line_number":63,"context_line":"        return str(uuid.uuid5(trunk_models.UUID_NAMESPACE, base))"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_4d866614","line":61,"range":{"start_line":59,"start_character":8,"end_line":61,"end_character":11},"in_reply_to":"ba2be162_1e74b933","updated":"2017-03-01 20:59:11.000000000","message":"Will do","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8939417fa6713dfb0a78961e0c8e7a23c34377fd","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self._add_subports(trunk, subports)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _add_subports(self, trunk, subports):"},{"line_number":73,"context_line":"        \"\"\"Create the subports that were created on the Neutron side in the"},{"line_number":74,"context_line":"        Dragonflow NB DB"},{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        for subport in subports:"},{"line_number":77,"context_line":"            self._add_subport(trunk, subport)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_5e947136","line":74,"range":{"start_line":73,"start_character":9,"end_line":74,"end_character":24},"updated":"2017-03-01 08:25:00.000000000","message":"ditto","commit_id":"5f9235a68631063fba818eeed939d172492b94a6"}],"dragonflow/tests/common/app_testing_objects.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0e9bf8484bd15693750841493f11307990b0be69","unresolved":false,"context_lines":[{"line_number":917,"context_line":""},{"line_number":918,"context_line":"    def __call__(self, buf):"},{"line_number":919,"context_line":"        \"\"\"Return false if any filter returns false. Otherwise, return True\"\"\""},{"line_number":920,"context_line":"        return not any((not filter_(buf) for filter_ in self.filters))"},{"line_number":921,"context_line":""},{"line_number":922,"context_line":""},{"line_number":923,"context_line":"class Action(object):"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_650eb1e6","line":920,"range":{"start_line":920,"start_character":8,"end_line":920,"end_character":70},"updated":"2017-05-28 14:36:56.000000000","message":"return all(f(buf) for f in self.filters)","commit_id":"447f2556a2098c8cae17bc65a505b345fb56c451"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"d3c523e3222a8305a643da0c859be5a359ca96da","unresolved":false,"context_lines":[{"line_number":917,"context_line":""},{"line_number":918,"context_line":"    def __call__(self, buf):"},{"line_number":919,"context_line":"        \"\"\"Return false if any filter returns false. Otherwise, return True\"\"\""},{"line_number":920,"context_line":"        return not any((not filter_(buf) for filter_ in self.filters))"},{"line_number":921,"context_line":""},{"line_number":922,"context_line":""},{"line_number":923,"context_line":"class Action(object):"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_05c81553","line":920,"range":{"start_line":920,"start_character":8,"end_line":920,"end_character":70},"in_reply_to":"df140735_650eb1e6","updated":"2017-05-28 15:31:25.000000000","message":"Will do","commit_id":"447f2556a2098c8cae17bc65a505b345fb56c451"}]}
