)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"060f2e948b44245eee7145bba01e8622cdbffa07","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-12-19 09:51:21 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"classifier application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ie80eda71abfee3ccbca9300cab0f8c1cc52bf627"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a6eadb0_7e2025b1","line":8,"updated":"2016-12-20 01:01:49.000000000","message":"pls add the bp link here, and also, add more details in the commit message.","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7a3c09a3_817d811e","updated":"2017-01-15 12:52:38.000000000","message":"The fullstack is broken. Please fix it, or prove it\u0027s not your fault.","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2017-01-12 12:04:08 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"classifier application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ie80eda71abfee3ccbca9300cab0f8c1cc52bf627"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7a3c09a3_2193ed50","line":8,"updated":"2017-01-15 12:52:38.000000000","message":"blueprint and more info still missing.","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"b771b3173c7efa64523ec98e39d28c68096732ee","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     itamaro \u003citamar.ofek@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-01-24 19:14:18 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"classifier application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ie80eda71abfee3ccbca9300cab0f8c1cc52bf627"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a3905b3_1025945b","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":22},"updated":"2017-01-25 02:48:40.000000000","message":"I remember there is a bp for this change, pls add it here.","commit_id":"6bf9328a072cd34f696266788ab50112e5f629b1"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7eab75cb43ff1b1180669de4790a78aada096ec3","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"classifier application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Partially-implements: blueprint calssification_app"},{"line_number":10,"context_line":"patch include unit test for classifier_app"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ie80eda71abfee3ccbca9300cab0f8c1cc52bf627"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3a461143_919cac10","line":9,"updated":"2017-01-29 09:17:05.000000000","message":"this should come after the commit content","commit_id":"b171deab4048e3306693f2a2fdd3d9bd624c875c"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"e126a6e9b4422c98d3eea0260f997d153e2ce0db","unresolved":false,"context_lines":[{"line_number":7,"context_line":"classifier application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"patch include unit test for classifier_app"},{"line_number":10,"context_line":"Partially-implements: blueprint calssification_app"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ie80eda71abfee3ccbca9300cab0f8c1cc52bf627"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3a461143_494a9456","line":10,"range":{"start_line":10,"start_character":32,"end_line":10,"end_character":46},"updated":"2017-01-30 06:02:43.000000000","message":"classification","commit_id":"61d86fbc75f23f5dfaf0650578d96a587e03cae4"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b743a250f0cbe687522c64d3de71a08e90f6706f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"classifier application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"patch include unit test for classifier_app"},{"line_number":10,"context_line":"Partially-implements: blueprint calssification_app"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ie80eda71abfee3ccbca9300cab0f8c1cc52bf627"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"fa31d9ce_8a0080ac","line":9,"range":{"start_line":9,"start_character":19,"end_line":9,"end_character":23},"updated":"2017-02-10 03:47:32.000000000","message":"it\u0027s not only include unit test code but also classifier_app","commit_id":"bd5a093f383a8c64b0685bca6d929c269fd96861"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"8986b279faae2eca3a380e389d53977a946dfdd5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"classifier application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"patch include unit test for classifier_app"},{"line_number":10,"context_line":"Partially-implements: blueprint calssification_app"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ie80eda71abfee3ccbca9300cab0f8c1cc52bf627"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"fa31d9ce_fbd70d21","line":9,"range":{"start_line":9,"start_character":19,"end_line":9,"end_character":23},"in_reply_to":"fa31d9ce_8a0080ac","updated":"2017-02-10 06:17:04.000000000","message":"fixed","commit_id":"bd5a093f383a8c64b0685bca6d929c269fd96861"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b743a250f0cbe687522c64d3de71a08e90f6706f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"classifier application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"patch include unit test for classifier_app"},{"line_number":10,"context_line":"Partially-implements: blueprint calssification_app"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ie80eda71abfee3ccbca9300cab0f8c1cc52bf627"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"fa31d9ce_aa0464c6","line":10,"range":{"start_line":10,"start_character":22,"end_line":10,"end_character":31},"updated":"2017-02-10 03:47:32.000000000","message":"this link doesn\u0027t work, should be classifier-app","commit_id":"bd5a093f383a8c64b0685bca6d929c269fd96861"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"8986b279faae2eca3a380e389d53977a946dfdd5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"classifier application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"patch include unit test for classifier_app"},{"line_number":10,"context_line":"Partially-implements: blueprint calssification_app"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ie80eda71abfee3ccbca9300cab0f8c1cc52bf627"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"fa31d9ce_7bcb1d73","line":10,"range":{"start_line":10,"start_character":22,"end_line":10,"end_character":31},"in_reply_to":"fa31d9ce_aa0464c6","updated":"2017-02-10 06:17:04.000000000","message":"fixed","commit_id":"bd5a093f383a8c64b0685bca6d929c269fd96861"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"a4dc92af41378e9d845e0900599607b0840e6cbf","unresolved":false,"context_lines":[{"line_number":7,"context_line":"classifier application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"patch include  classification app and unit tests"},{"line_number":10,"context_line":"Partially-implements: blueprint calssification-app"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ie80eda71abfee3ccbca9300cab0f8c1cc52bf627"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"fa31d9ce_cfa96a7d","line":10,"range":{"start_line":10,"start_character":32,"end_line":10,"end_character":46},"updated":"2017-02-12 06:24:04.000000000","message":"classification (otherwise link does not work)","commit_id":"f476f93e81baf233c3bf92ccf6b3b993e8a982b6"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"e5ca9393e2813482bc7d552360d154d7313c3dd3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"classifier application"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"patch include  classification app and unit tests"},{"line_number":10,"context_line":"Partially-implements: blueprint calssification-app"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ie80eda71abfee3ccbca9300cab0f8c1cc52bf627"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"fa31d9ce_9278792d","line":10,"range":{"start_line":10,"start_character":32,"end_line":10,"end_character":46},"in_reply_to":"fa31d9ce_cfa96a7d","updated":"2017-02-12 08:20:23.000000000","message":"fixed","commit_id":"f476f93e81baf233c3bf92ccf6b3b993e8a982b6"}],"devstack/plugin.sh":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":16,"context_line":"DEFAULT_TUNNEL_TYPE\u003d\"geneve\""},{"line_number":17,"context_line":"DEFAULT_APPS_LIST\u003d\"l2_app.L2App,l3_proactive_app.L3ProactiveApp,\"\\"},{"line_number":18,"context_line":"\"dhcp_app.DHCPApp,dnat_app.DNATApp,sg_app.SGApp,portsec_app.PortSecApp,\"\\"},{"line_number":19,"context_line":"\"portqos_app.PortQosApp,active_port_detection_app.ActivePortDetectionApp\" \\"},{"line_number":20,"context_line":"\"classifier_app.Classifier\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"if is_service_enabled df-metadata ; then"}],"source_content_type":"text/x-sh","patch_set":3,"id":"7a3c09a3_619df558","line":19,"range":{"start_line":19,"start_character":24,"end_line":19,"end_character":72},"updated":"2017-01-15 12:52:38.000000000","message":"This looks like a rebase error. It is done on line 26. Please remove it from here.","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0c516bfe0deabbb6e9dc49b9713fd75c398d3245","unresolved":false,"context_lines":[{"line_number":16,"context_line":"DEFAULT_TUNNEL_TYPE\u003d\"geneve\""},{"line_number":17,"context_line":"DEFAULT_APPS_LIST\u003d\"l2_app.L2App,l3_proactive_app.L3ProactiveApp,\"\\"},{"line_number":18,"context_line":"\"dhcp_app.DHCPApp,dnat_app.DNATApp,sg_app.SGApp,portsec_app.PortSecApp,\"\\"},{"line_number":19,"context_line":"\"portqos_app.PortQosApp,active_port_detection_app.ActivePortDetectionApp\" \\"},{"line_number":20,"context_line":"\"classifier_app.Classifier\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"if is_service_enabled df-metadata ; then"}],"source_content_type":"text/x-sh","patch_set":4,"id":"7a3c09a3_45425a69","line":19,"range":{"start_line":19,"start_character":24,"end_line":19,"end_character":72},"updated":"2017-01-17 17:45:13.000000000","message":"This has to be removed.","commit_id":"253a2c947628b33c88c3a53a95473e484cf012b4"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4b48f60adfe890b57ae801872f164808db5ac4e6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"DEFAULT_TUNNEL_TYPE\u003d\"geneve\""},{"line_number":17,"context_line":"DEFAULT_APPS_LIST\u003d\"l2_app.L2App,l3_proactive_app.L3ProactiveApp,\"\\"},{"line_number":18,"context_line":"\"dhcp_app.DHCPApp,dnat_app.DNATApp,sg_app.SGApp,portsec_app.PortSecApp,\"\\"},{"line_number":19,"context_line":"\"portqos_app.PortQosApp,active_port_detection_app.ActivePortDetectionApp,\"\\"},{"line_number":20,"context_line":"\"classifier_app.Classifier\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"if is_service_enabled df-metadata ; then"}],"source_content_type":"text/x-sh","patch_set":5,"id":"5a3905b3_a3c15356","line":19,"range":{"start_line":19,"start_character":24,"end_line":19,"end_character":72},"updated":"2017-01-23 04:03:36.000000000","message":"This *still* has to be removed.","commit_id":"3b846d4be67a851aa172ba5aa4866e403b9fb2a4"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"633744d8dea543a2c91612a032dc4bd0e7a91727","unresolved":false,"context_lines":[{"line_number":16,"context_line":"DEFAULT_TUNNEL_TYPE\u003d\"geneve\""},{"line_number":17,"context_line":"DEFAULT_APPS_LIST\u003d\"l2_app.L2App,l3_proactive_app.L3ProactiveApp,\"\\"},{"line_number":18,"context_line":"\"dhcp_app.DHCPApp,dnat_app.DNATApp,sg_app.SGApp,portsec_app.PortSecApp,\"\\"},{"line_number":19,"context_line":"\"portqos_app.PortQosApp,classifier_app.Classifier\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"if is_service_enabled df-metadata ; then"},{"line_number":22,"context_line":"    DEFAULT_APPS_LIST\u003d\"$DEFAULT_APPS_LIST,metadata_service_app.MetadataServiceApp\""}],"source_content_type":"text/x-sh","patch_set":26,"id":"1a430d35_4d1739ed","line":19,"range":{"start_line":19,"start_character":39,"end_line":19,"end_character":49},"updated":"2017-02-06 14:43:04.000000000","message":"I think ClassifierApp is more appropriate to the naming convention.","commit_id":"cdd70b90c660a1635e4558a2c27ac22a7410e810"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"976743d998e35a2c0a04d2a2789188bbf9a11479","unresolved":false,"context_lines":[{"line_number":16,"context_line":"DEFAULT_TUNNEL_TYPE\u003d\"geneve\""},{"line_number":17,"context_line":"DEFAULT_APPS_LIST\u003d\"l2_app.L2App,l3_proactive_app.L3ProactiveApp,\"\\"},{"line_number":18,"context_line":"\"dhcp_app.DHCPApp,dnat_app.DNATApp,sg_app.SGApp,portsec_app.PortSecApp,\"\\"},{"line_number":19,"context_line":"\"portqos_app.PortQosApp,classifier_app.Classifier\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"if is_service_enabled df-metadata ; then"},{"line_number":22,"context_line":"    DEFAULT_APPS_LIST\u003d\"$DEFAULT_APPS_LIST,metadata_service_app.MetadataServiceApp\""}],"source_content_type":"text/x-sh","patch_set":26,"id":"1a430d35_3de644b0","line":19,"range":{"start_line":19,"start_character":39,"end_line":19,"end_character":49},"in_reply_to":"1a430d35_4d1739ed","updated":"2017-02-08 09:18:53.000000000","message":"I also suggest to keep our naming convention.","commit_id":"cdd70b90c660a1635e4558a2c27ac22a7410e810"}],"dragonflow/conf/df_classifier_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0c516bfe0deabbb6e9dc49b9713fd75c398d3245","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"df_classifier_app_opts \u003d []"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def register_opts():"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_d746014e","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":27},"updated":"2017-01-17 17:45:13.000000000","message":"I don\u0027t think this is needed if there are no actual options.","commit_id":"253a2c947628b33c88c3a53a95473e484cf012b4"}],"dragonflow/controller/classifier_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"060f2e948b44245eee7145bba01e8622cdbffa07","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_9e4ee1bf","line":1,"updated":"2016-12-20 01:01:49.000000000","message":"just remove this line","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0917b806ff772eba5fccfe48c4a1ea84e83400","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class Classifier(df_base_app.DFlowApp):"},{"line_number":34,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":35,"context_line":"        super(Classifier, self).__init__(*args, **kwargs)"},{"line_number":36,"context_line":"        cfg.CONF.register_opts(CLASSSIFIER_APP_OPTS, group\u003d\u0027df_classifier_app\u0027)"},{"line_number":37,"context_line":"        self.local_networks \u003d collections.defaultdict(_LocalNetwork)"},{"line_number":38,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":39,"context_line":"        self.cfg \u003d cfg.CONF.df_classifier_app"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_1f5759cb","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":79},"updated":"2016-12-19 08:14:31.000000000","message":"Please move this to dragonflow.conf","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0917b806ff772eba5fccfe48c4a1ea84e83400","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":35,"context_line":"        super(Classifier, self).__init__(*args, **kwargs)"},{"line_number":36,"context_line":"        cfg.CONF.register_opts(CLASSSIFIER_APP_OPTS, group\u003d\u0027df_classifier_app\u0027)"},{"line_number":37,"context_line":"        self.local_networks \u003d collections.defaultdict(_LocalNetwork)"},{"line_number":38,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":39,"context_line":"        self.cfg \u003d cfg.CONF.df_classifier_app"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_9f6b6985","line":37,"range":{"start_line":37,"start_character":54,"end_line":37,"end_character":67},"updated":"2016-12-19 08:14:31.000000000","message":"This class is undefined?","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0917b806ff772eba5fccfe48c4a1ea84e83400","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.cfg \u003d cfg.CONF.df_classifier_app"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @property"},{"line_number":43,"context_line":"    def parser(self):"},{"line_number":44,"context_line":"        return self.get_datapath().ofproto_parser"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @property"},{"line_number":48,"context_line":"    def ofproto(self):"},{"line_number":49,"context_line":"        return self.get_datapath().ofproto"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @property"},{"line_number":53,"context_line":"    def local_ports(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_5ff8f1c4","line":50,"range":{"start_line":42,"start_character":0,"end_line":50,"end_character":0},"updated":"2016-12-19 08:14:31.000000000","message":"I think these can go in the base class","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"060f2e948b44245eee7145bba01e8622cdbffa07","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.cfg \u003d cfg.CONF.df_classifier_app"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @property"},{"line_number":43,"context_line":"    def parser(self):"},{"line_number":44,"context_line":"        return self.get_datapath().ofproto_parser"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @property"},{"line_number":48,"context_line":"    def ofproto(self):"},{"line_number":49,"context_line":"        return self.get_datapath().ofproto"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @property"},{"line_number":53,"context_line":"    def local_ports(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_be49ddb9","line":50,"range":{"start_line":42,"start_character":0,"end_line":50,"end_character":0},"in_reply_to":"1a6eadb0_5ff8f1c4","updated":"2016-12-20 01:01:49.000000000","message":"+1","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"060f2e948b44245eee7145bba01e8622cdbffa07","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        return self.get_datapath().ofproto"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @property"},{"line_number":53,"context_line":"    def local_ports(self):"},{"line_number":54,"context_line":"        return self.get_datapath().local_ports"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def create_match(self,**kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_1e6d7104","line":54,"range":{"start_line":52,"start_character":0,"end_line":54,"end_character":46},"updated":"2016-12-20 01:01:49.000000000","message":"How does this work?","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"c6952d524d50d4e41233d723912a798f152a9b81","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        return self.get_datapath().ofproto"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @property"},{"line_number":53,"context_line":"    def local_ports(self):"},{"line_number":54,"context_line":"        return self.get_datapath().local_ports"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def create_match(self,**kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_4f72be7d","line":54,"range":{"start_line":52,"start_character":0,"end_line":54,"end_character":46},"in_reply_to":"1a6eadb0_1e6d7104","updated":"2016-12-21 13:42:46.000000000","message":"The property() decorator function returns a special descriptor object","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"b3fadc55e0b046975caaea5d642b1d2b383ab5b9","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        return self.get_datapath().ofproto"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @property"},{"line_number":53,"context_line":"    def local_ports(self):"},{"line_number":54,"context_line":"        return self.get_datapath().local_ports"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def create_match(self,**kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da4df55a_13176752","line":54,"range":{"start_line":52,"start_character":0,"end_line":54,"end_character":46},"in_reply_to":"1a6eadb0_4f72be7d","updated":"2016-12-22 01:37:39.000000000","message":"I meant why self.get_datapath() will have local_ports. Do I miss something?","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0917b806ff772eba5fccfe48c4a1ea84e83400","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        match \u003d self.create_match(in_port\u003dlport.get_ofport())"},{"line_number":63,"context_line":"        actions \u003d ["},{"line_number":64,"context_line":"            self.parser.OFPActionSetField(reg6\u003dlport.get_unique_key(),"},{"line_number":65,"context_line":"            self.parser.OFPActionSetField(metadata\u003dlport.get_network_id())"},{"line_number":66,"context_line":"            ]"},{"line_number":67,"context_line":"        action_inst \u003d self.get_parser().OFPInstructionActions("},{"line_number":68,"context_line":"            self.get_ofproto().OFPIT_APPLY_ACTIONS, actions)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_5fa2b19b","line":65,"range":{"start_line":65,"start_character":57,"end_line":65,"end_character":71},"updated":"2016-12-19 08:14:31.000000000","message":"I think here you need the networks unique_key.","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"060f2e948b44245eee7145bba01e8622cdbffa07","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        match \u003d self.create_match(in_port\u003dlport.get_ofport())"},{"line_number":63,"context_line":"        actions \u003d ["},{"line_number":64,"context_line":"            self.parser.OFPActionSetField(reg6\u003dlport.get_unique_key(),"},{"line_number":65,"context_line":"            self.parser.OFPActionSetField(metadata\u003dlport.get_network_id())"},{"line_number":66,"context_line":"            ]"},{"line_number":67,"context_line":"        action_inst \u003d self.get_parser().OFPInstructionActions("},{"line_number":68,"context_line":"            self.get_ofproto().OFPIT_APPLY_ACTIONS, actions)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_1ed1f1cd","line":65,"range":{"start_line":65,"start_character":57,"end_line":65,"end_character":71},"in_reply_to":"1a6eadb0_5fa2b19b","updated":"2016-12-20 01:01:49.000000000","message":"+1, try to use self.db_store.get_unique_key_by_id","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0917b806ff772eba5fccfe48c4a1ea84e83400","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            self.parser.OFPActionSetField(metadata\u003dlport.get_network_id())"},{"line_number":66,"context_line":"            ]"},{"line_number":67,"context_line":"        action_inst \u003d self.get_parser().OFPInstructionActions("},{"line_number":68,"context_line":"            self.get_ofproto().OFPIT_APPLY_ACTIONS, actions)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        goto_inst \u003d self.get_parser().OFPInstructionGotoTable("},{"line_number":71,"context_line":"            const.EGRESS_PORT_SECURITY_TABLE)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_bf1665ef","line":68,"range":{"start_line":68,"start_character":12,"end_line":68,"end_character":30},"updated":"2016-12-19 08:14:31.000000000","message":"typo -\u003e self.ofproto ?","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"060f2e948b44245eee7145bba01e8622cdbffa07","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            match\u003dmatch)"},{"line_number":79,"context_line":"        if self.local_ports:"},{"line_number":80,"context_line":"            LOG.info(_LI(\u0027classifer for network %s ,type already exist\u0027,"},{"line_number":81,"context_line":"                self.get_network(),lport.get_network_type()))"},{"line_number":82,"context_line":"            return"},{"line_number":83,"context_line":"        #only on first port create"},{"line_number":84,"context_line":"        network \u003d self.local_networks.get(lport.get_network_id())"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_5eb0c98b","line":81,"range":{"start_line":81,"start_character":41,"end_line":81,"end_character":57},"updated":"2016-12-20 01:01:49.000000000","message":"network_type is still in the external_dict of lport, right?","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"c6952d524d50d4e41233d723912a798f152a9b81","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            match\u003dmatch)"},{"line_number":79,"context_line":"        if self.local_ports:"},{"line_number":80,"context_line":"            LOG.info(_LI(\u0027classifer for network %s ,type already exist\u0027,"},{"line_number":81,"context_line":"                self.get_network(),lport.get_network_type()))"},{"line_number":82,"context_line":"            return"},{"line_number":83,"context_line":"        #only on first port create"},{"line_number":84,"context_line":"        network \u003d self.local_networks.get(lport.get_network_id())"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_2fe022fa","line":81,"range":{"start_line":81,"start_character":41,"end_line":81,"end_character":57},"in_reply_to":"1a6eadb0_5eb0c98b","updated":"2016-12-21 13:42:46.000000000","message":"yes","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0917b806ff772eba5fccfe48c4a1ea84e83400","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def add_port_by_network_type(self,lport):"},{"line_number":92,"context_line":"        actions \u003d ["},{"line_number":93,"context_line":"            self.parser.OFPActionSetField(lport\u003dself.get_network_id())"},{"line_number":94,"context_line":"            ]"},{"line_number":95,"context_line":"        if lport.get_network_type() \u003d\u003d \u0027vlan\u0027"},{"line_number":96,"context_line":"            match \u003d self.create_match(vlan_vid\u003dget_segmentation_id())"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_5f7b9129","line":93,"range":{"start_line":93,"start_character":42,"end_line":93,"end_character":69},"updated":"2016-12-19 08:14:31.000000000","message":"typo -\u003e metadata\u003dlport.get_network_id() ?","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"060f2e948b44245eee7145bba01e8622cdbffa07","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            self.parser.OFPActionSetField(lport\u003dself.get_network_id())"},{"line_number":94,"context_line":"            ]"},{"line_number":95,"context_line":"        if lport.get_network_type() \u003d\u003d \u0027vlan\u0027"},{"line_number":96,"context_line":"            match \u003d self.create_match(vlan_vid\u003dget_segmentation_id())"},{"line_number":97,"context_line":"            actions.append(self.parser.OFPActionPopVlan())"},{"line_number":98,"context_line":"        elif lport.get_network_type() \u003d\u003d \u0027flat\u0027:"},{"line_number":99,"context_line":"            match \u003d self.create_match(vlan_vid\u003d0)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_be539d38","line":96,"range":{"start_line":96,"start_character":47,"end_line":96,"end_character":66},"updated":"2016-12-20 01:01:49.000000000","message":"The function is undefined?","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0917b806ff772eba5fccfe48c4a1ea84e83400","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        elif lport.get_network_type() \u003d\u003d \u0027flat\u0027:"},{"line_number":99,"context_line":"            match \u003d self.create_match(vlan_vid\u003d0)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.on_first_lport(lport,actions,match)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def on_first_lport(self, lport, actions, match):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_9f760905","line":101,"range":{"start_line":101,"start_character":42,"end_line":101,"end_character":47},"updated":"2016-12-19 08:14:31.000000000","message":"Is it possible that match will be undefined?","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0917b806ff772eba5fccfe48c4a1ea84e83400","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        self.on_first_lport(lport,actions,match)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def on_first_lport(self, lport, actions, match):"},{"line_number":105,"context_line":"        action_inst \u003d self.parser.OFPInstructionActions("},{"line_number":106,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_bf2bc593","line":104,"range":{"start_line":104,"start_character":0,"end_line":104,"end_character":52},"updated":"2016-12-19 08:14:31.000000000","message":"Please consider the following revision here:\nCall on_first_lport directly from add_local_port, change add_port_by_network_type to return the match and actions, and then call it to retrieve the match and actions and use them here.\n\nThis way, you may be able to reuse that function in the remove code too.","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0917b806ff772eba5fccfe48c4a1ea84e83400","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.mod_flow("},{"line_number":122,"context_line":"            datapath\u003dself.get_datapath(),"},{"line_number":123,"context_line":"            table_id\u003dconst.INGRESS_CLASSIFICATION_DISPATCH_TABLE,"},{"line_number":124,"context_line":"            command\u003dself.get_ofproto().OFPFC_DELETE,"},{"line_number":125,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":126,"context_line":"            match\u003dmatch)"},{"line_number":127,"context_line":"        #only when there are no ports remove classifier flows"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_df9321ff","line":124,"range":{"start_line":124,"start_character":25,"end_line":124,"end_character":37},"updated":"2016-12-19 08:14:31.000000000","message":"typo -\u003e self.ofproto ?","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0917b806ff772eba5fccfe48c4a1ea84e83400","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        if lport.get_network_type() in [\u0027vlan\u0027, \u0027flat\u0027]:"},{"line_number":133,"context_line":"            self.del_port_by_network_type(lport)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def del_port_by_network_type(self,lport):"},{"line_number":136,"context_line":"        LOG.info(_LI(\"last port down in network\""},{"line_number":137,"context_line":"                     \"segmentation_id \u003d%s, \""},{"line_number":138,"context_line":"                     \"network_id \u003d%s\") %"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_bfa66551","line":135,"range":{"start_line":135,"start_character":8,"end_line":135,"end_character":33},"updated":"2016-12-19 08:14:31.000000000","message":"I think on_last_lport_down method, as it is now, is redundant. Maybe rename this method to on_last_port_down, and inline that method?","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0917b806ff772eba5fccfe48c4a1ea84e83400","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        elif self.get_network_type(lport) \u003d\u003d \u0027vlan\u0027:"},{"line_number":144,"context_line":"            match \u003d self.create_match(vlan_vid\u003dlport.get_segmentation_id())"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        self.on_last_lport_down(match)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"  def on_last_lport_down(self, match):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_dfba4171","line":146,"range":{"start_line":146,"start_character":32,"end_line":146,"end_character":37},"updated":"2016-12-19 08:14:31.000000000","message":"Can match be undefined?","commit_id":"30e4b592818d6e239a12f95111de233b96d96ca6"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0aad8e388993c07ab8a9db0f948fcef926c45942","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_2e0ebe34","line":1,"updated":"2016-12-22 01:38:31.000000000","message":"This extra line still exists.","commit_id":"1ef5be6e46aac42eff782f49d005077abc4a11f8"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0aad8e388993c07ab8a9db0f948fcef926c45942","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":35,"context_line":"        super(Classifier, self).__init__(*args, **kwargs)"},{"line_number":36,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":37,"context_line":"        #self.cfg \u003d cfg.CONF.df_classifier_app"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def create_match(self,**kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_4e13025d","line":37,"range":{"start_line":37,"start_character":0,"end_line":37,"end_character":46},"updated":"2016-12-22 01:38:31.000000000","message":"This could just be removed.","commit_id":"1ef5be6e46aac42eff782f49d005077abc4a11f8"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0aad8e388993c07ab8a9db0f948fcef926c45942","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            match\u003dmatch)"},{"line_number":62,"context_line":"        if self.local_ports:"},{"line_number":63,"context_line":"            LOG.info(_LI(\u0027classifer for network %s ,type already exist\u0027,"},{"line_number":64,"context_line":"                self.get_network(),lport.get_network_type()))"},{"line_number":65,"context_line":"            return"},{"line_number":66,"context_line":"        #only on first port create"},{"line_number":67,"context_line":"        network \u003d self.local_networks.get(lport.get_network_id())"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_0ea57a03","line":64,"range":{"start_line":64,"start_character":41,"end_line":64,"end_character":57},"updated":"2016-12-22 01:38:31.000000000","message":"This patch has not been accepted, so you might not use this method this way.\n\nhttps://review.openstack.org/#/c/410772/","commit_id":"1ef5be6e46aac42eff782f49d005077abc4a11f8"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"3da6af457f6a0e8bc946d0a7ed2142a50b16d793","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        network \u003d self.local_networks.get(lport.get_network_id())"},{"line_number":68,"context_line":"        if network and network.local_ports:"},{"line_number":69,"context_line":"            return"},{"line_number":70,"context_line":"        if lport.get_network_type() in [\u0027vlan\u0027, \u0027flat\u0027]:"},{"line_number":71,"context_line":"            match,actions \u003d self.match_port_by_network_type(lport)"},{"line_number":72,"context_line":"            self.on_first_lport(lport, actions, match)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_72725b7e","line":70,"range":{"start_line":70,"start_character":39,"end_line":70,"end_character":55},"updated":"2016-12-22 11:24:25.000000000","message":"If the list is static, its better to use a tuple:\n\n in (\u0027vlan\u0027, \u0027flat\u0027)","commit_id":"1ef5be6e46aac42eff782f49d005077abc4a11f8"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"3da6af457f6a0e8bc946d0a7ed2142a50b16d793","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":111,"context_line":"            match\u003dmatch)"},{"line_number":112,"context_line":"        #only when there are no ports remove classifier flows"},{"line_number":113,"context_line":"        network \u003d self.local_networks.get(lport.get_network_id())"},{"line_number":114,"context_line":"        if network and network.local_ports:"},{"line_number":115,"context_line":"            return"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_72ca5b51","line":113,"range":{"start_line":113,"start_character":23,"end_line":113,"end_character":37},"updated":"2016-12-22 11:24:25.000000000","message":"local_networks is part of l2_ml2 app","commit_id":"1ef5be6e46aac42eff782f49d005077abc4a11f8"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7a3c09a3_dc73f213","updated":"2017-01-15 12:52:38.000000000","message":"This app randomly uses the new properties (self.datapath, self.parser, self.ofproto), and randomly uses self.get_datapath(), self.get_datapath().parser, etc..\n\nPlease be consistent across this (new) app.\n\nPlease add docstring to all methods. (Especially the private ones)","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_81a4a1a6","line":1,"updated":"2017-01-15 12:52:38.000000000","message":"Line was not removed.","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from common.logical_networks import LogicalNetworks"},{"line_number":18,"context_line":"from dragonflow._i18n import _LI"},{"line_number":19,"context_line":"from dragonflow import conf as cfg"},{"line_number":20,"context_line":"from dragonflow.controller.common import constants as const"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_a19fdd4e","line":17,"range":{"start_line":17,"start_character":36,"end_line":17,"end_character":51},"updated":"2017-01-15 12:52:38.000000000","message":"Please import modules, not classes.\nPlease don\u0027t use relative paths (dragonflow.common.logical_networks, not just common.logical_networks.)","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from oslo_log import log"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"NETWORK_TYPES \u003d (\u0027vlan\u0027, \u0027flat\u0027)"},{"line_number":26,"context_line":"VLAN_TYPE \u003d 0"},{"line_number":27,"context_line":"FLAT_TYPE \u003d 1"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_c1c5c93c","line":27,"range":{"start_line":25,"start_character":0,"end_line":27,"end_character":13},"updated":"2017-01-15 12:52:38.000000000","message":"I think this might be clearer as:\nVLAN_TYPE \u003d \u0027vlan\u0027\nFLAT_TYPE \u003d \u0027flat\u0027\nNETWORK_TYPES \u003d (VLAN_TYPE, FLAT_TYPE)","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            match\u003dmatch)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":59,"context_line":"        print \"itamar network type \u003d %s\" % network_type"},{"line_number":60,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if network_type not in NETWORK_TYPES:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_61eb35b1","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":55},"updated":"2017-01-15 12:52:38.000000000","message":"I think this debug line was forgotten :)","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":59,"context_line":"        print \"itamar network type \u003d %s\" % network_type"},{"line_number":60,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if network_type not in NETWORK_TYPES:"},{"line_number":63,"context_line":"            print \"itamar %s is not supported\" % network_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_81d2e1fe","line":60,"range":{"start_line":60,"start_character":0,"end_line":60,"end_character":65},"updated":"2017-01-15 12:52:38.000000000","message":"You already have this variable (and the info in it).","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if network_type not in NETWORK_TYPES:"},{"line_number":63,"context_line":"            print \"itamar %s is not supported\" % network_type"},{"line_number":64,"context_line":"            return"},{"line_number":65,"context_line":"        if self.logical_networks.get_local_port_count(network_id\u003dnetwork_id,"},{"line_number":66,"context_line":"                network_type\u003dnetwork_type) !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_61b415d1","line":63,"range":{"start_line":63,"start_character":0,"end_line":63,"end_character":61},"updated":"2017-01-15 12:52:38.000000000","message":"Same here","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":70,"context_line":"             \u0027network_type\u0027: network_type})"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            #only on first port create"},{"line_number":73,"context_line":"            match, actions \u003d self.match_port_by_network_type(lport)"},{"line_number":74,"context_line":"            self.on_first_lport(lport, actions, match)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.logical_networks.add_local_port(port_id\u003dlport.get_id(),"},{"line_number":77,"context_line":"                network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_dce1329c","line":74,"range":{"start_line":73,"start_character":0,"end_line":74,"end_character":54},"updated":"2017-01-15 12:52:38.000000000","message":"I think it would make more sense to call match_port_by_network_type from within on_first_lport.","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            #only on first port create"},{"line_number":73,"context_line":"            match, actions \u003d self.match_port_by_network_type(lport)"},{"line_number":74,"context_line":"            self.on_first_lport(lport, actions, match)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.logical_networks.add_local_port(port_id\u003dlport.get_id(),"},{"line_number":77,"context_line":"                network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_1c99fa1f","line":74,"range":{"start_line":74,"start_character":17,"end_line":74,"end_character":31},"updated":"2017-01-15 12:52:38.000000000","message":"Please confirm: Can\u0027t there be network elements on vlan or flat provider network, even if there are no virtual elements in this host for that network?","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                network_id\u003dnetwork_id,"},{"line_number":78,"context_line":"                network_type\u003dnetwork_type)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def match_port_by_network_type(self, lport):"},{"line_number":81,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":82,"context_line":"        segmentation_id \u003d lport.get_external_value(\u0027segmentation_id\u0027)"},{"line_number":83,"context_line":"        actions \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_e1d725eb","line":80,"updated":"2017-01-15 12:52:38.000000000","message":"This function is private. Please rename to _match_port_by_network_type","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        return match, actions"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def on_first_lport(self, lport, actions, match):"},{"line_number":96,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":97,"context_line":"        action_inst \u003d self.parser.OFPInstructionActions("},{"line_number":98,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_dc1cd2c3","line":95,"range":{"start_line":95,"start_character":8,"end_line":95,"end_character":22},"updated":"2017-01-15 12:52:38.000000000","message":"Please make this method private","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            match\u003dmatch)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def remove_local_port(self, lport):"},{"line_number":112,"context_line":"        match \u003d self.parser.OFPMatch(in_port\u003dself.ofport(lport))"},{"line_number":113,"context_line":"        self.mod_flow("},{"line_number":114,"context_line":"            datapath\u003dself.datapath,"},{"line_number":115,"context_line":"            table_id\u003dconst.INGRESS_CLASSIFICATION_DISPATCH_TABLE,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_fc798efd","line":112,"range":{"start_line":112,"start_character":50,"end_line":112,"end_character":56},"updated":"2017-01-15 12:52:38.000000000","message":"Does this function exist in this patchset?","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def remove_local_port(self, lport):"},{"line_number":112,"context_line":"        match \u003d self.parser.OFPMatch(in_port\u003dself.ofport(lport))"},{"line_number":113,"context_line":"        self.mod_flow("},{"line_number":114,"context_line":"            datapath\u003dself.datapath,"},{"line_number":115,"context_line":"            table_id\u003dconst.INGRESS_CLASSIFICATION_DISPATCH_TABLE,"},{"line_number":116,"context_line":"            command\u003dself.get_ofproto().OFPFC_DELETE,"},{"line_number":117,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_3c84f6d2","line":114,"range":{"start_line":114,"start_character":26,"end_line":114,"end_character":34},"updated":"2017-01-15 12:52:38.000000000","message":"Does this property exist in this patchset?","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                    {\u0027network_id\u0027: network_id,"},{"line_number":132,"context_line":"                     \u0027network_type\u0027: network_type})"},{"line_number":133,"context_line":"            return"},{"line_number":134,"context_line":"        #only on first port create"},{"line_number":135,"context_line":"        match, actions \u003d self.match_port_by_network_type(lport)"},{"line_number":136,"context_line":"        self.on_last_lport_down(match)"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_3cd236d3","line":134,"range":{"start_line":134,"start_character":28,"end_line":134,"end_character":34},"updated":"2017-01-15 12:52:38.000000000","message":"create -\u003e remove","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                     \u0027network_type\u0027: network_type})"},{"line_number":133,"context_line":"            return"},{"line_number":134,"context_line":"        #only on first port create"},{"line_number":135,"context_line":"        match, actions \u003d self.match_port_by_network_type(lport)"},{"line_number":136,"context_line":"        self.on_last_lport_down(match)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def on_last_lport_down(self, match):"},{"line_number":139,"context_line":"        self.mod_flow("}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_7cdcbee4","line":136,"range":{"start_line":135,"start_character":0,"end_line":136,"end_character":38},"updated":"2017-01-15 12:52:38.000000000","message":"I think it would make more sense to move the call to match_port_by_network_type into on_last_lport_down, and pass lport to the latter method.","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        match, actions \u003d self.match_port_by_network_type(lport)"},{"line_number":136,"context_line":"        self.on_last_lport_down(match)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def on_last_lport_down(self, match):"},{"line_number":139,"context_line":"        self.mod_flow("},{"line_number":140,"context_line":"            datapath\u003dself.get_datapath(),"},{"line_number":141,"context_line":"            table_id\u003dconst.INGRESS_CLASSIFICATION_DISPATCH_TABLE,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_9c696a28","line":138,"range":{"start_line":138,"start_character":8,"end_line":138,"end_character":26},"updated":"2017-01-15 12:52:38.000000000","message":"Same here re: private function","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":144,"context_line":"            match\u003dmatch)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _get_net_type_id(self, network_type):"},{"line_number":147,"context_line":"        return VLAN_TYPE if network_type \u003d\u003d \u0027vlan\u0027 else FLAT_TYPE"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_21ba0dc1","line":146,"updated":"2017-01-15 12:52:38.000000000","message":"Where is this private function used?","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0c516bfe0deabbb6e9dc49b9713fd75c398d3245","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        match \u003d self.parser.OFPMatch(in_port\u003dofport)"},{"line_number":60,"context_line":"        actions \u003d ["},{"line_number":61,"context_line":"            self.parser.OFPActionSetField(reg6\u003dlport.get_unique_key()),"},{"line_number":62,"context_line":"            self.parser.OFPActionSetField(metadata\u003dnetwork_id)]"},{"line_number":63,"context_line":"        action_inst \u003d self.parser.OFPInstructionActions("},{"line_number":64,"context_line":"                self.ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_d749a1b8","line":62,"range":{"start_line":62,"start_character":51,"end_line":62,"end_character":62},"updated":"2017-01-17 17:45:13.000000000","message":"nit: Since network_id is only used here, maybe retrieve it here?","commit_id":"253a2c947628b33c88c3a53a95473e484cf012b4"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0c516bfe0deabbb6e9dc49b9713fd75c398d3245","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            match\u003dmatch)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _del_ingress_classification_flow(self, lport, ofport):"},{"line_number":91,"context_line":"        match \u003d self.parser.OFPMatch(in_port\u003dofport)"},{"line_number":92,"context_line":"        self.mod_flow("},{"line_number":93,"context_line":"            datapath\u003dself.get_datapath(),"},{"line_number":94,"context_line":"            table_id\u003dconst.INGRESS_CLASSIFICATION_DISPATCH_TABLE,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_570f7187","line":91,"range":{"start_line":91,"start_character":44,"end_line":91,"end_character":51},"updated":"2017-01-17 17:45:13.000000000","message":"nit: Since ofport is only used here, maybe just retrieve it here?","commit_id":"253a2c947628b33c88c3a53a95473e484cf012b4"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"b771b3173c7efa64523ec98e39d28c68096732ee","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a3905b3_501f1c09","line":1,"updated":"2017-01-25 02:48:40.000000000","message":"This extra line still exists.","commit_id":"6bf9328a072cd34f696266788ab50112e5f629b1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"b771b3173c7efa64523ec98e39d28c68096732ee","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def add_local_port(self, lport):"},{"line_number":32,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)"},{"line_number":33,"context_line":"        self._make_ingress_classification_flow(lport,"},{"line_number":34,"context_line":"                                               ofport)"},{"line_number":35,"context_line":"        self._make_ingress_dispatch_flow(lport, ofport)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a3905b3_f092c84a","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":51},"updated":"2017-01-25 02:48:40.000000000","message":"You are going to pass lport as parameter anyway, why extract this value here, instead of extract it inside your methods?(just like what you do in remove_local_port)","commit_id":"6bf9328a072cd34f696266788ab50112e5f629b1"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"04967a02a176d465e71aa161c853233e4d24dada","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def add_local_port(self, lport):"},{"line_number":32,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)"},{"line_number":33,"context_line":"        self._make_ingress_classification_flow(lport,"},{"line_number":34,"context_line":"                                               ofport)"},{"line_number":35,"context_line":"        self._make_ingress_dispatch_flow(lport, ofport)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a3905b3_10cf41b4","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":51},"in_reply_to":"5a3905b3_f092c84a","updated":"2017-01-25 12:37:30.000000000","message":"The idea here is to extract this value once, and pass it as a parameter.\nBTW I still consider the alternative of lport accessors, as a viable alternative see https://review.openstack.org/#/c/410772/","commit_id":"6bf9328a072cd34f696266788ab50112e5f629b1"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7eab75cb43ff1b1180669de4790a78aada096ec3","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        self.mod_flow("},{"line_number":81,"context_line":"            datapath\u003dself.get_datapath(),"},{"line_number":82,"context_line":"            table_id\u003dconst.INGRESS_DISPATCH_TABLE,"},{"line_number":83,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":84,"context_line":"            match\u003dmatch)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def _del_ingress_classification_flow(self, lport):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_f43cfec9","line":83,"updated":"2017-01-29 09:17:05.000000000","message":"command delete?","commit_id":"b171deab4048e3306693f2a2fdd3d9bd624c875c"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"824046112ef44977a0e16763589fdca78e708794","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class Classifier(df_base_app.DFlowApp):"},{"line_number":26,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":27,"context_line":"        super(Classifier, self).__init__(*args, **kwargs)"},{"line_number":28,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def add_local_port(self, lport):"},{"line_number":31,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a461143_62069087","line":28,"range":{"start_line":28,"start_character":8,"end_line":28,"end_character":64},"updated":"2017-01-29 15:21:50.000000000","message":"Is this used?","commit_id":"f6c35d173b0c14edf7b5764d609ad06b0d7db562"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"824046112ef44977a0e16763589fdca78e708794","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def add_local_port(self, lport):"},{"line_number":31,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)"},{"line_number":32,"context_line":"        self._make_ingress_classification_flow(lport,"},{"line_number":33,"context_line":"                                               ofport)"},{"line_number":34,"context_line":"        self._make_ingress_dispatch_flow(lport, ofport)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _make_ingress_dispatch_flow(self, lport,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a461143_82e45ce1","line":33,"range":{"start_line":33,"start_character":47,"end_line":33,"end_character":54},"updated":"2017-01-29 15:21:50.000000000","message":"nit: Can be moved to above line","commit_id":"f6c35d173b0c14edf7b5764d609ad06b0d7db562"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"824046112ef44977a0e16763589fdca78e708794","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":50,"context_line":"            match\u003dmatch)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _make_ingress_classification_flow(self,"},{"line_number":53,"context_line":"                                          lport,"},{"line_number":54,"context_line":"                                          ofport):"},{"line_number":55,"context_line":"        match \u003d self.parser.OFPMatch(in_port\u003dofport)"},{"line_number":56,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":57,"context_line":"        actions \u003d ["}],"source_content_type":"text/x-python","patch_set":13,"id":"3a461143_8219bcd9","line":54,"range":{"start_line":52,"start_character":43,"end_line":54,"end_character":50},"updated":"2017-01-29 15:21:50.000000000","message":"nit: Same line","commit_id":"f6c35d173b0c14edf7b5764d609ad06b0d7db562"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"47522c9d31425be710c4e4602557938a136ae649","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Classifier(df_base_app.DFlowApp):"},{"line_number":25,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":26,"context_line":"        super(Classifier, self).__init__(*args, **kwargs)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def add_local_port(self, lport):"},{"line_number":29,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a430d35_e6d3c85d","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":57},"updated":"2017-02-05 12:06:06.000000000","message":"Is it necessary?","commit_id":"a5b71ea1f688a60ab4c310965955606791d73845"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"c2cf69c5128c4d9c3d5cc82569e2121f6aa71dab","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":17,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":18,"context_line":"from oslo_log import log"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ClassifierApp(df_base_app.DFlowApp):"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_c3ec55bd","line":21,"range":{"start_line":18,"start_character":0,"end_line":21,"end_character":29},"updated":"2017-02-09 03:15:50.000000000","message":"It seems that the log is not used in this app.","commit_id":"7c2b7c8132d7c1b1faa481b9850db376f8886e36"},{"author":{"_account_id":14249,"name":"Lionel Zerbib","email":"ariel.zerbib@gmail.com","username":"lionelz"},"change_message_id":"41e5895e85ce7d2b2f38b25891391f0a488ebaea","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":17,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":18,"context_line":"from oslo_log import log"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ClassifierApp(df_base_app.DFlowApp):"}],"source_content_type":"text/x-python","patch_set":27,"id":"1a430d35_0aef4a1e","line":21,"range":{"start_line":18,"start_character":0,"end_line":21,"end_character":29},"in_reply_to":"1a430d35_c3ec55bd","updated":"2017-02-09 06:32:21.000000000","message":"Not so bad to define the logger even it is not yet in used","commit_id":"7c2b7c8132d7c1b1faa481b9850db376f8886e36"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"b743a250f0cbe687522c64d3de71a08e90f6706f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self._make_ingress_classification_flow(lport, ofport)"},{"line_number":33,"context_line":"        self._make_ingress_dispatch_flow(lport, ofport)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def _make_ingress_dispatch_flow(self, lport,"},{"line_number":36,"context_line":"                                    ofport):"},{"line_number":37,"context_line":"        port_key \u003d lport.get_unique_key()"},{"line_number":38,"context_line":"        match \u003d self.parser.OFPMatch(reg7\u003dport_key)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa31d9ce_e5168da6","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":35},"updated":"2017-02-10 03:47:32.000000000","message":"It seems this part is not described in the corresponding spec, right?","commit_id":"bd5a093f383a8c64b0685bca6d929c269fd96861"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"8986b279faae2eca3a380e389d53977a946dfdd5","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self._make_ingress_classification_flow(lport, ofport)"},{"line_number":33,"context_line":"        self._make_ingress_dispatch_flow(lport, ofport)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def _make_ingress_dispatch_flow(self, lport,"},{"line_number":36,"context_line":"                                    ofport):"},{"line_number":37,"context_line":"        port_key \u003d lport.get_unique_key()"},{"line_number":38,"context_line":"        match \u003d self.parser.OFPMatch(reg7\u003dport_key)"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa31d9ce_5b95793e","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":35},"in_reply_to":"fa31d9ce_e5168da6","updated":"2017-02-10 06:17:04.000000000","message":"An updated spec has been posted","commit_id":"bd5a093f383a8c64b0685bca6d929c269fd96861"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"a4dc92af41378e9d845e0900599607b0840e6cbf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":32,"id":"fa31d9ce_4fb49ad0","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2017-02-12 06:24:04.000000000","message":"2017","commit_id":"f476f93e81baf233c3bf92ccf6b3b993e8a982b6"}],"dragonflow/controller/df_base_app.py":[{"author":{"_account_id":14249,"name":"Lionel Zerbib","email":"ariel.zerbib@gmail.com","username":"lionelz"},"change_message_id":"b1274bf1d826d112476af7fdc2795a2d8491620f","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_datapath(self):"},{"line_number":52,"context_line":"        return self.api.datapath"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @property"},{"line_number":55,"context_line":"    def parser(self):"},{"line_number":56,"context_line":"        return self.get_datapath().ofproto_parser"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_68a3559f","line":53,"range":{"start_line":53,"start_character":0,"end_line":53,"end_character":0},"updated":"2016-12-22 06:57:53.000000000","message":"I think it belongs to a different patch.","commit_id":"1ef5be6e46aac42eff782f49d005077abc4a11f8"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"3da6af457f6a0e8bc946d0a7ed2142a50b16d793","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_datapath(self):"},{"line_number":52,"context_line":"        return self.api.datapath"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @property"},{"line_number":55,"context_line":"    def parser(self):"},{"line_number":56,"context_line":"        return self.get_datapath().ofproto_parser"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_d2c5c75b","line":53,"range":{"start_line":53,"start_character":0,"end_line":53,"end_character":0},"in_reply_to":"da4df55a_68a3559f","updated":"2016-12-22 11:24:25.000000000","message":"+1","commit_id":"1ef5be6e46aac42eff782f49d005077abc4a11f8"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7a3c09a3_3c5b1689","updated":"2017-01-15 12:52:38.000000000","message":"These changes would be better in a different patch, since they are not classification-app specific.","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0adcedb03c7973dd6afd4c801555992508465502","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_datapath(self):"},{"line_number":52,"context_line":"        return self.api.datapath"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @property"},{"line_number":55,"context_line":"    def parser(self):"},{"line_number":56,"context_line":"        return self.get_datapath().ofproto_parser"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_1c649a47","line":53,"updated":"2017-01-15 12:52:38.000000000","message":"Maybe add (return, actually (: ) the datapath property as well?","commit_id":"bead622a8435aee85e86da0fffa14e1300b6052a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0c516bfe0deabbb6e9dc49b9713fd75c398d3245","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def get_datapath(self):"},{"line_number":52,"context_line":"        return self.api.datapath"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @property"},{"line_number":55,"context_line":"    def parser(self):"},{"line_number":56,"context_line":"        return self.get_datapath().ofproto_parser"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_57ebf177","line":54,"updated":"2017-01-17 17:45:13.000000000","message":"This should be done in another patch.","commit_id":"253a2c947628b33c88c3a53a95473e484cf012b4"}],"dragonflow/controller/l2_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"b771b3173c7efa64523ec98e39d28c68096732ee","unresolved":false,"context_lines":[{"line_number":467,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":468,"context_line":"            match\u003dmatch)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        # Router MAC\u0027s go to L3 table will be taken care by l3 app"},{"line_number":471,"context_line":"        # REVISIT(xiaohhui): This check might be removed when l3-agent is"},{"line_number":472,"context_line":"        # obsoleted."},{"line_number":473,"context_line":"        if lport.get_device_owner() !\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a3905b3_30b450d0","side":"PARENT","line":470,"range":{"start_line":470,"start_character":0,"end_line":470,"end_character":66},"updated":"2017-01-25 02:48:40.000000000","message":"Why remove this comment?","commit_id":"9bbbc124bbd372fed804413a69240224fa035712"}],"dragonflow/tests/unit/test_app_base.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0c516bfe0deabbb6e9dc49b9713fd75c398d3245","unresolved":false,"context_lines":[{"line_number":82,"context_line":"               \"unique_key\": 14,"},{"line_number":83,"context_line":"               \"lrouter\": \"fake_router_id\","},{"line_number":84,"context_line":"               \"id\": \"fake_router_port1\"}]}"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"fake_lswitch_default_subnets \u003d [{\"dhcp_ip\": \"10.0.0.2\","},{"line_number":87,"context_line":"                 \"name\": \"private-subnet\","},{"line_number":88,"context_line":"                 \"enable_dhcp\": True,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_970b9929","line":85,"updated":"2017-01-17 17:45:13.000000000","message":"Consider making the changes in this file in a parent patch.","commit_id":"253a2c947628b33c88c3a53a95473e484cf012b4"}],"dragonflow/tests/unit/test_classifier_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0c516bfe0deabbb6e9dc49b9713fd75c398d3245","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                id\u003d\u0027fake_flat_switch1\u0027, mtu\u003d1500)"},{"line_number":33,"context_line":"        self.controller.update_lswitch(fake_flat_switch1)"},{"line_number":34,"context_line":"        self.app \u003d self.open_flow_app.dispatcher.apps[0]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_classifier_for_vlan_port(self):"},{"line_number":37,"context_line":"        fake_local_vlan_port \u003d make_fake_local_port(network_type\u003d\u0027vlan\u0027,"},{"line_number":38,"context_line":"                lswitch\u003d\u0027fake_vlan_switch1\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_da8b8866","line":35,"updated":"2017-01-17 17:45:13.000000000","message":"I am missing the test for \u0027regular\u0027 networks (which I think is more relevant than flat or vlans, since they are not treated explicitly in the code.","commit_id":"253a2c947628b33c88c3a53a95473e484cf012b4"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0c516bfe0deabbb6e9dc49b9713fd75c398d3245","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            inst\u003dmock.ANY,"},{"line_number":43,"context_line":"            table_id\u003dconst.INGRESS_DISPATCH_TABLE,"},{"line_number":44,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":45,"context_line":"            match\u003dmock.ANY)"},{"line_number":46,"context_line":"        self.app.mod_flow.reset_mock()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        self.controller.delete_lport(fake_local_vlan_port.get_id())"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_1af0b0fd","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":27},"updated":"2017-01-17 17:45:13.000000000","message":"I think it would be interesting to verify the correct match.","commit_id":"253a2c947628b33c88c3a53a95473e484cf012b4"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0c516bfe0deabbb6e9dc49b9713fd75c398d3245","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            table_id\u003dconst.INGRESS_CLASSIFICATION_DISPATCH_TABLE,"},{"line_number":52,"context_line":"            command\u003dself.datapath.ofproto.OFPFC_DELETE,"},{"line_number":53,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":54,"context_line":"            match\u003dmock.ANY)"},{"line_number":55,"context_line":"        self.app.mod_flow.reset_mock()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def test_classifier_for_flat_port(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_fa5f64e2","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":27},"updated":"2017-01-17 17:45:13.000000000","message":"And here","commit_id":"253a2c947628b33c88c3a53a95473e484cf012b4"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0c516bfe0deabbb6e9dc49b9713fd75c398d3245","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            match\u003dmock.ANY)"},{"line_number":55,"context_line":"        self.app.mod_flow.reset_mock()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def test_classifier_for_flat_port(self):"},{"line_number":58,"context_line":"        fake_local_vlan_port \u003d make_fake_local_port(network_type\u003d\u0027flat\u0027,"},{"line_number":59,"context_line":"                lswitch\u003d\u0027fake_flat_switch1\u0027)"},{"line_number":60,"context_line":"        self.controller.update_lport(fake_local_vlan_port)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_3a3f2c88","line":57,"updated":"2017-01-17 17:45:13.000000000","message":"These two functions are very similar (except the network_type). Maybe merge them?","commit_id":"253a2c947628b33c88c3a53a95473e484cf012b4"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7eab75cb43ff1b1180669de4790a78aada096ec3","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            table_id\u003dconst.INGRESS_DISPATCH_TABLE,"},{"line_number":56,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":57,"context_line":"            match\u003dmatch)"},{"line_number":58,"context_line":"        self.app.mod_flow.reset_mock()"},{"line_number":59,"context_line":"        ofport \u003d fake_local_vlan_port.get_external_value(\u0027ofport\u0027)"},{"line_number":60,"context_line":"        match \u003d self.app.parser.OFPMatch(in_port\u003dofport)"},{"line_number":61,"context_line":"        self.controller.delete_lport(fake_local_vlan_port.get_id())"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_543072e8","line":58,"updated":"2017-01-29 09:17:05.000000000","message":"what about checking the second table?","commit_id":"b171deab4048e3306693f2a2fdd3d9bd624c875c"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"7eab75cb43ff1b1180669de4790a78aada096ec3","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            table_id\u003dconst.INGRESS_CLASSIFICATION_DISPATCH_TABLE,"},{"line_number":65,"context_line":"            command\u003dself.datapath.ofproto.OFPFC_DELETE,"},{"line_number":66,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":67,"context_line":"            match\u003dmatch)"},{"line_number":68,"context_line":"        self.app.mod_flow.reset_mock()"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_744f2e6b","line":67,"updated":"2017-01-29 09:17:05.000000000","message":"ditto","commit_id":"b171deab4048e3306693f2a2fdd3d9bd624c875c"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"47522c9d31425be710c4e4602557938a136ae649","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                topic\u003d\u0027fake_tenant1\u0027, unique_key\u003d2,"},{"line_number":34,"context_line":"                name\u003d\u0027private\u0027)"},{"line_number":35,"context_line":"        self.controller.update_lswitch(fake_vlan_switch1)"},{"line_number":36,"context_line":"        fake_flat_switch1 \u003d make_fake_logic_switch("},{"line_number":37,"context_line":"                subnets\u003dtest_app_base.fake_lswitch_default_subnets,"},{"line_number":38,"context_line":"                network_type\u003d\u0027flat\u0027,"},{"line_number":39,"context_line":"                id\u003d\u0027fake_flat_switch1\u0027, mtu\u003d1500,"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a430d35_a668e088","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":25},"updated":"2017-02-05 12:06:06.000000000","message":"Is this used in the test code?","commit_id":"a5b71ea1f688a60ab4c310965955606791d73845"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"47522c9d31425be710c4e4602557938a136ae649","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                subnets\u003dtest_app_base.fake_lswitch_default_subnets,"},{"line_number":38,"context_line":"                network_type\u003d\u0027flat\u0027,"},{"line_number":39,"context_line":"                id\u003d\u0027fake_flat_switch1\u0027, mtu\u003d1500,"},{"line_number":40,"context_line":"                router_external\u003dFalse, segmentation_id\u003d41,"},{"line_number":41,"context_line":"                topic\u003d\u0027fake_tenant1\u0027, unique_key\u003d3,"},{"line_number":42,"context_line":"                name\u003d\u0027private\u0027)"},{"line_number":43,"context_line":"        self.controller.update_lswitch(fake_flat_switch1)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a430d35_866da49a","line":40,"range":{"start_line":40,"start_character":39,"end_line":40,"end_character":58},"updated":"2017-02-05 12:06:06.000000000","message":"Flat network will not have segmentation_id.","commit_id":"a5b71ea1f688a60ab4c310965955606791d73845"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"a4dc92af41378e9d845e0900599607b0840e6cbf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":32,"id":"fa31d9ce_8fc69247","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2017-02-12 06:24:04.000000000","message":"2017","commit_id":"f476f93e81baf233c3bf92ccf6b3b993e8a982b6"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"e5ca9393e2813482bc7d552360d154d7313c3dd3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":32,"id":"fa31d9ce_d272f148","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"in_reply_to":"fa31d9ce_8fc69247","updated":"2017-02-12 08:20:23.000000000","message":"fixed","commit_id":"f476f93e81baf233c3bf92ccf6b3b993e8a982b6"}]}
