)]}'
{"devstack/plugin.sh":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0fe6a9db9a9d3eee03e384738cf0fc137d83287e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"# Port status notifier"},{"line_number":49,"context_line":"ENABLE_PORT_STATUS_NOTIFIER\u003d${ENABLE_PORT_STATUS_NOTIFIER:-\"False\"}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"ENABLE_DF_SFC\u003d${ENABLE_DF_SFC:-\"False\"}"},{"line_number":52,"context_line":"if [[ $ENABLE_DF_SFC \u003d\u003d \"True\" ]]; then"},{"line_number":53,"context_line":"    NEUTRON_SFC_DRIVERS\u003ddragonflow"},{"line_number":54,"context_line":"    NEUTRON_FLOWCLASSIFIER_DRIVERS\u003ddragonflow"},{"line_number":55,"context_line":"fi"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"ACTION\u003d$1"},{"line_number":58,"context_line":"STAGE\u003d$2"}],"source_content_type":"text/x-sh","patch_set":2,"id":"3a71b18c_ce1172b1","line":55,"range":{"start_line":51,"start_character":0,"end_line":55,"end_character":2},"updated":"2016-12-09 03:46:40.000000000","message":"Is there any guide to help people understand how to install devstack with sfc? For example make changes to the sample local.conf file.","commit_id":"3ab2655b61b73a6a18b24f307115f98e3a4f65c5"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"d722b01ade8aebd5a15a7d7d40e559105b4d5d72","unresolved":false,"context_lines":[{"line_number":17,"context_line":"EXTERNAL_HOST_IP\u003d${EXTERNAL_HOST_IP:-}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DEFAULT_TUNNEL_TYPES\u003d\"vxlan,geneve,gre\""},{"line_number":20,"context_line":"DEFAULT_APPS_LIST\u003d\"l2,l3_proactive,dhcp,dnat,sg,portsec,portqos,classifier,tunneling,provider\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"if is_service_enabled df-metadata ; then"},{"line_number":23,"context_line":"    DEFAULT_APPS_LIST\u003d\"$DEFAULT_APPS_LIST,metadata_service\""}],"source_content_type":"text/x-sh","patch_set":32,"id":"1f1a1f67_e31859d4","line":20,"updated":"2017-07-13 08:49:51.000000000","message":"Is that change related to this commit ?","commit_id":"0956ff2622dd55e23fd45e63d9a6a291c58c4a33"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"a0a60656005887225419089c4c84479eca66ee0b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"EXTERNAL_HOST_IP\u003d${EXTERNAL_HOST_IP:-}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DEFAULT_TUNNEL_TYPES\u003d\"vxlan,geneve,gre\""},{"line_number":20,"context_line":"DEFAULT_APPS_LIST\u003d\"l2,l3_proactive,dhcp,dnat,sg,portsec,portqos,classifier,tunneling,provider\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"if is_service_enabled df-metadata ; then"},{"line_number":23,"context_line":"    DEFAULT_APPS_LIST\u003d\"$DEFAULT_APPS_LIST,metadata_service\""}],"source_content_type":"text/x-sh","patch_set":32,"id":"1f1a1f67_febc5f6a","line":20,"in_reply_to":"1f1a1f67_e31859d4","updated":"2017-07-13 14:02:11.000000000","message":"The changes in this file initialize neutron with dragonflow SFC\u0027s plugins","commit_id":"0956ff2622dd55e23fd45e63d9a6a291c58c4a33"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"90c5a188d4770b92888357a245c52b37b51d9b71","unresolved":false,"context_lines":[{"line_number":17,"context_line":"EXTERNAL_HOST_IP\u003d${EXTERNAL_HOST_IP:-}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DEFAULT_TUNNEL_TYPES\u003d\"vxlan,geneve,gre\""},{"line_number":20,"context_line":"DEFAULT_APPS_LIST\u003d\"l2,l3_proactive,dhcp,dnat,sg,portsec,portqos,classifier,tunneling,provider\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"if is_service_enabled df-metadata ; then"},{"line_number":23,"context_line":"    DEFAULT_APPS_LIST\u003d\"$DEFAULT_APPS_LIST,metadata_service\""}],"source_content_type":"text/x-sh","patch_set":32,"id":"1f1a1f67_2faa99d1","line":20,"in_reply_to":"1f1a1f67_febc5f6a","updated":"2017-07-13 18:41:46.000000000","message":"Yep , by mistake i view the compare against PS in the middle and it\u0027s look-like all the file changed :/ (when compering against-base my comment not relevant) ..","commit_id":"0956ff2622dd55e23fd45e63d9a6a291c58c4a33"}],"dragonflow/neutron/services/flowclassifier/driver.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"22a34d220c08699e84263b3e13e5d81e69175788","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class DfFlowClassifierDriver(_DfFlowClassifierDriverBase):"},{"line_number":29,"context_line":"    def initialize(self):"},{"line_number":30,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create_flow_classifier_precommit(self, context):"},{"line_number":33,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_ff702574","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":53},"updated":"2017-06-28 13:20:11.000000000","message":"Why not use the lazy instantiation pattern used in other neutron drivers?","commit_id":"2bc8fc83513f4e7e3d1e8574b798823ccc4fcbdf"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"5a8f21d80045f6db506561b65bb387523a44eb45","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class DfFlowClassifierDriver(_DfFlowClassifierDriverBase):"},{"line_number":29,"context_line":"    def initialize(self):"},{"line_number":30,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create_flow_classifier_precommit(self, context):"},{"line_number":33,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f1d235d_c8fc7f40","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":53},"in_reply_to":"5f201791_ff702574","updated":"2017-06-29 07:59:15.000000000","message":"Created a mixin for all those in a separate patch, will use here as well.","commit_id":"2bc8fc83513f4e7e3d1e8574b798823ccc4fcbdf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"22a34d220c08699e84263b3e13e5d81e69175788","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def initialize(self):"},{"line_number":30,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create_flow_classifier_precommit(self, context):"},{"line_number":33,"context_line":"        pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def create_flow_classifier_postcommit(self, context):"},{"line_number":36,"context_line":"        fc \u003d context.current"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_5f5839f8","line":33,"range":{"start_line":32,"start_character":0,"end_line":33,"end_character":12},"updated":"2017-06-28 13:20:11.000000000","message":"Why not move up to base class?","commit_id":"2bc8fc83513f4e7e3d1e8574b798823ccc4fcbdf"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"5a8f21d80045f6db506561b65bb387523a44eb45","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def initialize(self):"},{"line_number":30,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create_flow_classifier_precommit(self, context):"},{"line_number":33,"context_line":"        pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def create_flow_classifier_postcommit(self, context):"},{"line_number":36,"context_line":"        fc \u003d context.current"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f1d235d_489e2f08","line":33,"range":{"start_line":32,"start_character":0,"end_line":33,"end_character":12},"in_reply_to":"5f201791_5f5839f8","updated":"2017-06-29 07:59:15.000000000","message":"I just wanted to the old API be separated from the new API, I\u0027ll label it with comments to make it more clear","commit_id":"2bc8fc83513f4e7e3d1e8574b798823ccc4fcbdf"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"00f8122cab26859a832dcc02df85dd566c0ada84","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        fc \u003d context.current"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Only name can be updated (and description which we ignore)"},{"line_number":59,"context_line":"        self.nb_api.update("},{"line_number":60,"context_line":"            sfc.FlowClassifier("},{"line_number":61,"context_line":"                id\u003dfc[\u0027id\u0027],"},{"line_number":62,"context_line":"                topic\u003dfc[\u0027project_id\u0027],"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f1d235d_f302f56e","line":59,"range":{"start_line":59,"start_character":7,"end_line":59,"end_character":26},"updated":"2017-07-05 08:30:55.000000000","message":"maybe worth to check if name is changed, otherwise why send the update?","commit_id":"027dcd7f1ab76396497b4c4fb77721fa1ecd1687"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"eb54bfbe8510950fe2826c6345ed80eda8d5183d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        fc \u003d context.current"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Only name can be updated (and description which we ignore)"},{"line_number":59,"context_line":"        self.nb_api.update("},{"line_number":60,"context_line":"            sfc.FlowClassifier("},{"line_number":61,"context_line":"                id\u003dfc[\u0027id\u0027],"},{"line_number":62,"context_line":"                topic\u003dfc[\u0027project_id\u0027],"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f1d235d_8205a213","line":59,"range":{"start_line":59,"start_character":7,"end_line":59,"end_character":26},"in_reply_to":"3f1d235d_f302f56e","updated":"2017-07-05 11:49:36.000000000","message":"I think this decision should be done in networking-sfc plugin.","commit_id":"027dcd7f1ab76396497b4c4fb77721fa1ecd1687"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"db436d6d66baab4d8f8ae8a53c0b4b60180fde15","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class DfFlowClassifierDriver(base.FlowClassifierDriverBase,"},{"line_number":21,"context_line":"                             mixins.LazyNbApiMixin):"},{"line_number":22,"context_line":"    # The new flow classifier driver API:"},{"line_number":23,"context_line":"    def initialize(self):"},{"line_number":24,"context_line":"        pass"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def create_flow_classifier_precommit(self, context):"},{"line_number":27,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_019a3b6d","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":12},"updated":"2017-07-09 07:10:01.000000000","message":"Why is this needed?","commit_id":"7ac5f0589118b9144e60bb0e1dd073a5c5166bbf"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"152fc9b16f8f49ac47940a352b1e1de00794aac5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class DfFlowClassifierDriver(base.FlowClassifierDriverBase,"},{"line_number":21,"context_line":"                             mixins.LazyNbApiMixin):"},{"line_number":22,"context_line":"    # The new flow classifier driver API:"},{"line_number":23,"context_line":"    def initialize(self):"},{"line_number":24,"context_line":"        pass"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def create_flow_classifier_precommit(self, context):"},{"line_number":27,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_1c9d0066","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":12},"in_reply_to":"3f1d235d_019a3b6d","updated":"2017-07-09 10:27:59.000000000","message":"Called from here:\n\nhttps://github.com/openstack/networking-sfc/blob/master/networking_sfc/services/flowclassifier/driver_manager.py#L83\n\nhttps://github.com/openstack/networking-sfc/blob/master/networking_sfc/services/flowclassifier/plugin.py#L42","commit_id":"7ac5f0589118b9144e60bb0e1dd073a5c5166bbf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"69d907d4408b78e040f002b18612be4f5b0219d8","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class DfFlowClassifierDriver(base.FlowClassifierDriverBase,"},{"line_number":21,"context_line":"                             mixins.LazyNbApiMixin):"},{"line_number":22,"context_line":"    # The new flow classifier driver API:"},{"line_number":23,"context_line":"    def initialize(self):"},{"line_number":24,"context_line":"        pass"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def create_flow_classifier_precommit(self, context):"},{"line_number":27,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_7c175453","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":12},"in_reply_to":"3f1d235d_1c9d0066","updated":"2017-07-09 11:55:40.000000000","message":"Good thing they added it to the abstract class :)","commit_id":"7ac5f0589118b9144e60bb0e1dd073a5c5166bbf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ebefb6e88171447b7cf8fe02817800da970b0372","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                    \u0027Both logical_source_port and logical_destination_port \u0027"},{"line_number":44,"context_line":"                    \u0027cannot be specified\u0027"},{"line_number":45,"context_line":"                ),"},{"line_number":46,"context_line":"            )"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def create_flow_classifier_postcommit(self, context):"},{"line_number":49,"context_line":"        flow_classifier \u003d context.current"}],"source_content_type":"text/x-python","patch_set":33,"id":"1f1a1f67_f50e4739","line":46,"updated":"2017-07-18 06:42:54.000000000","message":"This validation should also be added to the FlowClassifier model.","commit_id":"039f31d48556295e8ef85695f16866c5e23add89"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"4fcc49f32978a6d457308407f1a1889b74de2120","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                    \u0027Both logical_source_port and logical_destination_port \u0027"},{"line_number":44,"context_line":"                    \u0027cannot be specified\u0027"},{"line_number":45,"context_line":"                ),"},{"line_number":46,"context_line":"            )"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def create_flow_classifier_postcommit(self, context):"},{"line_number":49,"context_line":"        flow_classifier \u003d context.current"}],"source_content_type":"text/x-python","patch_set":33,"id":"1f1a1f67_f371ba45","line":46,"in_reply_to":"1f1a1f67_dc15b39d","updated":"2017-07-18 10:07:40.000000000","message":"Actually, why not this one.","commit_id":"039f31d48556295e8ef85695f16866c5e23add89"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"9e550b51e8db42294623a63238916ab3dfb872f1","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                    \u0027Both logical_source_port and logical_destination_port \u0027"},{"line_number":44,"context_line":"                    \u0027cannot be specified\u0027"},{"line_number":45,"context_line":"                ),"},{"line_number":46,"context_line":"            )"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def create_flow_classifier_postcommit(self, context):"},{"line_number":49,"context_line":"        flow_classifier \u003d context.current"}],"source_content_type":"text/x-python","patch_set":33,"id":"1f1a1f67_dc15b39d","line":46,"in_reply_to":"1f1a1f67_f50e4739","updated":"2017-07-18 10:06:17.000000000","message":"I\u0027ll add it in a subsequent patch","commit_id":"039f31d48556295e8ef85695f16866c5e23add89"}],"dragonflow/neutron/services/flowclassifier/drivers/dragonflow/__init__.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"24c6e6e18fe934891e9c3d39c8090e36fe4c9ce9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"ff0f0b1f_0f1bc7c9","line":1,"updated":"2017-05-24 13:24:02.000000000","message":"It already be inside the dragonflow project, does it need to be in another dragonflow folder. I mean, two dragonflow in the file path looks a bit weird to me :)","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"e29b3a3f7b26501bff3eb66031422aadf8d84dd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"df140735_56b20a96","line":1,"in_reply_to":"ff0f0b1f_0f1bc7c9","updated":"2017-05-31 07:31:05.000000000","message":"Agree, will move up","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"}],"dragonflow/neutron/services/flowclassifier/drivers/dragonflow/driver.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3ef631ab5cc6d934eaaae55ed327bcc5fb2dd5fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"ffe62b97_9e2bfce9","updated":"2017-03-27 08:55:05.000000000","message":"As was suggested in VLAN aware VMs, I suggest to put this file here: dragonflow/neutron/services/flowclassifier/driver.py","commit_id":"21fa28a28f24f5f029c4ad40fc65427540e1e4e1"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3ef631ab5cc6d934eaaae55ed327bcc5fb2dd5fa","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from dragonflow.db.models import sfc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class _DfFlowClassifierDriverBase(base.FlowClassifierDriverBase):"},{"line_number":21,"context_line":"    def create_flow_classifier(self, context):"},{"line_number":22,"context_line":"        pass"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ffe62b97_5e0e948d","line":20,"updated":"2017-03-27 08:55:05.000000000","message":"Then maybe add a comment to explain what\u0027s going on?","commit_id":"21fa28a28f24f5f029c4ad40fc65427540e1e4e1"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"24c6e6e18fe934891e9c3d39c8090e36fe4c9ce9","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from dragonflow.db.models import sfc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class _DfFlowClassifierDriverBase(base.FlowClassifierDriverBase):"},{"line_number":21,"context_line":"    def create_flow_classifier(self, context):"},{"line_number":22,"context_line":"        pass"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def update_flow_classifier(self, context):"},{"line_number":25,"context_line":"        pass"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class DfFlowClassifierDriver(_DfFlowClassifierDriverBase):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_6f8b63c2","line":25,"range":{"start_line":20,"start_character":0,"end_line":25,"end_character":12},"updated":"2017-05-24 13:24:02.000000000","message":"What is this for? It looks like the same as networking_sfc.services.flowclassifier.drivers.base.FlowClassifierDriverBaseLegacy","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"e29b3a3f7b26501bff3eb66031422aadf8d84dd1","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from dragonflow.db.models import sfc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class _DfFlowClassifierDriverBase(base.FlowClassifierDriverBase):"},{"line_number":21,"context_line":"    def create_flow_classifier(self, context):"},{"line_number":22,"context_line":"        pass"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def update_flow_classifier(self, context):"},{"line_number":25,"context_line":"        pass"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class DfFlowClassifierDriver(_DfFlowClassifierDriverBase):"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_6add1e6f","line":25,"range":{"start_line":20,"start_character":0,"end_line":25,"end_character":12},"in_reply_to":"ff0f0b1f_6f8b63c2","updated":"2017-05-31 07:31:05.000000000","message":"See answer on SFC driver module","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f2b53dc58eb1133e51d2bdd36cf49bff6c159077","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class DfFlowClassifierDriver(_DfFlowClassifierDriverBase):"},{"line_number":29,"context_line":"    def initialize(self):"},{"line_number":30,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create_flow_classifier_precommit(self, context):"},{"line_number":33,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_8ae8ce7b","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":53},"updated":"2017-06-12 09:07:34.000000000","message":"nit: This is done lazy + property in other drivers. Why do this differently here?","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f2b53dc58eb1133e51d2bdd36cf49bff6c159077","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def initialize(self):"},{"line_number":30,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create_flow_classifier_precommit(self, context):"},{"line_number":33,"context_line":"        pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def create_flow_classifier_postcommit(self, context):"},{"line_number":36,"context_line":"        fc \u003d context.current"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_6aeb3a77","line":33,"range":{"start_line":32,"start_character":0,"end_line":33,"end_character":12},"updated":"2017-06-12 09:07:34.000000000","message":"Why not add this to _DfFlowClassifierDriverBase?","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"24c6e6e18fe934891e9c3d39c8090e36fe4c9ce9","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                protocol\u003dprotocol,"},{"line_number":49,"context_line":"                source_cidr\u003dfc.get(\u0027source_ip_prefix\u0027),"},{"line_number":50,"context_line":"                dest_cidr\u003dfc.get(\u0027destination_ip_prefix\u0027),"},{"line_number":51,"context_line":"                source_transport_ports\u003dfield_types.PortRange.from_min_max("},{"line_number":52,"context_line":"                    fc.get(\u0027source_port_range_min\u0027),"},{"line_number":53,"context_line":"                    fc.get(\u0027source_port_range_max\u0027),"},{"line_number":54,"context_line":"                ),"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_afe85b7b","line":51,"range":{"start_line":51,"start_character":61,"end_line":51,"end_character":73},"updated":"2017-05-24 13:24:02.000000000","message":"The static method has been used here.","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"}],"dragonflow/neutron/services/sfc/driver.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"22a34d220c08699e84263b3e13e5d81e69175788","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DfSfcDriver(_DfSfcDriverBase):"},{"line_number":56,"context_line":"    def initialize(self):"},{"line_number":57,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def create_port_chain_postcommit(self, context):"},{"line_number":60,"context_line":"        pc \u003d context.current"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_7f0ad5d1","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":53},"updated":"2017-06-28 13:20:11.000000000","message":"Same here re: lazy instantiation","commit_id":"2bc8fc83513f4e7e3d1e8574b798823ccc4fcbdf"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"5a8f21d80045f6db506561b65bb387523a44eb45","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DfSfcDriver(_DfSfcDriverBase):"},{"line_number":56,"context_line":"    def initialize(self):"},{"line_number":57,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def create_port_chain_postcommit(self, context):"},{"line_number":60,"context_line":"        pc \u003d context.current"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f1d235d_037db81b","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":53},"in_reply_to":"5f201791_7f0ad5d1","updated":"2017-06-29 07:59:15.000000000","message":"Done","commit_id":"2bc8fc83513f4e7e3d1e8574b798823ccc4fcbdf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"22a34d220c08699e84263b3e13e5d81e69175788","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":66,"context_line":"                topic\u003dpc[\u0027project_id\u0027],"},{"line_number":67,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":68,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":69,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"},{"line_number":70,"context_line":"                protocol\u003dpc_params.get(\u0027correlation\u0027),"},{"line_number":71,"context_line":"                chain_id\u003dpc.get(\u0027chain_id\u0027),"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f201791_df00c9ad","line":68,"range":{"start_line":68,"start_character":33,"end_line":68,"end_character":37},"updated":"2017-06-28 13:20:11.000000000","message":"Why is this needed?","commit_id":"2bc8fc83513f4e7e3d1e8574b798823ccc4fcbdf"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"5a8f21d80045f6db506561b65bb387523a44eb45","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":66,"context_line":"                topic\u003dpc[\u0027project_id\u0027],"},{"line_number":67,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":68,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":69,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"},{"line_number":70,"context_line":"                protocol\u003dpc_params.get(\u0027correlation\u0027),"},{"line_number":71,"context_line":"                chain_id\u003dpc.get(\u0027chain_id\u0027),"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f1d235d_2388b41d","line":68,"range":{"start_line":68,"start_character":33,"end_line":68,"end_character":37},"in_reply_to":"5f201791_df00c9ad","updated":"2017-06-29 07:59:15.000000000","message":"Not needed, removed","commit_id":"2bc8fc83513f4e7e3d1e8574b798823ccc4fcbdf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"db436d6d66baab4d8f8ae8a53c0b4b60180fde15","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class DfSfcDriver(base.SfcDriverBase, mixins.LazyNbApiMixin):"},{"line_number":36,"context_line":"    def initialize(self):"},{"line_number":37,"context_line":"        pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    # The new SFC driver API:"},{"line_number":40,"context_line":"    def create_port_chain_postcommit(self, context):"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_e1885f23","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":12},"updated":"2017-07-09 07:10:01.000000000","message":"Why is this needed?","commit_id":"7ac5f0589118b9144e60bb0e1dd073a5c5166bbf"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"152fc9b16f8f49ac47940a352b1e1de00794aac5","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class DfSfcDriver(base.SfcDriverBase, mixins.LazyNbApiMixin):"},{"line_number":36,"context_line":"    def initialize(self):"},{"line_number":37,"context_line":"        pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    # The new SFC driver API:"},{"line_number":40,"context_line":"    def create_port_chain_postcommit(self, context):"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_fc992479","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":12},"in_reply_to":"3f1d235d_e1885f23","updated":"2017-07-09 10:27:59.000000000","message":"Same reasons as FC","commit_id":"7ac5f0589118b9144e60bb0e1dd073a5c5166bbf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"db436d6d66baab4d8f8ae8a53c0b4b60180fde15","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":62,"context_line":"                topic\u003dpc[\u0027project_id\u0027],"},{"line_number":63,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":64,"context_line":"                **_get_optional_params("},{"line_number":65,"context_line":"                    pc,"},{"line_number":66,"context_line":"                    \u0027port_pair_groups\u0027,"},{"line_number":67,"context_line":"                    \u0027flow_classifiers\u0027,"},{"line_number":68,"context_line":"                )"},{"line_number":69,"context_line":"            ),"},{"line_number":70,"context_line":"        )"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_a18267ff","line":68,"range":{"start_line":64,"start_character":0,"end_line":68,"end_character":17},"updated":"2017-07-09 07:10:01.000000000","message":"nit: I think this warrants a variable.","commit_id":"7ac5f0589118b9144e60bb0e1dd073a5c5166bbf"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"152fc9b16f8f49ac47940a352b1e1de00794aac5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":62,"context_line":"                topic\u003dpc[\u0027project_id\u0027],"},{"line_number":63,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":64,"context_line":"                **_get_optional_params("},{"line_number":65,"context_line":"                    pc,"},{"line_number":66,"context_line":"                    \u0027port_pair_groups\u0027,"},{"line_number":67,"context_line":"                    \u0027flow_classifiers\u0027,"},{"line_number":68,"context_line":"                )"},{"line_number":69,"context_line":"            ),"},{"line_number":70,"context_line":"        )"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_dc88a823","line":68,"range":{"start_line":64,"start_character":0,"end_line":68,"end_character":17},"in_reply_to":"3f1d235d_a18267ff","updated":"2017-07-09 10:27:59.000000000","message":"Ok","commit_id":"7ac5f0589118b9144e60bb0e1dd073a5c5166bbf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"db436d6d66baab4d8f8ae8a53c0b4b60180fde15","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                id\u003dppg[\u0027id\u0027],"},{"line_number":88,"context_line":"                topic\u003dppg[\u0027project_id\u0027],"},{"line_number":89,"context_line":"                name\u003dppg.get(\u0027name\u0027),"},{"line_number":90,"context_line":"                port_pairs\u003dlist(ppg.get(\u0027port_pairs\u0027, [])),"},{"line_number":91,"context_line":"                # FIXME (dimak) add support for lb_fields, service_type"},{"line_number":92,"context_line":"            ),"},{"line_number":93,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_617c4f20","line":90,"range":{"start_line":90,"start_character":27,"end_line":90,"end_character":31},"updated":"2017-07-09 07:10:01.000000000","message":"Why is this needed?","commit_id":"7ac5f0589118b9144e60bb0e1dd073a5c5166bbf"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"152fc9b16f8f49ac47940a352b1e1de00794aac5","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                id\u003dppg[\u0027id\u0027],"},{"line_number":88,"context_line":"                topic\u003dppg[\u0027project_id\u0027],"},{"line_number":89,"context_line":"                name\u003dppg.get(\u0027name\u0027),"},{"line_number":90,"context_line":"                port_pairs\u003dlist(ppg.get(\u0027port_pairs\u0027, [])),"},{"line_number":91,"context_line":"                # FIXME (dimak) add support for lb_fields, service_type"},{"line_number":92,"context_line":"            ),"},{"line_number":93,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_bc8dec32","line":90,"range":{"start_line":90,"start_character":27,"end_line":90,"end_character":31},"in_reply_to":"3f1d235d_617c4f20","updated":"2017-07-09 10:27:59.000000000","message":"Leftovers","commit_id":"7ac5f0589118b9144e60bb0e1dd073a5c5166bbf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"db436d6d66baab4d8f8ae8a53c0b4b60180fde15","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                id\u003dppg[\u0027id\u0027],"},{"line_number":101,"context_line":"                topic\u003dppg[\u0027project_id\u0027],"},{"line_number":102,"context_line":"                name\u003dppg.get(\u0027name\u0027),"},{"line_number":103,"context_line":"                **_get_optional_params(ppg, \u0027port_pairs\u0027)"},{"line_number":104,"context_line":"            ),"},{"line_number":105,"context_line":"        )"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_4179532d","line":103,"range":{"start_line":103,"start_character":0,"end_line":103,"end_character":57},"updated":"2017-07-09 07:10:01.000000000","message":"Same here re: variable.","commit_id":"7ac5f0589118b9144e60bb0e1dd073a5c5166bbf"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ed195a0ee5bc877316fe0a14a67bd1938637a4f6","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                ingress_port\u003dport_pair[\u0027ingress\u0027],"},{"line_number":128,"context_line":"                egress_port\u003dport_pair[\u0027egress\u0027],"},{"line_number":129,"context_line":"                correlation_mechanism\u003d("},{"line_number":130,"context_line":"                    sf_params.get(\u0027correlation\u0027) or sfc.CORR_NONE"},{"line_number":131,"context_line":"                ),"},{"line_number":132,"context_line":"                weight\u003dsf_params.get(\u0027weight\u0027)"},{"line_number":133,"context_line":"            ),"}],"source_content_type":"text/x-python","patch_set":33,"id":"1f1a1f67_35571fcd","line":130,"range":{"start_line":130,"start_character":0,"end_line":130,"end_character":65},"updated":"2017-07-18 06:29:33.000000000","message":"I\u0027m guessing the service function parameters object returned by Neutron doesn\u0027t support get with default?","commit_id":"039f31d48556295e8ef85695f16866c5e23add89"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"9e550b51e8db42294623a63238916ab3dfb872f1","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                ingress_port\u003dport_pair[\u0027ingress\u0027],"},{"line_number":128,"context_line":"                egress_port\u003dport_pair[\u0027egress\u0027],"},{"line_number":129,"context_line":"                correlation_mechanism\u003d("},{"line_number":130,"context_line":"                    sf_params.get(\u0027correlation\u0027) or sfc.CORR_NONE"},{"line_number":131,"context_line":"                ),"},{"line_number":132,"context_line":"                weight\u003dsf_params.get(\u0027weight\u0027)"},{"line_number":133,"context_line":"            ),"}],"source_content_type":"text/x-python","patch_set":33,"id":"1f1a1f67_fc498fb6","line":130,"range":{"start_line":130,"start_character":0,"end_line":130,"end_character":65},"in_reply_to":"1f1a1f67_35571fcd","updated":"2017-07-18 10:06:17.000000000","message":"It\u0027s a dictionary, but the key is always present, so providing default is not so helpful. In case correlation is none, the value is None.","commit_id":"039f31d48556295e8ef85695f16866c5e23add89"}],"dragonflow/neutron/services/sfc/drivers/dragonflow/__init__.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f2b53dc58eb1133e51d2bdd36cf49bff6c159077","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"df140735_ea8bcabc","line":1,"updated":"2017-06-12 09:07:34.000000000","message":"Same here re: redundant dragonflow folder","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"}],"dragonflow/neutron/services/sfc/drivers/dragonflow/driver.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3ef631ab5cc6d934eaaae55ed327bcc5fb2dd5fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"ffe62b97_fe9d6857","updated":"2017-03-27 08:55:05.000000000","message":"As was suggested in VLAN aware VMs, I suggest to put this file here: dragonflow/neutron/services/sfc/driver.py","commit_id":"21fa28a28f24f5f029c4ad40fc65427540e1e4e1"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3ef631ab5cc6d934eaaae55ed327bcc5fb2dd5fa","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    return res"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class _DfSfcDriverBase(base.SfcDriverBase):"},{"line_number":36,"context_line":"    def create_port_chain(self, context):"},{"line_number":37,"context_line":"        pass"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ffe62b97_1e56cc5d","line":35,"updated":"2017-03-27 08:55:05.000000000","message":"Maybe add a comment to explain what\u0027s going on?","commit_id":"21fa28a28f24f5f029c4ad40fc65427540e1e4e1"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3ef631ab5cc6d934eaaae55ed327bcc5fb2dd5fa","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":81,"context_line":"                topic\u003dpc[\u0027project_id\u0027],"},{"line_number":82,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":83,"context_line":"                **_get_optional_params("},{"line_number":84,"context_line":"                    pc,"},{"line_number":85,"context_line":"                    \u0027port_pair_groups\u0027,"},{"line_number":86,"context_line":"                    \u0027flow_classifiers\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffe62b97_bea6c052","line":83,"range":{"start_line":83,"start_character":0,"end_line":83,"end_character":39},"updated":"2017-03-27 08:55:05.000000000","message":"nit: I am not comfortable with this \u0027magic\u0027. Can\u0027t you do something like:\nport_pair_groups\u003dpc.get(port_pair_groups, UNSPECIFIED_CONSTANT) ?","commit_id":"21fa28a28f24f5f029c4ad40fc65427540e1e4e1"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3ef631ab5cc6d934eaaae55ed327bcc5fb2dd5fa","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                id\u003dppg[\u0027id\u0027],"},{"line_number":118,"context_line":"                topic\u003dppg[\u0027project_id\u0027],"},{"line_number":119,"context_line":"                name\u003dppg.get(\u0027name\u0027),"},{"line_number":120,"context_line":"                **_get_optional_params(ppg, \u0027port_pairs\u0027)"},{"line_number":121,"context_line":"            ),"},{"line_number":122,"context_line":"        )"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ffe62b97_5e6d7402","line":120,"range":{"start_line":120,"start_character":0,"end_line":120,"end_character":57},"updated":"2017-03-27 08:55:05.000000000","message":"Same here","commit_id":"21fa28a28f24f5f029c4ad40fc65427540e1e4e1"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"9ef11e674cb77accb70c558eb93ffbd5149ab367","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from dragonflow.db.models import sfc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def _get_optional_params(obj, *params):"},{"line_number":20,"context_line":"    \u0027\u0027\u0027This function returns a dictionary with all the parameters from `params`"},{"line_number":21,"context_line":"    that were present in `obj`, for example:"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"7f231b9d_88e57cde","line":19,"updated":"2017-06-19 10:32:15.000000000","message":"maybe move that function to and infrastructure file ?\n(maybe -  dragonflow/common/utils.py  ? )","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"8dbbe11c48b834f9ae80be01b82cd826cbf6225e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from dragonflow.db.models import sfc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def _get_optional_params(obj, *params):"},{"line_number":20,"context_line":"    \u0027\u0027\u0027This function returns a dictionary with all the parameters from `params`"},{"line_number":21,"context_line":"    that were present in `obj`, for example:"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_43273066","line":19,"in_reply_to":"7f231b9d_88e57cde","updated":"2017-06-29 07:55:12.000000000","message":"I would do that if there were more users for this code, but its just this module.\n\nPutting it there makes reading this module harder IMO, and if we put it in utils and drop its use here, will we remember to delete it?","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"24c6e6e18fe934891e9c3d39c8090e36fe4c9ce9","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    return res"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class _DfSfcDriverBase(base.SfcDriverBase):"},{"line_number":36,"context_line":"    def create_port_chain(self, context):"},{"line_number":37,"context_line":"        pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def update_port_chain(self, context):"},{"line_number":40,"context_line":"        pass"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def create_port_pair_group(self, context):"},{"line_number":43,"context_line":"        pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def update_port_pair_group(self, context):"},{"line_number":46,"context_line":"        pass"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def create_port_pair(self, context):"},{"line_number":49,"context_line":"        pass"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def update_port_pair(self, context):"},{"line_number":52,"context_line":"        pass"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DfSfcDriver(_DfSfcDriverBase):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff0f0b1f_2f7fabab","line":52,"range":{"start_line":35,"start_character":0,"end_line":52,"end_character":12},"updated":"2017-05-24 13:24:02.000000000","message":"This looks like networking_sfc.services.sfc.drivers.base.SfcDriverBaseLegacy to me","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"e29b3a3f7b26501bff3eb66031422aadf8d84dd1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    return res"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class _DfSfcDriverBase(base.SfcDriverBase):"},{"line_number":36,"context_line":"    def create_port_chain(self, context):"},{"line_number":37,"context_line":"        pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def update_port_chain(self, context):"},{"line_number":40,"context_line":"        pass"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def create_port_pair_group(self, context):"},{"line_number":43,"context_line":"        pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def update_port_pair_group(self, context):"},{"line_number":46,"context_line":"        pass"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def create_port_pair(self, context):"},{"line_number":49,"context_line":"        pass"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def update_port_pair(self, context):"},{"line_number":52,"context_line":"        pass"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DfSfcDriver(_DfSfcDriverBase):"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_4a937aa4","line":52,"range":{"start_line":35,"start_character":0,"end_line":52,"end_character":12},"in_reply_to":"ff0f0b1f_2f7fabab","updated":"2017-05-31 07:31:05.000000000","message":"SfcDriverBaseLegacy is the base class of SfcDriverBase, and the methods above are marked as abstract, so they have to be implemented by whoever implements SfcDriverBase.\n\nIn the child class they moved away from update_resource to update_resource_precommit and update_resource_postcommit, so I chose to implement those, but abc still forces us to have stubs for the old methods.\n\nIt looks a bit weird, I\u0027ll put a comment there to explain why those stubs are there.","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f2b53dc58eb1133e51d2bdd36cf49bff6c159077","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DfSfcDriver(_DfSfcDriverBase):"},{"line_number":56,"context_line":"    def initialize(self):"},{"line_number":57,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def create_port_chain_postcommit(self, context):"},{"line_number":60,"context_line":"        pc \u003d context.current"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_4f207f9b","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":53},"updated":"2017-06-12 09:07:34.000000000","message":"Same here re: lazy api_nb.","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"8dbbe11c48b834f9ae80be01b82cd826cbf6225e","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class DfSfcDriver(_DfSfcDriverBase):"},{"line_number":56,"context_line":"    def initialize(self):"},{"line_number":57,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def create_port_chain_postcommit(self, context):"},{"line_number":60,"context_line":"        pc \u003d context.current"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_486cef07","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":53},"in_reply_to":"df140735_4f207f9b","updated":"2017-06-29 07:55:12.000000000","message":"Done","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f2b53dc58eb1133e51d2bdd36cf49bff6c159077","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":66,"context_line":"                topic\u003dpc[\u0027project_id\u0027],"},{"line_number":67,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":68,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":69,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"},{"line_number":70,"context_line":"                protocol\u003dpc_params.get(\u0027correlation\u0027),"},{"line_number":71,"context_line":"                chain_id\u003dpc.get(\u0027chain_id\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"df140735_2f230ba9","line":68,"range":{"start_line":68,"start_character":33,"end_line":68,"end_character":37},"updated":"2017-06-12 09:07:34.000000000","message":"Why is this needed?","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"8dbbe11c48b834f9ae80be01b82cd826cbf6225e","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":66,"context_line":"                topic\u003dpc[\u0027project_id\u0027],"},{"line_number":67,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":68,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":69,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"},{"line_number":70,"context_line":"                protocol\u003dpc_params.get(\u0027correlation\u0027),"},{"line_number":71,"context_line":"                chain_id\u003dpc.get(\u0027chain_id\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_e8729be3","line":68,"range":{"start_line":68,"start_character":33,"end_line":68,"end_character":37},"in_reply_to":"df140735_2f230ba9","updated":"2017-06-29 07:55:12.000000000","message":"Not needed, removing.","commit_id":"75e1e2da99ccb60ca92e8767fd37ebbf2b040adb"}],"dragonflow/neutron/sfc_driver.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0fe6a9db9a9d3eee03e384738cf0fc137d83287e","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class _DfSfcDriverHiddenBase(sfc_driver.SfcDriverBase):"},{"line_number":22,"context_line":"    def create_port_chain(self, context):"},{"line_number":23,"context_line":"        pass"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def update_port_chain(self, context):"},{"line_number":26,"context_line":"        pass"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def create_port_pair_group(self, context):"},{"line_number":29,"context_line":"        pass"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def update_port_pair_group(self, context):"},{"line_number":32,"context_line":"        pass"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def create_port_pair(self, context):"},{"line_number":35,"context_line":"        pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def update_port_pair(self, context):"},{"line_number":38,"context_line":"        pass"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class DfSfcDriver(_DfSfcDriverHiddenBase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_aeed16b9","line":38,"range":{"start_line":22,"start_character":0,"end_line":38,"end_character":12},"updated":"2016-12-09 03:46:40.000000000","message":"I understand you want to use small patches to help people with review. But I think it is a bit too separate. It would be better to combine https://review.openstack.org/#/c/406600/2 with this patch.","commit_id":"3ab2655b61b73a6a18b24f307115f98e3a4f65c5"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"fca8c834a7a61c126313c6a7fdbf66711706f25b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from dragonflow.db import api_nb"},{"line_number":19,"context_line":"from dragonflow.db import models_sfc"},{"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 _DfSfcDriverHiddenBase(sfc_driver.SfcDriverBase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_436f85fb","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":29},"updated":"2017-02-09 03:23:35.000000000","message":"It seems that the log is not used here.","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from dragonflow.db import api_nb"},{"line_number":19,"context_line":"from dragonflow.db import models_sfc"},{"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 _DfSfcDriverHiddenBase(sfc_driver.SfcDriverBase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_4a3b9cd1","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":29},"in_reply_to":"1a430d35_436f85fb","updated":"2017-03-08 13:32:06.000000000","message":"Removing","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"421eb7d59afe9a9e84a4a41df300298043c4e138","unresolved":false,"context_lines":[{"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 _DfSfcDriverHiddenBase(sfc_driver.SfcDriverBase):"},{"line_number":25,"context_line":"    def create_port_chain(self, context):"},{"line_number":26,"context_line":"        pass"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_30ae6b81","line":24,"range":{"start_line":24,"start_character":6,"end_line":24,"end_character":28},"updated":"2017-02-08 09:42:08.000000000","message":"Do you really need \u0027Hidden\u0027 in the name, if you prefix it with \u0027_\u0027?\n\nI also don\u0027t understand where and how this class is used. I see DfSfcDriver extends it, but it neither implements nor calls the methods defined here.","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"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 _DfSfcDriverHiddenBase(sfc_driver.SfcDriverBase):"},{"line_number":25,"context_line":"    def create_port_chain(self, context):"},{"line_number":26,"context_line":"        pass"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_90b6a8da","line":24,"range":{"start_line":24,"start_character":6,"end_line":24,"end_character":28},"in_reply_to":"1a430d35_30ae6b81","updated":"2017-03-08 13:32:06.000000000","message":"I\u0027ll drop the Hidden, and the purpose of this class is to provide implementations of abstract methods that are no longer used by SFC extension.\n\nThings like create_port_chain became:\n * create_port_chain_precommit\n * and create_port_chain_postcommit\n\nYet create_port_chain is still part of the ABC we have to implement in order to extend the driver class. This class just moves (visually) the methods we need, yet implement naively, out of the actual driver class.","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"421eb7d59afe9a9e84a4a41df300298043c4e138","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.api_nb.create("},{"line_number":54,"context_line":"            models_sfc.PortChain("},{"line_number":55,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":56,"context_line":"                topic\u003dpc[\u0027tenant_id\u0027],"},{"line_number":57,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":58,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":59,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_30fcab71","line":56,"range":{"start_line":56,"start_character":26,"end_line":56,"end_character":35},"updated":"2017-02-08 09:42:08.000000000","message":"Weren\u0027t these changed to project_id?","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.api_nb.create("},{"line_number":54,"context_line":"            models_sfc.PortChain("},{"line_number":55,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":56,"context_line":"                topic\u003dpc[\u0027tenant_id\u0027],"},{"line_number":57,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":58,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":59,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_50dc3012","line":56,"range":{"start_line":56,"start_character":26,"end_line":56,"end_character":35},"in_reply_to":"1a430d35_30fcab71","updated":"2017-03-08 13:32:06.000000000","message":"Will change","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"421eb7d59afe9a9e84a4a41df300298043c4e138","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":56,"context_line":"                topic\u003dpc[\u0027tenant_id\u0027],"},{"line_number":57,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":58,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":59,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"},{"line_number":60,"context_line":"                protocol\u003dpc_params.get(\u0027correlation\u0027),"},{"line_number":61,"context_line":"                chain_id\u003dpc.get(\u0027chain_id\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_10324f5f","line":58,"range":{"start_line":58,"start_character":46,"end_line":58,"end_character":62},"updated":"2017-02-08 09:42:08.000000000","message":"What\u0027s the original type of this object? tuple? set?","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":56,"context_line":"                topic\u003dpc[\u0027tenant_id\u0027],"},{"line_number":57,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":58,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":59,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"},{"line_number":60,"context_line":"                protocol\u003dpc_params.get(\u0027correlation\u0027),"},{"line_number":61,"context_line":"                chain_id\u003dpc.get(\u0027chain_id\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_b0072c80","line":58,"range":{"start_line":58,"start_character":46,"end_line":58,"end_character":62},"in_reply_to":"1a430d35_10324f5f","updated":"2017-03-08 13:32:06.000000000","message":"A list of dictionaries","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"421eb7d59afe9a9e84a4a41df300298043c4e138","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                topic\u003dpc[\u0027tenant_id\u0027],"},{"line_number":57,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":58,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":59,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"},{"line_number":60,"context_line":"                protocol\u003dpc_params.get(\u0027correlation\u0027),"},{"line_number":61,"context_line":"                chain_id\u003dpc.get(\u0027chain_id\u0027),"},{"line_number":62,"context_line":"            ),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_5038573d","line":59,"range":{"start_line":59,"start_character":46,"end_line":59,"end_character":62},"updated":"2017-02-08 09:42:08.000000000","message":"Same here","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                topic\u003dpc[\u0027tenant_id\u0027],"},{"line_number":57,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":58,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":59,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"},{"line_number":60,"context_line":"                protocol\u003dpc_params.get(\u0027correlation\u0027),"},{"line_number":61,"context_line":"                chain_id\u003dpc.get(\u0027chain_id\u0027),"},{"line_number":62,"context_line":"            ),"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_d0fe606a","line":59,"range":{"start_line":59,"start_character":46,"end_line":59,"end_character":62},"in_reply_to":"1a430d35_5038573d","updated":"2017-03-08 13:32:06.000000000","message":"Same here","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"421eb7d59afe9a9e84a4a41df300298043c4e138","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":72,"context_line":"                topic\u003dpc[\u0027tenant_id\u0027],"},{"line_number":73,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":74,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":75,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"},{"line_number":76,"context_line":"            ),"},{"line_number":77,"context_line":"        )"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_1067af4d","line":75,"range":{"start_line":74,"start_character":0,"end_line":75,"end_character":70},"updated":"2017-02-08 09:42:08.000000000","message":"If port_pair_groups (or flow_classifiers) is not on pc, then you don\u0027t want to pass it to update. Otherwise, it will override the original value (which should be unchanged) with []. Either pass the NOT_GIVEN constant to pc.get, or construct it so the parameter isn\u0027t passed.\n\nAdditionally, can\u0027t protocl and chain_id be updated?","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                id\u003dpc[\u0027id\u0027],"},{"line_number":72,"context_line":"                topic\u003dpc[\u0027tenant_id\u0027],"},{"line_number":73,"context_line":"                name\u003dpc.get(\u0027name\u0027),"},{"line_number":74,"context_line":"                port_pair_groups\u003dlist(pc.get(\u0027port_pair_groups\u0027, [])),"},{"line_number":75,"context_line":"                flow_classifiers\u003dlist(pc.get(\u0027flow_classifiers\u0027, [])),"},{"line_number":76,"context_line":"            ),"},{"line_number":77,"context_line":"        )"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_36697426","line":75,"range":{"start_line":74,"start_character":0,"end_line":75,"end_character":70},"in_reply_to":"1a430d35_1067af4d","updated":"2017-03-08 13:32:06.000000000","message":"Changed to pass port pair groups and flow classifiers only when specified.\n\nAccording to their docs, chain ID and protocol cannot be updated [1]\n\n[1] - https://docs.openstack.org/developer/networking-sfc/api.html#rest-api-impact","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"421eb7d59afe9a9e84a4a41df300298043c4e138","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                topic\u003dppg[\u0027tenant_id\u0027],"},{"line_number":97,"context_line":"                name\u003dppg.get(\u0027name\u0027),"},{"line_number":98,"context_line":"                port_pairs\u003dlist(ppg.get(\u0027port_pairs\u0027, [])),"},{"line_number":99,"context_line":"                # FIXME lb_fields, service_type"},{"line_number":100,"context_line":"            ),"},{"line_number":101,"context_line":"        )"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_f0c86324","line":99,"range":{"start_line":99,"start_character":0,"end_line":99,"end_character":47},"updated":"2017-02-08 09:42:08.000000000","message":"This comment is not clear.\nAdditionally, please add your name, user, or IRC nick","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                topic\u003dppg[\u0027tenant_id\u0027],"},{"line_number":97,"context_line":"                name\u003dppg.get(\u0027name\u0027),"},{"line_number":98,"context_line":"                port_pairs\u003dlist(ppg.get(\u0027port_pairs\u0027, [])),"},{"line_number":99,"context_line":"                # FIXME lb_fields, service_type"},{"line_number":100,"context_line":"            ),"},{"line_number":101,"context_line":"        )"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_aa3098e9","line":99,"range":{"start_line":99,"start_character":0,"end_line":99,"end_character":47},"in_reply_to":"1a430d35_f0c86324","updated":"2017-03-08 13:32:06.000000000","message":"Done","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"421eb7d59afe9a9e84a4a41df300298043c4e138","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                id\u003dppg[\u0027id\u0027],"},{"line_number":109,"context_line":"                topic\u003dppg[\u0027tenant_id\u0027],"},{"line_number":110,"context_line":"                name\u003dppg.get(\u0027name\u0027),"},{"line_number":111,"context_line":"                port_pair_ids\u003dlist(ppg.get(\u0027port_pairs\u0027, [])),"},{"line_number":112,"context_line":"            ),"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_10f5ef55","line":111,"range":{"start_line":111,"start_character":0,"end_line":111,"end_character":62},"updated":"2017-02-08 09:42:08.000000000","message":"Same here re passing \u0027[]\u0027 as default in update.","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                id\u003dppg[\u0027id\u0027],"},{"line_number":109,"context_line":"                topic\u003dppg[\u0027tenant_id\u0027],"},{"line_number":110,"context_line":"                name\u003dppg.get(\u0027name\u0027),"},{"line_number":111,"context_line":"                port_pair_ids\u003dlist(ppg.get(\u0027port_pairs\u0027, [])),"},{"line_number":112,"context_line":"            ),"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_ca4dcc73","line":111,"range":{"start_line":111,"start_character":0,"end_line":111,"end_character":62},"in_reply_to":"1a430d35_10f5ef55","updated":"2017-03-08 13:32:06.000000000","message":"Done","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"421eb7d59afe9a9e84a4a41df300298043c4e138","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            models_sfc.PortPair("},{"line_number":146,"context_line":"                id\u003dpp[\u0027id\u0027],"},{"line_number":147,"context_line":"                topic\u003dpp[\u0027tenant_id\u0027],"},{"line_number":148,"context_line":"                name\u003dpp.get(\u0027name\u0027),"},{"line_number":149,"context_line":"            ),"},{"line_number":150,"context_line":"        )"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_f096a3ee","line":148,"updated":"2017-02-08 09:42:08.000000000","message":"Weight, ports, etc., can\u0027t be updated?","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            models_sfc.PortPair("},{"line_number":146,"context_line":"                id\u003dpp[\u0027id\u0027],"},{"line_number":147,"context_line":"                topic\u003dpp[\u0027tenant_id\u0027],"},{"line_number":148,"context_line":"                name\u003dpp.get(\u0027name\u0027),"},{"line_number":149,"context_line":"            ),"},{"line_number":150,"context_line":"        )"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_762bec94","line":148,"in_reply_to":"1a430d35_f096a3ee","updated":"2017-03-08 13:32:06.000000000","message":"Not according to https://docs.openstack.org/developer/networking-sfc/api.html#rest-api-impact","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"421eb7d59afe9a9e84a4a41df300298043c4e138","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        )"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"class _DfFlowClassifierDriverHiddenBase(fc_driver.FlowClassifierDriverBase):"},{"line_number":164,"context_line":"    def create_flow_classifier(self, context):"},{"line_number":165,"context_line":"        pass"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_507057dc","line":163,"range":{"start_line":163,"start_character":6,"end_line":163,"end_character":39},"updated":"2017-02-08 09:42:08.000000000","message":"Same here re: Hidden in name, class usage.","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        )"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"class _DfFlowClassifierDriverHiddenBase(fc_driver.FlowClassifierDriverBase):"},{"line_number":164,"context_line":"    def create_flow_classifier(self, context):"},{"line_number":165,"context_line":"        pass"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_0a58c431","line":163,"range":{"start_line":163,"start_character":6,"end_line":163,"end_character":39},"in_reply_to":"1a430d35_507057dc","updated":"2017-03-08 13:32:06.000000000","message":"Done","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"421eb7d59afe9a9e84a4a41df300298043c4e138","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    def initialize(self):"},{"line_number":173,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @log_helpers.log_method_call"},{"line_number":176,"context_line":"    def create_flow_classifier_precommit(self, context):"},{"line_number":177,"context_line":"        pass"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @log_helpers.log_method_call"},{"line_number":180,"context_line":"    def create_flow_classifier_postcommit(self, context):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_132df994","line":177,"range":{"start_line":175,"start_character":0,"end_line":177,"end_character":12},"updated":"2017-02-08 09:42:08.000000000","message":"Is this needed?","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    def initialize(self):"},{"line_number":173,"context_line":"        self.api_nb \u003d api_nb.NbApi.get_instance(True)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @log_helpers.log_method_call"},{"line_number":176,"context_line":"    def create_flow_classifier_precommit(self, context):"},{"line_number":177,"context_line":"        pass"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @log_helpers.log_method_call"},{"line_number":180,"context_line":"    def create_flow_classifier_postcommit(self, context):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_160d503e","line":177,"range":{"start_line":175,"start_character":0,"end_line":177,"end_character":12},"in_reply_to":"1a430d35_132df994","updated":"2017-03-08 13:32:06.000000000","message":"Yes, ABC abstractmethod","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"fca8c834a7a61c126313c6a7fdbf66711706f25b","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                ),"},{"line_number":200,"context_line":"                source_port_id\u003dfc.get(\u0027logical_source_port\u0027),"},{"line_number":201,"context_line":"                dest_port_id\u003dfc.get(\u0027logical_destination_port\u0027),"},{"line_number":202,"context_line":"                # l7_parameters\u003dfc.get(\u0027l7_parameters\u0027),"},{"line_number":203,"context_line":"            )"},{"line_number":204,"context_line":"        )"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_c3529534","line":202,"range":{"start_line":202,"start_character":0,"end_line":202,"end_character":56},"updated":"2017-02-09 03:23:35.000000000","message":"Do we need to go with this comment?","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                ),"},{"line_number":200,"context_line":"                source_port_id\u003dfc.get(\u0027logical_source_port\u0027),"},{"line_number":201,"context_line":"                dest_port_id\u003dfc.get(\u0027logical_destination_port\u0027),"},{"line_number":202,"context_line":"                # l7_parameters\u003dfc.get(\u0027l7_parameters\u0027),"},{"line_number":203,"context_line":"            )"},{"line_number":204,"context_line":"        )"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_2a0d8837","line":202,"range":{"start_line":202,"start_character":0,"end_line":202,"end_character":56},"in_reply_to":"1a430d35_c3529534","updated":"2017-03-08 13:32:06.000000000","message":"Will replace","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"421eb7d59afe9a9e84a4a41df300298043c4e138","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    def update_flow_classifier_postcommit(self, context):"},{"line_number":208,"context_line":"        fc \u003d context.current"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        # Only name can be updated (and description which we ignore)"},{"line_number":211,"context_line":"        self.api_nb.update("},{"line_number":212,"context_line":"            models_sfc.FlowClassifier("},{"line_number":213,"context_line":"                id\u003dfc[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_b3498562","line":210,"range":{"start_line":210,"start_character":0,"end_line":210,"end_character":68},"updated":"2017-02-08 09:42:08.000000000","message":"This is defined by networking-sfc?","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"0215907b0ec0f7d0cd6cfd59c78f679d9305d629","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    def update_flow_classifier_postcommit(self, context):"},{"line_number":208,"context_line":"        fc \u003d context.current"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        # Only name can be updated (and description which we ignore)"},{"line_number":211,"context_line":"        self.api_nb.update("},{"line_number":212,"context_line":"            models_sfc.FlowClassifier("},{"line_number":213,"context_line":"                id\u003dfc[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_ea029008","line":210,"range":{"start_line":210,"start_character":0,"end_line":210,"end_character":68},"in_reply_to":"1a430d35_b3498562","updated":"2017-03-08 13:32:06.000000000","message":"https://docs.openstack.org/developer/networking-sfc/api.html#rest-api-impact","commit_id":"69144b4ad97979de639f960a691b25d00fe833b6"}],"dragonflow/tests/unit/test_fc_driver.py":[{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"a0a60656005887225419089c4c84479eca66ee0b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.driver.initialize()"},{"line_number":71,"context_line":"        self.driver._nb_api \u003d mock.Mock()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_create_flow_classifier_precommit_source_port(self):"},{"line_number":74,"context_line":"        with self.port("},{"line_number":75,"context_line":"            device_owner\u003d\u0027compute\u0027,"},{"line_number":76,"context_line":"            device_id\u003d\u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":32,"id":"1f1a1f67_d224f7c8","line":73,"updated":"2017-07-13 14:02:11.000000000","message":"What are you testing here?","commit_id":"0956ff2622dd55e23fd45e63d9a6a291c58c4a33"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"c548c2b24aa6d63475b4f7a82b40430694ca8e91","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.driver.initialize()"},{"line_number":71,"context_line":"        self.driver._nb_api \u003d mock.Mock()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_create_flow_classifier_precommit_source_port(self):"},{"line_number":74,"context_line":"        with self.port("},{"line_number":75,"context_line":"            device_owner\u003d\u0027compute\u0027,"},{"line_number":76,"context_line":"            device_id\u003d\u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":32,"id":"1f1a1f67_5f51c861","line":73,"in_reply_to":"1f1a1f67_d224f7c8","updated":"2017-07-16 06:22:47.000000000","message":"Pre-commit with source port (or dest, down below) only does not raise any exceptions.","commit_id":"0956ff2622dd55e23fd45e63d9a6a291c58c4a33"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ed195a0ee5bc877316fe0a14a67bd1938637a4f6","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    self.flowclassifier_plugin, self.ctx,"},{"line_number":84,"context_line":"                    fc[\u0027flow_classifier\u0027]"},{"line_number":85,"context_line":"                )"},{"line_number":86,"context_line":"                self.driver.create_flow_classifier_precommit(fc_context)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def test_create_flow_classifier_precommit_dest_port(self):"},{"line_number":89,"context_line":"        with self.port("}],"source_content_type":"text/x-python","patch_set":33,"id":"1f1a1f67_d5ceab58","line":86,"range":{"start_line":86,"start_character":0,"end_line":86,"end_character":72},"updated":"2017-07-18 06:29:33.000000000","message":"nit: Maybe add a comment saying the test just verifies no exception is thrown?","commit_id":"039f31d48556295e8ef85695f16866c5e23add89"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"9e550b51e8db42294623a63238916ab3dfb872f1","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    self.flowclassifier_plugin, self.ctx,"},{"line_number":84,"context_line":"                    fc[\u0027flow_classifier\u0027]"},{"line_number":85,"context_line":"                )"},{"line_number":86,"context_line":"                self.driver.create_flow_classifier_precommit(fc_context)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def test_create_flow_classifier_precommit_dest_port(self):"},{"line_number":89,"context_line":"        with self.port("}],"source_content_type":"text/x-python","patch_set":33,"id":"1f1a1f67_7cd33fd6","line":86,"range":{"start_line":86,"start_character":0,"end_line":86,"end_character":72},"in_reply_to":"1f1a1f67_d5ceab58","updated":"2017-07-18 10:06:17.000000000","message":"Ok","commit_id":"039f31d48556295e8ef85695f16866c5e23add89"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ed195a0ee5bc877316fe0a14a67bd1938637a4f6","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    self.flowclassifier_plugin, self.ctx,"},{"line_number":99,"context_line":"                    fc[\u0027flow_classifier\u0027]"},{"line_number":100,"context_line":"                )"},{"line_number":101,"context_line":"                self.driver.create_flow_classifier_precommit(fc_context)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def test_create_flow_classifier_precommit_both_ports(self):"},{"line_number":104,"context_line":"        with self.port("}],"source_content_type":"text/x-python","patch_set":33,"id":"1f1a1f67_1537834f","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":72},"updated":"2017-07-18 06:29:33.000000000","message":"nit: Same here","commit_id":"039f31d48556295e8ef85695f16866c5e23add89"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"9e550b51e8db42294623a63238916ab3dfb872f1","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    self.flowclassifier_plugin, self.ctx,"},{"line_number":99,"context_line":"                    fc[\u0027flow_classifier\u0027]"},{"line_number":100,"context_line":"                )"},{"line_number":101,"context_line":"                self.driver.create_flow_classifier_precommit(fc_context)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def test_create_flow_classifier_precommit_both_ports(self):"},{"line_number":104,"context_line":"        with self.port("}],"source_content_type":"text/x-python","patch_set":33,"id":"1f1a1f67_3cd947f2","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":72},"in_reply_to":"1f1a1f67_1537834f","updated":"2017-07-18 10:06:17.000000000","message":"Ok","commit_id":"039f31d48556295e8ef85695f16866c5e23add89"}],"tools/tox_install.sh":[{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"a0a60656005887225419089c4c84479eca66ee0b","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DIR\u003d$(dirname $0)"},{"line_number":18,"context_line":"${DIR}/tox_install_project.sh neutron neutron $*"},{"line_number":19,"context_line":"${DIR}/tox_install_project.sh networking-sfc networking_sfc $*"},{"line_number":20,"context_line":"CONSTRAINTS_FILE\u003d$1"},{"line_number":21,"context_line":"shift"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-sh","patch_set":32,"id":"1f1a1f67_b23bbb36","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":62},"updated":"2017-07-13 14:02:11.000000000","message":"Nit: Shouldn\u0027t it happen only if SFC is enabled?","commit_id":"0956ff2622dd55e23fd45e63d9a6a291c58c4a33"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"c548c2b24aa6d63475b4f7a82b40430694ca8e91","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DIR\u003d$(dirname $0)"},{"line_number":18,"context_line":"${DIR}/tox_install_project.sh neutron neutron $*"},{"line_number":19,"context_line":"${DIR}/tox_install_project.sh networking-sfc networking_sfc $*"},{"line_number":20,"context_line":"CONSTRAINTS_FILE\u003d$1"},{"line_number":21,"context_line":"shift"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-sh","patch_set":32,"id":"1f1a1f67_bf5c5c7e","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":62},"in_reply_to":"1f1a1f67_b23bbb36","updated":"2017-07-16 06:22:47.000000000","message":"I\u0027m not sure there\u0027s an obvious way to know, plus, you need it for the unit-tests.","commit_id":"0956ff2622dd55e23fd45e63d9a6a291c58c4a33"}]}
