)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"f45849aa8cff6513dcf77e4fc85980e97a0a63af","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add SmartNIC representor port to integeration bridge"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In case of baremetal vNIC type neutron should mimic nova-compute"},{"line_number":10,"context_line":"that plug the port to the ovs bridge"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1785608"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3f79a3b5_5e857708","line":9,"range":{"start_line":9,"start_character":11,"end_line":9,"end_character":20},"updated":"2018-12-13 17:22:39.000000000","message":"smart-nic","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"80ae21aadd98dafe87712ee0aae8bb272c28e821","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add SmartNIC representor port to integeration bridge"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In case of baremetal vNIC type neutron should mimic nova-compute"},{"line_number":10,"context_line":"that plug the port to the ovs bridge"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1785608"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3f79a3b5_580568bf","line":9,"range":{"start_line":9,"start_character":11,"end_line":9,"end_character":20},"in_reply_to":"3f79a3b5_5e857708","updated":"2018-12-16 11:56:34.000000000","message":"Done","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-01-22 12:48:30 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add SmartNIC representor port to integeration bridge"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In case of smart-nic vNIC type neutron should mimic nova-compute"},{"line_number":10,"context_line":"that plug the port to the ovs bridge"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Story: #2003346"},{"line_number":13,"context_line":"Closes-Bug: #1785608"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9fdfeff1_00280632","line":10,"range":{"start_line":8,"start_character":0,"end_line":10,"end_character":36},"updated":"2019-01-23 16:52:43.000000000","message":"also can you provide a short outline towards why this change is needed.\n\ni know its reflected in the spec, it should also be mentioned here for clarity IMO.","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add SmartNIC representor port to integeration bridge"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In case of smart-nic vNIC type neutron should mimic nova-compute"},{"line_number":10,"context_line":"that plug the port to the ovs bridge"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Story: #2003346"},{"line_number":13,"context_line":"Closes-Bug: #1785608"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9fdfeff1_c0c51e90","line":10,"updated":"2019-01-23 16:52:43.000000000","message":"so this patch leverages what was added in https://review.openstack.org/#/c/624660/9\n\nwould be nice to rebase this on top of the other for clarity.","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-01-22 12:48:30 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add SmartNIC representor port to integeration bridge"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In case of smart-nic vNIC type neutron should mimic nova-compute"},{"line_number":10,"context_line":"that plug the port to the ovs bridge"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Story: #2003346"},{"line_number":13,"context_line":"Closes-Bug: #1785608"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9fdfeff1_4e434bb0","line":10,"range":{"start_line":8,"start_character":0,"end_line":10,"end_character":36},"in_reply_to":"9fdfeff1_00280632","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add SmartNIC representor port to integeration bridge"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In case of smart-nic vNIC type neutron should mimic nova-compute"},{"line_number":10,"context_line":"that plug the port to the ovs bridge"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Story: #2003346"},{"line_number":13,"context_line":"Closes-Bug: #1785608"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9fdfeff1_ee155f9d","line":10,"in_reply_to":"9fdfeff1_c0c51e90","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"5d2f948f62e69cb697b06cd3d42e08ef3d759d68","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Hamdy Khader \u003chamdyk@mellanox.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-02-10 12:50:57 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Smart NIC representor port to integeration bridge"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In case of Smart NIC vNIC type neutron should mimic nova-compute"},{"line_number":10,"context_line":"that plug the port to the ovs bridge."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"9fdfeff1_3bb89928","line":7,"updated":"2019-02-11 11:00:54.000000000","message":"nit: s/integeration/integration","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"c81c3be9be8ebb96b8dddc68a0e86f6c50af4987","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Hamdy Khader \u003chamdyk@mellanox.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-02-10 12:50:57 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Smart NIC representor port to integeration bridge"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In case of Smart NIC vNIC type neutron should mimic nova-compute"},{"line_number":10,"context_line":"that plug the port to the ovs bridge."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"9fdfeff1_1bc115e5","line":7,"in_reply_to":"9fdfeff1_3bb89928","updated":"2019-02-11 11:35:05.000000000","message":"will do","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"}],"neutron/conf/plugins/ml2/drivers/ovs_conf.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a7d15534203ad6303840af57453fbbaeb6858d66","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                       \"outgoing IP packet carrying GRE/VXLAN tunnel.\")),"},{"line_number":162,"context_line":"    cfg.StrOpt(\u0027agent_type\u0027, default\u003dn_const.AGENT_TYPE_OVS,"},{"line_number":163,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":164,"context_line":"               help\u003d_(\"Selects the Agent Type reported\")),"},{"line_number":165,"context_line":"    cfg.BoolOpt(\u0027baremetal_smartnic\u0027, default\u003dFalse,"},{"line_number":166,"context_line":"                help\u003d_(\"Enable the agent to process Smart NIC ports\")),"},{"line_number":167,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_92dced74","line":164,"updated":"2019-02-25 20:04:35.000000000","message":"super nit: missing trailing period","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"61bc916ebe200229356b265bde09ae70e23d3853","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                       \"outgoing IP packet carrying GRE/VXLAN tunnel.\")),"},{"line_number":162,"context_line":"    cfg.StrOpt(\u0027agent_type\u0027, default\u003dn_const.AGENT_TYPE_OVS,"},{"line_number":163,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":164,"context_line":"               help\u003d_(\"Selects the Agent Type reported\")),"},{"line_number":165,"context_line":"    cfg.BoolOpt(\u0027baremetal_smartnic\u0027, default\u003dFalse,"},{"line_number":166,"context_line":"                help\u003d_(\"Enable the agent to process Smart NIC ports\")),"},{"line_number":167,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_3042cf10","line":164,"in_reply_to":"9fdfeff1_92dced74","updated":"2019-02-26 10:05:52.000000000","message":"Done","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a7d15534203ad6303840af57453fbbaeb6858d66","unresolved":false,"context_lines":[{"line_number":163,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":164,"context_line":"               help\u003d_(\"Selects the Agent Type reported\")),"},{"line_number":165,"context_line":"    cfg.BoolOpt(\u0027baremetal_smartnic\u0027, default\u003dFalse,"},{"line_number":166,"context_line":"                help\u003d_(\"Enable the agent to process Smart NIC ports\")),"},{"line_number":167,"context_line":"]"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_52e20532","line":166,"updated":"2019-02-25 20:04:35.000000000","message":"Here too","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"61bc916ebe200229356b265bde09ae70e23d3853","unresolved":false,"context_lines":[{"line_number":163,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":164,"context_line":"               help\u003d_(\"Selects the Agent Type reported\")),"},{"line_number":165,"context_line":"    cfg.BoolOpt(\u0027baremetal_smartnic\u0027, default\u003dFalse,"},{"line_number":166,"context_line":"                help\u003d_(\"Enable the agent to process Smart NIC ports\")),"},{"line_number":167,"context_line":"]"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_d04a6325","line":166,"in_reply_to":"9fdfeff1_52e20532","updated":"2019-02-26 10:05:52.000000000","message":"Done","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"2e31d0d1ed9f4f45dce6fa05087e748cd630b244","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        # In case of baremetal vnic type, add smartnic representor port to"},{"line_number":407,"context_line":"        # the integration bridge."},{"line_number":408,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"},{"line_number":409,"context_line":"            get_resource_by_id(resources.PORT, port[\u0027id\u0027])"},{"line_number":410,"context_line":"        if not port_data:"},{"line_number":411,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":412,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_cb23b9a9","line":409,"range":{"start_line":409,"start_character":55,"end_line":409,"end_character":58},"updated":"2018-07-27 07:29:59.000000000","message":"When neutron ml2 plugin make a rpc call \u0027port_update\u0027 to ovs agent, it is possible that OVS agent B gets that rpc call of the port which is meant to bind to OVS agent A. \n\nIn that case, the following procedure should happen in ovs agent A, not in OVS agent B.","commit_id":"4505c395bd5e21dc9de7222fce6c62cd72c6f5eb"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"08e2605a4c1cf2928dbb6dca050b724533a544ad","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        # In case of baremetal vnic type, add smartnic representor port to"},{"line_number":407,"context_line":"        # the integration bridge."},{"line_number":408,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"},{"line_number":409,"context_line":"            get_resource_by_id(resources.PORT, port[\u0027id\u0027])"},{"line_number":410,"context_line":"        if not port_data:"},{"line_number":411,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":412,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_75b670dc","line":409,"range":{"start_line":409,"start_character":55,"end_line":409,"end_character":58},"in_reply_to":"5f7c97a3_0be8d1dd","updated":"2018-08-06 08:25:11.000000000","message":"Done","commit_id":"4505c395bd5e21dc9de7222fce6c62cd72c6f5eb"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"881e7481003fa728ce64a25645732d2643f71085","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        # In case of baremetal vnic type, add smartnic representor port to"},{"line_number":407,"context_line":"        # the integration bridge."},{"line_number":408,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"},{"line_number":409,"context_line":"            get_resource_by_id(resources.PORT, port[\u0027id\u0027])"},{"line_number":410,"context_line":"        if not port_data:"},{"line_number":411,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":412,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_5d6be61a","line":409,"range":{"start_line":409,"start_character":55,"end_line":409,"end_character":58},"in_reply_to":"5f7c97a3_0be8d1dd","updated":"2018-07-27 17:33:46.000000000","message":"The notification from neutron is lossy and it\u0027s for optimization.\nIt\u0027s possible for neutron agent to miss it for various reasons. e.g. at that time the agent was restarted etc.\nSo in mail polling loop, similar logic to update ovsdb is needed in case that the notification was missed.","commit_id":"4505c395bd5e21dc9de7222fce6c62cd72c6f5eb"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"08e2605a4c1cf2928dbb6dca050b724533a544ad","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        # In case of baremetal vnic type, add smartnic representor port to"},{"line_number":407,"context_line":"        # the integration bridge."},{"line_number":408,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"},{"line_number":409,"context_line":"            get_resource_by_id(resources.PORT, port[\u0027id\u0027])"},{"line_number":410,"context_line":"        if not port_data:"},{"line_number":411,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":412,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_55b1f4e0","line":409,"range":{"start_line":409,"start_character":55,"end_line":409,"end_character":58},"in_reply_to":"5f7c97a3_cb23b9a9","updated":"2018-08-06 08:25:11.000000000","message":"Done","commit_id":"4505c395bd5e21dc9de7222fce6c62cd72c6f5eb"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f8b59ae917ea2c3efd350d3581b3f7f0f6c7137d","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        # In case of baremetal vnic type, add smartnic representor port to"},{"line_number":407,"context_line":"        # the integration bridge."},{"line_number":408,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"},{"line_number":409,"context_line":"            get_resource_by_id(resources.PORT, port[\u0027id\u0027])"},{"line_number":410,"context_line":"        if not port_data:"},{"line_number":411,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":412,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_0be8d1dd","line":409,"range":{"start_line":409,"start_character":55,"end_line":409,"end_character":58},"in_reply_to":"5f7c97a3_cb23b9a9","updated":"2018-07-27 07:59:54.000000000","message":"I  double checked the neutron ml2 plugin code. When it make rpc call of port_update, it did it in a \u0027fanout\u0027 way. So this means all the ovs agents can get the port information. i.e. A port is about to be bound to node A, but all the ovs-agents running on node A, B, C will all get the rpc call of port_update.\n\nI think we need to add the logic to judge whether it\u0027s the right port here.","commit_id":"4505c395bd5e21dc9de7222fce6c62cd72c6f5eb"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"ec33572f0b2af666e26e5bb30b0cc7563ab5343b","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        # Even if full port details might be provided to this call,"},{"line_number":402,"context_line":"        # they are not used since there is no guarantee the notifications"},{"line_number":403,"context_line":"        # are processed in the same order as the relevant API requests"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        # In case of baremetal vnic type, add smartnic representor port to"},{"line_number":406,"context_line":"        # the integration bridge."},{"line_number":407,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_23519fd9","line":404,"updated":"2018-08-06 12:10:55.000000000","message":"Should all this be done here? My previous understanding was that port_update (and the other similarly short methods around it) was intentionally a very short method \"just flipping a bit\" so other parts can notice something needs to be done (kind of a signal handling pattern). Wouldn\u0027t all this be better placed in either process_port_info or some function called from process_port_info?","commit_id":"78a83a76ae527b172470163678283fb59ee89814"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"044ccdf3855242da03aa0075407e8d4ef3eadd39","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        # Even if full port details might be provided to this call,"},{"line_number":402,"context_line":"        # they are not used since there is no guarantee the notifications"},{"line_number":403,"context_line":"        # are processed in the same order as the relevant API requests"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        # In case of baremetal vnic type, add smartnic representor port to"},{"line_number":406,"context_line":"        # the integration bridge."},{"line_number":407,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_2373df17","line":404,"in_reply_to":"3f79a3b5_23519fd9","updated":"2018-08-06 12:23:33.000000000","message":"So you are right. I guess we need to change code that we just save the information on the bare metal port in a tuple and the call for ovs-vsctl should be done later so we don\u0027t stuck the update_port too long.","commit_id":"78a83a76ae527b172470163678283fb59ee89814"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"501dce6ac039a4a2e1f82dfa77e460e7486c9277","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        mac \u003d port_data[\u0027mac_address\u0027]"},{"line_number":414,"context_line":"        vm_uuid \u003d port_data[\u0027device_id\u0027]"},{"line_number":415,"context_line":"        should_update \u003d False"},{"line_number":416,"context_line":"        for port_binding in port_data.bindings:"},{"line_number":417,"context_line":"            if self.conf.host !\u003d port_binding[\u0027host\u0027]:"},{"line_number":418,"context_line":"                continue"},{"line_number":419,"context_line":"            should_update \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_5651cc61","line":416,"range":{"start_line":416,"start_character":46,"end_line":416,"end_character":47},"updated":"2018-08-09 01:13:11.000000000","message":"there is possibility that port_data.bindings attribute is not exiting:\n\nERROR neutron_lib.callbacks.manager [None req-c5b781a9-3e8d-477e-b2f1-e60e793271d9 admin admin] Error during notification for neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent.OVSPluginApi._legacy_notifier-454920 Port, after_update: AttributeError: \u0027Port\u0027 object has no attribute \u0027bindings\u0027\nERROR neutron_lib.callbacks.manager Traceback (most recent call last):\nERROR neutron_lib.callbacks.manager   File \"/usr/local/lib/python2.7/dist-packages/neutron_lib/callbacks/manager.py\", line 197, in _notify_loop\nERROR neutron_lib.callbacks.manager     callback(resource, event, trigger, **kwargs)\nERROR neutron_lib.callbacks.manager   File \"/opt/stack/neutron/neutron/agent/rpc.py\", line 209, in _legacy_notifier\nERROR neutron_lib.callbacks.manager     getattr(self._legacy_interface, method)(context, **payload)\nERROR neutron_lib.callbacks.manager   File \"/usr/local/lib/python2.7/dist-packages/osprofiler/profiler.py\", line 158, in wrapper\nERROR neutron_lib.callbacks.manager     result \u003d f(*args, **kwargs)\nERROR neutron_lib.callbacks.manager   File \"/opt/stack/neutron/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py\", line 410, in port_update\nERROR neutron_lib.callbacks.manager     for port_binding in port_data.bindings:\nERROR neutron_lib.callbacks.manager AttributeError: \u0027Port\u0027 object has no attribute \u0027bindings\u0027\nERROR neutron_lib.callbacks.manager","commit_id":"78a83a76ae527b172470163678283fb59ee89814"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"921cb9a6034cd5f454f34239c38a0a4c6bfd5553","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        mac \u003d port_data[\u0027mac_address\u0027]"},{"line_number":414,"context_line":"        vm_uuid \u003d port_data[\u0027device_id\u0027]"},{"line_number":415,"context_line":"        should_update \u003d False"},{"line_number":416,"context_line":"        for port_binding in port_data.bindings:"},{"line_number":417,"context_line":"            if self.conf.host !\u003d port_binding[\u0027host\u0027]:"},{"line_number":418,"context_line":"                continue"},{"line_number":419,"context_line":"            should_update \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_aee8c813","line":416,"range":{"start_line":416,"start_character":46,"end_line":416,"end_character":47},"in_reply_to":"3f79a3b5_5651cc61","updated":"2018-11-21 21:06:17.000000000","message":"Done","commit_id":"78a83a76ae527b172470163678283fb59ee89814"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"dc9af247a58c14de55f10cc621201e55b49ae903","unresolved":false,"context_lines":[{"line_number":436,"context_line":"        try:"},{"line_number":437,"context_line":"            if vif_type \u003d\u003d \u0027ovs\u0027:"},{"line_number":438,"context_line":"                utils.execute([\u0027ovs-vsctl\u0027, \u0027--\u0027, \u0027--may-exist\u0027,"},{"line_number":439,"context_line":"                               \u0027add-port\u0027, \u0027br-int\u0027, rep_port,"},{"line_number":440,"context_line":"                               \u0027--\u0027, \u0027set\u0027, \u0027Interface\u0027, rep_port,"},{"line_number":441,"context_line":"                               \u0027external-ids:iface-id\u003d%s\u0027 % iface_id,"},{"line_number":442,"context_line":"                               \u0027external-ids:iface-status\u003dactive\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_4b684920","line":439,"range":{"start_line":439,"start_character":61,"end_line":439,"end_character":62},"updated":"2018-08-08 05:39:21.000000000","message":"we should use \u0027CONF.ovs.integration_bridge\u0027 instead of br-int, because br-int is only the default value.","commit_id":"78a83a76ae527b172470163678283fb59ee89814"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"613c78401a135c328a7d66c6d28ffdd88689397b","unresolved":false,"context_lines":[{"line_number":436,"context_line":"        try:"},{"line_number":437,"context_line":"            if vif_type \u003d\u003d \u0027ovs\u0027:"},{"line_number":438,"context_line":"                utils.execute([\u0027ovs-vsctl\u0027, \u0027--\u0027, \u0027--may-exist\u0027,"},{"line_number":439,"context_line":"                               \u0027add-port\u0027, \u0027br-int\u0027, rep_port,"},{"line_number":440,"context_line":"                               \u0027--\u0027, \u0027set\u0027, \u0027Interface\u0027, rep_port,"},{"line_number":441,"context_line":"                               \u0027external-ids:iface-id\u003d%s\u0027 % iface_id,"},{"line_number":442,"context_line":"                               \u0027external-ids:iface-status\u003dactive\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_12783928","line":439,"range":{"start_line":439,"start_character":61,"end_line":439,"end_character":62},"in_reply_to":"3f79a3b5_4b684920","updated":"2018-08-08 14:18:04.000000000","message":"Done","commit_id":"78a83a76ae527b172470163678283fb59ee89814"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"dc9af247a58c14de55f10cc621201e55b49ae903","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":446,"context_line":"            elif vif_type \u003d\u003d \u0027unbound\u0027:"},{"line_number":447,"context_line":"                utils.execute([\u0027ovs-vsctl\u0027, \u0027--if-exists\u0027, \u0027del-port\u0027,"},{"line_number":448,"context_line":"                               \u0027br-int\u0027, rep_port],"},{"line_number":449,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_eb76f506","line":448,"range":{"start_line":448,"start_character":49,"end_line":448,"end_character":51},"updated":"2018-08-08 05:39:21.000000000","message":"we should use \u0027CONF.ovs.integration_bridge\u0027 instead of br-int, because br-int is only the default value.","commit_id":"78a83a76ae527b172470163678283fb59ee89814"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"613c78401a135c328a7d66c6d28ffdd88689397b","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":446,"context_line":"            elif vif_type \u003d\u003d \u0027unbound\u0027:"},{"line_number":447,"context_line":"                utils.execute([\u0027ovs-vsctl\u0027, \u0027--if-exists\u0027, \u0027del-port\u0027,"},{"line_number":448,"context_line":"                               \u0027br-int\u0027, rep_port],"},{"line_number":449,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_d28f2121","line":448,"range":{"start_line":448,"start_character":49,"end_line":448,"end_character":51},"in_reply_to":"3f79a3b5_eb76f506","updated":"2018-08-08 14:18:04.000000000","message":"Done","commit_id":"78a83a76ae527b172470163678283fb59ee89814"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"501dce6ac039a4a2e1f82dfa77e460e7486c9277","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        mac \u003d port_data[\u0027mac_address\u0027]"},{"line_number":416,"context_line":"        vm_uuid \u003d port_data[\u0027device_id\u0027]"},{"line_number":417,"context_line":"        should_update \u003d False"},{"line_number":418,"context_line":"        for port_binding in port_data.bindings:"},{"line_number":419,"context_line":"            if self.conf.host !\u003d port_binding[\u0027host\u0027]:"},{"line_number":420,"context_line":"                continue"},{"line_number":421,"context_line":"            should_update \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_040ea93a","line":418,"range":{"start_line":418,"start_character":46,"end_line":418,"end_character":47},"updated":"2018-08-09 01:13:11.000000000","message":"there is possibility that port_data.bindings attribute is not exiting:\n\nERROR neutron_lib.callbacks.manager [None req-c5b781a9-3e8d-477e-b2f1-e60e793271d9 admin admin] Error during notification for neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent.OVSPluginApi._legacy_notifier-454920 Port, after_update: AttributeError: \u0027Port\u0027 object has no attribute \u0027bindings\u0027\nERROR neutron_lib.callbacks.manager Traceback (most recent call last):\nERROR neutron_lib.callbacks.manager   File \"/usr/local/lib/python2.7/dist-packages/neutron_lib/callbacks/manager.py\", line 197, in _notify_loop\nERROR neutron_lib.callbacks.manager     callback(resource, event, trigger, **kwargs)\nERROR neutron_lib.callbacks.manager   File \"/opt/stack/neutron/neutron/agent/rpc.py\", line 209, in _legacy_notifier\nERROR neutron_lib.callbacks.manager     getattr(self._legacy_interface, method)(context, **payload)\nERROR neutron_lib.callbacks.manager   File \"/usr/local/lib/python2.7/dist-packages/osprofiler/profiler.py\", line 158, in wrapper\nERROR neutron_lib.callbacks.manager     result \u003d f(*args, **kwargs)\nERROR neutron_lib.callbacks.manager   File \"/opt/stack/neutron/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py\", line 410, in port_update\nERROR neutron_lib.callbacks.manager     for port_binding in port_data.bindings:\nERROR neutron_lib.callbacks.manager AttributeError: \u0027Port\u0027 object has no attribute \u0027bindings\u0027\nERROR neutron_lib.callbacks.manager","commit_id":"198a17729a65b58caf5a0d5eb1b5ec33cbf72c23"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"921cb9a6034cd5f454f34239c38a0a4c6bfd5553","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        mac \u003d port_data[\u0027mac_address\u0027]"},{"line_number":416,"context_line":"        vm_uuid \u003d port_data[\u0027device_id\u0027]"},{"line_number":417,"context_line":"        should_update \u003d False"},{"line_number":418,"context_line":"        for port_binding in port_data.bindings:"},{"line_number":419,"context_line":"            if self.conf.host !\u003d port_binding[\u0027host\u0027]:"},{"line_number":420,"context_line":"                continue"},{"line_number":421,"context_line":"            should_update \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_53c99e77","line":418,"range":{"start_line":418,"start_character":46,"end_line":418,"end_character":47},"in_reply_to":"3f79a3b5_040ea93a","updated":"2018-11-21 21:06:17.000000000","message":"Done","commit_id":"198a17729a65b58caf5a0d5eb1b5ec33cbf72c23"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2ba5b19ae3faf6f80a2f120e69b50f9e0dde11dd","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        if should_update:"},{"line_number":433,"context_line":"            self.updated_ports.add(port[\u0027id\u0027])"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    def update_smartnic_port(self, baremetal_port_data):"},{"line_number":436,"context_line":"        mac \u003d baremetal_port_data[\u0027mac\u0027]"},{"line_number":437,"context_line":"        vm_uuid \u003d baremetal_port_data[\u0027vm_uuid\u0027]"},{"line_number":438,"context_line":"        rep_port \u003d baremetal_port_data[\u0027port_binding\u0027][\u0027profile\u0027]["}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_62fd18b7","line":435,"updated":"2018-11-19 10:15:53.000000000","message":"you have completely separated the smartnic OVS port from the rest of the port update flow.\n\nin my mind the flow should be exactly the same apart of the step of connecting the port to the integration bridge in case of smartnic port type (ATM baremetal type with local_link_information in the port\u0027s binding profile).\n\nfurthermore, in case an inactive binding is created and later activated (via binding_activate() call) the port will not be added to the integration bridge","commit_id":"198a17729a65b58caf5a0d5eb1b5ec33cbf72c23"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2ba5b19ae3faf6f80a2f120e69b50f9e0dde11dd","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            \u0027local_link_information\u0027][0][\u0027port_id\u0027]"},{"line_number":440,"context_line":"        vif_type \u003d baremetal_port_data[\u0027port_binding\u0027][\u0027vif_type\u0027]"},{"line_number":441,"context_line":"        iface_id \u003d baremetal_port_data[\u0027port_binding\u0027][\u0027port_id\u0027]"},{"line_number":442,"context_line":"        try:"},{"line_number":443,"context_line":"            br_name \u003d self.conf.OVS.integration_bridge"},{"line_number":444,"context_line":"            if vif_type \u003d\u003d \u0027ovs\u0027:"},{"line_number":445,"context_line":"                utils.execute([\u0027ovs-vsctl\u0027, \u0027--\u0027, \u0027--may-exist\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_62e19831","line":442,"updated":"2018-11-19 10:15:53.000000000","message":"see if you can use : self.int_br instead of performing the operation with ovs-vsctl.","commit_id":"198a17729a65b58caf5a0d5eb1b5ec33cbf72c23"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"921cb9a6034cd5f454f34239c38a0a4c6bfd5553","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            \u0027local_link_information\u0027][0][\u0027port_id\u0027]"},{"line_number":440,"context_line":"        vif_type \u003d baremetal_port_data[\u0027port_binding\u0027][\u0027vif_type\u0027]"},{"line_number":441,"context_line":"        iface_id \u003d baremetal_port_data[\u0027port_binding\u0027][\u0027port_id\u0027]"},{"line_number":442,"context_line":"        try:"},{"line_number":443,"context_line":"            br_name \u003d self.conf.OVS.integration_bridge"},{"line_number":444,"context_line":"            if vif_type \u003d\u003d \u0027ovs\u0027:"},{"line_number":445,"context_line":"                utils.execute([\u0027ovs-vsctl\u0027, \u0027--\u0027, \u0027--may-exist\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_7a1b461c","line":442,"in_reply_to":"3f79a3b5_62e19831","updated":"2018-11-21 21:06:17.000000000","message":"That would be more convenient,Although I tried to use ovsdb api (ovs_lib.OVSBridge) to add the port and it\u0027s external ids to br-int but the port appears without \"tag\" in ovs-vsctl and neutron server doesn\u0027t switch the port status to ACTIVE.","commit_id":"198a17729a65b58caf5a0d5eb1b5ec33cbf72c23"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"35b000ffe85e48ac38c0f25afdc886dfe711a967","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            \u0027local_link_information\u0027][0][\u0027port_id\u0027]"},{"line_number":440,"context_line":"        vif_type \u003d baremetal_port_data[\u0027port_binding\u0027][\u0027vif_type\u0027]"},{"line_number":441,"context_line":"        iface_id \u003d baremetal_port_data[\u0027port_binding\u0027][\u0027port_id\u0027]"},{"line_number":442,"context_line":"        try:"},{"line_number":443,"context_line":"            br_name \u003d self.conf.OVS.integration_bridge"},{"line_number":444,"context_line":"            if vif_type \u003d\u003d \u0027ovs\u0027:"},{"line_number":445,"context_line":"                utils.execute([\u0027ovs-vsctl\u0027, \u0027--\u0027, \u0027--may-exist\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_ee2a1577","line":442,"in_reply_to":"3f79a3b5_7a1b461c","updated":"2018-11-25 11:04:41.000000000","message":"you can extend the ovs_lib to support setting the port\u0027s external IDs.\n\nsimilar to : get_port_external_ids() defined in ovs_lib.py\n\neither by calling set_db_attribute() or creating a new method using self.ovsdb.db_set()\n\nOVSBridge.add_port(), today supports only interface attributes,i believe this will explain the issues you are facing above.","commit_id":"198a17729a65b58caf5a0d5eb1b5ec33cbf72c23"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2ba5b19ae3faf6f80a2f120e69b50f9e0dde11dd","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        iface_id \u003d baremetal_port_data[\u0027port_binding\u0027][\u0027port_id\u0027]"},{"line_number":442,"context_line":"        try:"},{"line_number":443,"context_line":"            br_name \u003d self.conf.OVS.integration_bridge"},{"line_number":444,"context_line":"            if vif_type \u003d\u003d \u0027ovs\u0027:"},{"line_number":445,"context_line":"                utils.execute([\u0027ovs-vsctl\u0027, \u0027--\u0027, \u0027--may-exist\u0027,"},{"line_number":446,"context_line":"                               \u0027add-port\u0027, br_name, rep_port,"},{"line_number":447,"context_line":"                               \u0027--\u0027, \u0027set\u0027, \u0027Interface\u0027, rep_port,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_02da2447","line":444,"updated":"2018-11-19 10:15:53.000000000","message":"can we get to this point and vif_type !\u003d \u0027ovs\u0027 ?","commit_id":"198a17729a65b58caf5a0d5eb1b5ec33cbf72c23"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"921cb9a6034cd5f454f34239c38a0a4c6bfd5553","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        iface_id \u003d baremetal_port_data[\u0027port_binding\u0027][\u0027port_id\u0027]"},{"line_number":442,"context_line":"        try:"},{"line_number":443,"context_line":"            br_name \u003d self.conf.OVS.integration_bridge"},{"line_number":444,"context_line":"            if vif_type \u003d\u003d \u0027ovs\u0027:"},{"line_number":445,"context_line":"                utils.execute([\u0027ovs-vsctl\u0027, \u0027--\u0027, \u0027--may-exist\u0027,"},{"line_number":446,"context_line":"                               \u0027add-port\u0027, br_name, rep_port,"},{"line_number":447,"context_line":"                               \u0027--\u0027, \u0027set\u0027, \u0027Interface\u0027, rep_port,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_731b7a83","line":444,"in_reply_to":"3f79a3b5_02da2447","updated":"2018-11-21 21:06:17.000000000","message":"No, we need to add port to bridge iff vif_type\u003dovs","commit_id":"198a17729a65b58caf5a0d5eb1b5ec33cbf72c23"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2ba5b19ae3faf6f80a2f120e69b50f9e0dde11dd","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        except Exception as e:"},{"line_number":459,"context_line":"            LOG.warning(\"Failed to add port to ovs %s\", e)"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def port_delete(self, context, **kwargs):"},{"line_number":462,"context_line":"        port_id \u003d kwargs.get(\u0027port_id\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_c23d0cba","line":459,"updated":"2018-11-19 10:15:53.000000000","message":"i would also add the port ID here","commit_id":"198a17729a65b58caf5a0d5eb1b5ec33cbf72c23"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"921cb9a6034cd5f454f34239c38a0a4c6bfd5553","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        except Exception as e:"},{"line_number":459,"context_line":"            LOG.warning(\"Failed to add port to ovs %s\", e)"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def port_delete(self, context, **kwargs):"},{"line_number":462,"context_line":"        port_id \u003d kwargs.get(\u0027port_id\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_be6a39b1","line":459,"in_reply_to":"3f79a3b5_c23d0cba","updated":"2018-11-21 21:06:17.000000000","message":"Done","commit_id":"198a17729a65b58caf5a0d5eb1b5ec33cbf72c23"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"44870aa30393980cd02d6d0f40826c792e1bf2f6","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                    if \u0027local_link_information\u0027 in profile and \\"},{"line_number":445,"context_line":"                            len(profile[\u0027local_link_information\u0027]) \u003e 0:"},{"line_number":446,"context_line":"                        self.updated_baremetal_ports.append({"},{"line_number":447,"context_line":"                            \u0027mac\u0027: mac,"},{"line_number":448,"context_line":"                            \u0027vm_uuid\u0027: vm_uuid,"},{"line_number":449,"context_line":"                            \u0027port_binding\u0027: port_binding"},{"line_number":450,"context_line":"                        })"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        if should_update:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_ffb0a1fe","line":449,"range":{"start_line":447,"start_character":26,"end_line":449,"end_character":55},"updated":"2018-11-22 08:01:15.000000000","message":"this should be just \nmac, vm_uuid, iface_id and  iface_name","commit_id":"688146028520a9c00906c8ac1a6ffd940bd11229"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"a12ac34d5467ade1837369f9c8d61845e43c393d","unresolved":false,"context_lines":[{"line_number":444,"context_line":"                    if \u0027local_link_information\u0027 in profile and \\"},{"line_number":445,"context_line":"                            len(profile[\u0027local_link_information\u0027]) \u003e 0:"},{"line_number":446,"context_line":"                        self.updated_baremetal_ports.append({"},{"line_number":447,"context_line":"                            \u0027mac\u0027: mac,"},{"line_number":448,"context_line":"                            \u0027vm_uuid\u0027: vm_uuid,"},{"line_number":449,"context_line":"                            \u0027port_binding\u0027: port_binding"},{"line_number":450,"context_line":"                        })"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        if should_update:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_eae1c1cf","line":449,"range":{"start_line":447,"start_character":26,"end_line":449,"end_character":55},"in_reply_to":"3f79a3b5_ffb0a1fe","updated":"2018-11-26 11:42:50.000000000","message":"Done","commit_id":"688146028520a9c00906c8ac1a6ffd940bd11229"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"44870aa30393980cd02d6d0f40826c792e1bf2f6","unresolved":false,"context_lines":[{"line_number":431,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":432,"context_line":"            return"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        mac \u003d port_data[\u0027mac_address\u0027]"},{"line_number":435,"context_line":"        vm_uuid \u003d port_data[\u0027device_id\u0027]"},{"line_number":436,"context_line":"        should_update \u003d False"},{"line_number":437,"context_line":"        if \u0027bindings\u0027 in port_data:"},{"line_number":438,"context_line":"            for port_binding in port_data[\u0027bindings\u0027]:"},{"line_number":439,"context_line":"                if self.conf.host !\u003d port_binding[\u0027host\u0027]:"},{"line_number":440,"context_line":"                    continue"},{"line_number":441,"context_line":"                should_update \u003d True"},{"line_number":442,"context_line":"                if port_binding[\u0027vnic_type\u0027] \u003d\u003d \u0027baremetal\u0027:"},{"line_number":443,"context_line":"                    profile \u003d port_binding[\u0027profile\u0027]"},{"line_number":444,"context_line":"                    if \u0027local_link_information\u0027 in profile and \\"},{"line_number":445,"context_line":"                            len(profile[\u0027local_link_information\u0027]) \u003e 0:"},{"line_number":446,"context_line":"                        self.updated_baremetal_ports.append({"},{"line_number":447,"context_line":"                            \u0027mac\u0027: mac,"},{"line_number":448,"context_line":"                            \u0027vm_uuid\u0027: vm_uuid,"},{"line_number":449,"context_line":"                            \u0027port_binding\u0027: port_binding"},{"line_number":450,"context_line":"                        })"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        if should_update:"},{"line_number":453,"context_line":"            self.updated_ports.add(port[\u0027id\u0027])"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def update_smartnic_port(self, baremetal_port_data):"},{"line_number":456,"context_line":"        mac \u003d baremetal_port_data[\u0027mac\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_1f28fd33","line":453,"range":{"start_line":434,"start_character":0,"end_line":453,"end_character":46},"updated":"2018-11-22 08:01:15.000000000","message":"this is not good, because it breaks if vnic_type\u003d\u003dNormal  the port_id won\u0027t added to self.updated_ports","commit_id":"688146028520a9c00906c8ac1a6ffd940bd11229"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"a12ac34d5467ade1837369f9c8d61845e43c393d","unresolved":false,"context_lines":[{"line_number":431,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":432,"context_line":"            return"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        mac \u003d port_data[\u0027mac_address\u0027]"},{"line_number":435,"context_line":"        vm_uuid \u003d port_data[\u0027device_id\u0027]"},{"line_number":436,"context_line":"        should_update \u003d False"},{"line_number":437,"context_line":"        if \u0027bindings\u0027 in port_data:"},{"line_number":438,"context_line":"            for port_binding in port_data[\u0027bindings\u0027]:"},{"line_number":439,"context_line":"                if self.conf.host !\u003d port_binding[\u0027host\u0027]:"},{"line_number":440,"context_line":"                    continue"},{"line_number":441,"context_line":"                should_update \u003d True"},{"line_number":442,"context_line":"                if port_binding[\u0027vnic_type\u0027] \u003d\u003d \u0027baremetal\u0027:"},{"line_number":443,"context_line":"                    profile \u003d port_binding[\u0027profile\u0027]"},{"line_number":444,"context_line":"                    if \u0027local_link_information\u0027 in profile and \\"},{"line_number":445,"context_line":"                            len(profile[\u0027local_link_information\u0027]) \u003e 0:"},{"line_number":446,"context_line":"                        self.updated_baremetal_ports.append({"},{"line_number":447,"context_line":"                            \u0027mac\u0027: mac,"},{"line_number":448,"context_line":"                            \u0027vm_uuid\u0027: vm_uuid,"},{"line_number":449,"context_line":"                            \u0027port_binding\u0027: port_binding"},{"line_number":450,"context_line":"                        })"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        if should_update:"},{"line_number":453,"context_line":"            self.updated_ports.add(port[\u0027id\u0027])"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def update_smartnic_port(self, baremetal_port_data):"},{"line_number":456,"context_line":"        mac \u003d baremetal_port_data[\u0027mac\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_cadc0518","line":453,"range":{"start_line":434,"start_character":0,"end_line":453,"end_character":46},"in_reply_to":"3f79a3b5_1f28fd33","updated":"2018-11-26 11:42:50.000000000","message":"Done","commit_id":"688146028520a9c00906c8ac1a6ffd940bd11229"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8e88061c768090cea49f36c42e6dc7e60f339203","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        vif_type \u003d baremetal_port_data[\u0027vif_type\u0027]"},{"line_number":469,"context_line":"        try:"},{"line_number":470,"context_line":"            br_name \u003d self.conf.OVS.integration_bridge"},{"line_number":471,"context_line":"            if vif_type \u003d\u003d \u0027ovs\u0027:"},{"line_number":472,"context_line":"                utils.execute([\u0027ovs-vsctl\u0027, \u0027--\u0027, \u0027--may-exist\u0027,"},{"line_number":473,"context_line":"                               \u0027add-port\u0027, br_name, rep_port,"},{"line_number":474,"context_line":"                               \u0027--\u0027, \u0027set\u0027, \u0027Interface\u0027, rep_port,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_cfff09fd","line":471,"updated":"2018-11-26 14:20:54.000000000","message":"This section should not be here, but in ovs_lib. Actually the CLI API is deprecated, now we use only native OVS implementation.","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"549d5a2ca7992f8b2fb6bb91eb3e2b9b8b41c269","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        vif_type \u003d baremetal_port_data[\u0027vif_type\u0027]"},{"line_number":469,"context_line":"        try:"},{"line_number":470,"context_line":"            br_name \u003d self.conf.OVS.integration_bridge"},{"line_number":471,"context_line":"            if vif_type \u003d\u003d \u0027ovs\u0027:"},{"line_number":472,"context_line":"                utils.execute([\u0027ovs-vsctl\u0027, \u0027--\u0027, \u0027--may-exist\u0027,"},{"line_number":473,"context_line":"                               \u0027add-port\u0027, br_name, rep_port,"},{"line_number":474,"context_line":"                               \u0027--\u0027, \u0027set\u0027, \u0027Interface\u0027, rep_port,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_bf73b71b","line":471,"in_reply_to":"3f79a3b5_cfff09fd","updated":"2018-11-28 10:39:45.000000000","message":"Done","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8e88061c768090cea49f36c42e6dc7e60f339203","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        # more secure"},{"line_number":551,"context_line":"        self.sg_agent.remove_devices_filter(deleted_ports)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"    def process_smartnic_ports(self, port_info):"},{"line_number":554,"context_line":"        smartnic_ports \u003d self.plugin_rpc.get_ports_by_vnic_type_and_host("},{"line_number":555,"context_line":"            self.context, \u0027baremetal\u0027, self.conf.host)"},{"line_number":556,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_4c2547bf","line":553,"updated":"2018-11-26 14:20:54.000000000","message":"I don\u0027t understand this function. That means we can add/remove ports to Neutron but the agent won\u0027t be notified?","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"549d5a2ca7992f8b2fb6bb91eb3e2b9b8b41c269","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        # more secure"},{"line_number":551,"context_line":"        self.sg_agent.remove_devices_filter(deleted_ports)"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"    def process_smartnic_ports(self, port_info):"},{"line_number":554,"context_line":"        smartnic_ports \u003d self.plugin_rpc.get_ports_by_vnic_type_and_host("},{"line_number":555,"context_line":"            self.context, \u0027baremetal\u0027, self.conf.host)"},{"line_number":556,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_7c3f62dd","line":553,"in_reply_to":"3f79a3b5_4c2547bf","updated":"2018-11-28 10:39:45.000000000","message":"This function is part of flow to sync smartnic ports between neutron server and neutron agent that runs only in case of agent revived. Because the notification from neutron is loosy.","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8e88061c768090cea49f36c42e6dc7e60f339203","unresolved":false,"context_lines":[{"line_number":552,"context_line":""},{"line_number":553,"context_line":"    def process_smartnic_ports(self, port_info):"},{"line_number":554,"context_line":"        smartnic_ports \u003d self.plugin_rpc.get_ports_by_vnic_type_and_host("},{"line_number":555,"context_line":"            self.context, \u0027baremetal\u0027, self.conf.host)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"        for port in smartnic_ports:"},{"line_number":558,"context_line":"            if port[\u0027id\u0027] not in port_info[\u0027current\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_ec553352","line":555,"range":{"start_line":555,"start_character":26,"end_line":555,"end_character":37},"updated":"2018-11-26 14:20:54.000000000","message":"portbindings.VNIC_BAREMETAL","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"549d5a2ca7992f8b2fb6bb91eb3e2b9b8b41c269","unresolved":false,"context_lines":[{"line_number":552,"context_line":""},{"line_number":553,"context_line":"    def process_smartnic_ports(self, port_info):"},{"line_number":554,"context_line":"        smartnic_ports \u003d self.plugin_rpc.get_ports_by_vnic_type_and_host("},{"line_number":555,"context_line":"            self.context, \u0027baremetal\u0027, self.conf.host)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"        for port in smartnic_ports:"},{"line_number":558,"context_line":"            if port[\u0027id\u0027] not in port_info[\u0027current\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_5fd063c6","line":555,"range":{"start_line":555,"start_character":26,"end_line":555,"end_character":37},"in_reply_to":"3f79a3b5_ec553352","updated":"2018-11-28 10:39:45.000000000","message":"Done","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8e88061c768090cea49f36c42e6dc7e60f339203","unresolved":false,"context_lines":[{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"        # if smartnic port, we should add the port to the int-br here before"},{"line_number":1667,"context_line":"        # calling: vif_by_id \u003d self.int_br.get_vifs_by_ids"},{"line_number":1668,"context_line":"        for details in devices:"},{"line_number":1669,"context_line":"            if \u0027profile\u0027 not in details:"},{"line_number":1670,"context_line":"                continue"},{"line_number":1671,"context_line":"            port_binding \u003d details[\u0027profile\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_2c880b1f","line":1668,"range":{"start_line":1668,"start_character":12,"end_line":1668,"end_character":19},"updated":"2018-11-26 14:20:54.000000000","message":"This is a device, I think we should name \"device\" this variable.","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"549d5a2ca7992f8b2fb6bb91eb3e2b9b8b41c269","unresolved":false,"context_lines":[{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"        # if smartnic port, we should add the port to the int-br here before"},{"line_number":1667,"context_line":"        # calling: vif_by_id \u003d self.int_br.get_vifs_by_ids"},{"line_number":1668,"context_line":"        for details in devices:"},{"line_number":1669,"context_line":"            if \u0027profile\u0027 not in details:"},{"line_number":1670,"context_line":"                continue"},{"line_number":1671,"context_line":"            port_binding \u003d details[\u0027profile\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_7f63df18","line":1668,"range":{"start_line":1668,"start_character":12,"end_line":1668,"end_character":19},"in_reply_to":"3f79a3b5_2c880b1f","updated":"2018-11-28 10:39:45.000000000","message":"Done","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8e88061c768090cea49f36c42e6dc7e60f339203","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"                continue"},{"line_number":1671,"context_line":"            port_binding \u003d details[\u0027profile\u0027]"},{"line_number":1672,"context_line":"            vnic_type \u003d details[\u0027vnic_type\u0027]"},{"line_number":1673,"context_line":"            if vnic_type !\u003d \u0027baremetal\u0027:"},{"line_number":1674,"context_line":"                continue"},{"line_number":1675,"context_line":""},{"line_number":1676,"context_line":"            if (port_binding and \u0027local_link_information\u0027 in port_binding and"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_ac73bb4e","line":1673,"range":{"start_line":1673,"start_character":29,"end_line":1673,"end_character":38},"updated":"2018-11-26 14:20:54.000000000","message":"portbindings.VNIC_BAREMETAL","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"549d5a2ca7992f8b2fb6bb91eb3e2b9b8b41c269","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"                continue"},{"line_number":1671,"context_line":"            port_binding \u003d details[\u0027profile\u0027]"},{"line_number":1672,"context_line":"            vnic_type \u003d details[\u0027vnic_type\u0027]"},{"line_number":1673,"context_line":"            if vnic_type !\u003d \u0027baremetal\u0027:"},{"line_number":1674,"context_line":"                continue"},{"line_number":1675,"context_line":""},{"line_number":1676,"context_line":"            if (port_binding and \u0027local_link_information\u0027 in port_binding and"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_ffda8fe4","line":1673,"range":{"start_line":1673,"start_character":29,"end_line":1673,"end_character":38},"in_reply_to":"3f79a3b5_ac73bb4e","updated":"2018-11-28 10:39:45.000000000","message":"Done","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8e88061c768090cea49f36c42e6dc7e60f339203","unresolved":false,"context_lines":[{"line_number":1677,"context_line":"                    len(port_binding[\u0027local_link_information\u0027]) \u003e 0):"},{"line_number":1678,"context_line":"                iface_name \u003d port_binding["},{"line_number":1679,"context_line":"                    \u0027local_link_information\u0027][0][\u0027port_id\u0027]"},{"line_number":1680,"context_line":"                iface_id \u003d details[\u0027port_id\u0027]"},{"line_number":1681,"context_line":"                mac \u003d details[\u0027mac_address\u0027]"},{"line_number":1682,"context_line":"                vm_uuid \u003d details[\u0027device_id\u0027]"},{"line_number":1683,"context_line":"                vif_type \u003d details[\u0027vif_type\u0027]"},{"line_number":1684,"context_line":"                self.treat_smartnic_port({"},{"line_number":1685,"context_line":"                    \u0027mac\u0027: mac,"},{"line_number":1686,"context_line":"                    \u0027vm_uuid\u0027: vm_uuid,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_acc65b40","line":1683,"range":{"start_line":1680,"start_character":16,"end_line":1683,"end_character":22},"updated":"2018-11-26 14:20:54.000000000","message":"nit: you can assign this variables directly in the following dict, instead of creating temp vars.","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"549d5a2ca7992f8b2fb6bb91eb3e2b9b8b41c269","unresolved":false,"context_lines":[{"line_number":1677,"context_line":"                    len(port_binding[\u0027local_link_information\u0027]) \u003e 0):"},{"line_number":1678,"context_line":"                iface_name \u003d port_binding["},{"line_number":1679,"context_line":"                    \u0027local_link_information\u0027][0][\u0027port_id\u0027]"},{"line_number":1680,"context_line":"                iface_id \u003d details[\u0027port_id\u0027]"},{"line_number":1681,"context_line":"                mac \u003d details[\u0027mac_address\u0027]"},{"line_number":1682,"context_line":"                vm_uuid \u003d details[\u0027device_id\u0027]"},{"line_number":1683,"context_line":"                vif_type \u003d details[\u0027vif_type\u0027]"},{"line_number":1684,"context_line":"                self.treat_smartnic_port({"},{"line_number":1685,"context_line":"                    \u0027mac\u0027: mac,"},{"line_number":1686,"context_line":"                    \u0027vm_uuid\u0027: vm_uuid,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_dfbb1371","line":1683,"range":{"start_line":1680,"start_character":16,"end_line":1683,"end_character":22},"in_reply_to":"3f79a3b5_acc65b40","updated":"2018-11-28 10:39:45.000000000","message":"Done","commit_id":"ad3d85ce290551ef12a854895050e7990481ddf2"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":41,"context_line":"from oslo_utils import netutils"},{"line_number":42,"context_line":"from osprofiler import profiler"},{"line_number":43,"context_line":"import six"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"import os_vif"},{"line_number":46,"context_line":"from os_vif.objects import instance_info as vif_instance_object"},{"line_number":47,"context_line":"from os_vif.objects import network as vif_network_object"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_03a57004","line":44,"updated":"2019-01-23 16:52:43.000000000","message":"no need newline, os-vif is a 3rd party lib same as the above","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":41,"context_line":"from oslo_utils import netutils"},{"line_number":42,"context_line":"from osprofiler import profiler"},{"line_number":43,"context_line":"import six"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"import os_vif"},{"line_number":46,"context_line":"from os_vif.objects import instance_info as vif_instance_object"},{"line_number":47,"context_line":"from os_vif.objects import network as vif_network_object"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_7b1ab87d","line":44,"in_reply_to":"9fdfeff1_03a57004","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        self.quitting_rpc_timeout \u003d agent_conf.quitting_rpc_timeout"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        os_vif.initialize()"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def _parse_bridge_mappings(self, bridge_mappings):"},{"line_number":337,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_e394ec8d","line":334,"range":{"start_line":334,"start_character":8,"end_line":334,"end_character":27},"updated":"2019-01-23 16:52:43.000000000","message":"maybe move above the comment that says:\n# initialization is complete.....\n\nalthough im not sure if we may face any races here","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        self.quitting_rpc_timeout \u003d agent_conf.quitting_rpc_timeout"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        os_vif.initialize()"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def _parse_bridge_mappings(self, bridge_mappings):"},{"line_number":337,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_3609a72b","line":334,"range":{"start_line":334,"start_character":8,"end_line":334,"end_character":27},"in_reply_to":"9fdfeff1_e394ec8d","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        # In case of smartnic port, add smartnic representor port to"},{"line_number":445,"context_line":"        # the integration bridge."},{"line_number":446,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"},{"line_number":447,"context_line":"            get_resource_by_id(resources.PORT, port[\u0027id\u0027])"},{"line_number":448,"context_line":"        if not port_data:"},{"line_number":449,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":450,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_fc4f9531","line":447,"range":{"start_line":446,"start_character":0,"end_line":447,"end_character":58},"updated":"2019-01-23 16:52:43.000000000","message":"do you need to use the resource cache here ?\n\nalso port_update is called from the neutron server as a cast call on any port update. this will trigger an rpc call every time. may this affect performance ?","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"ed5afa18e92ab0be98662a52c42728dafd571ce2","unresolved":false,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        # In case of smartnic port, add smartnic representor port to"},{"line_number":445,"context_line":"        # the integration bridge."},{"line_number":446,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"},{"line_number":447,"context_line":"            get_resource_by_id(resources.PORT, port[\u0027id\u0027])"},{"line_number":448,"context_line":"        if not port_data:"},{"line_number":449,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":450,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_8e6b731c","line":447,"range":{"start_line":446,"start_character":0,"end_line":447,"end_character":58},"in_reply_to":"9fdfeff1_515d55e7","updated":"2019-01-27 11:33:52.000000000","message":"resource cache is designed to request data from the server in case of port data is not in the cache.","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        # In case of smartnic port, add smartnic representor port to"},{"line_number":445,"context_line":"        # the integration bridge."},{"line_number":446,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"},{"line_number":447,"context_line":"            get_resource_by_id(resources.PORT, port[\u0027id\u0027])"},{"line_number":448,"context_line":"        if not port_data:"},{"line_number":449,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":450,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_515d55e7","line":447,"range":{"start_line":446,"start_character":0,"end_line":447,"end_character":58},"in_reply_to":"9fdfeff1_fc4f9531","updated":"2019-01-27 11:21:46.000000000","message":"we have to rpc call the server every time because the only information passed in kwargs is port id.","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":455,"context_line":"                if port_binding[\u0027vnic_type\u0027] \u003d\u003d VNIC_SMARTNIC:"},{"line_number":456,"context_line":"                    should_update \u003d False"},{"line_number":457,"context_line":"                    if port_binding[\u0027host\u0027] !\u003d self.conf.host:"},{"line_number":458,"context_line":"                        continue"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"                    profile \u003d port_binding[\u0027profile\u0027]"},{"line_number":461,"context_line":"                    if (\u0027local_link_information\u0027 in profile and"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_5c84a10c","line":458,"updated":"2019-01-23 16:52:43.000000000","message":"i believe you should add a comment here about the remote-usecase vs port of another smartnic and OVS running locally there.\ni would add some log message as well here so its clear we hit that scenario.","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":455,"context_line":"                if port_binding[\u0027vnic_type\u0027] \u003d\u003d VNIC_SMARTNIC:"},{"line_number":456,"context_line":"                    should_update \u003d False"},{"line_number":457,"context_line":"                    if port_binding[\u0027host\u0027] !\u003d self.conf.host:"},{"line_number":458,"context_line":"                        continue"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"                    profile \u003d port_binding[\u0027profile\u0027]"},{"line_number":461,"context_line":"                    if (\u0027local_link_information\u0027 in profile and"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_91bf3dcf","line":458,"in_reply_to":"9fdfeff1_5c84a10c","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                os_vif.unplug(vif, instance_info)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"            else:"},{"line_number":499,"context_line":"                LOG.warning(\"Unexpected vif_type:%(vif_type)s for baremetal\""},{"line_number":500,"context_line":"                            \" port:%(port_id)s\","},{"line_number":501,"context_line":"                            {\u0027vif_type\u0027: vif_type, \u0027port_id\u0027: iface_id})"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_861c0e6b","line":499,"range":{"start_line":499,"start_character":66,"end_line":499,"end_character":75},"updated":"2019-01-23 16:52:43.000000000","message":"smart-nic port","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                os_vif.unplug(vif, instance_info)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"            else:"},{"line_number":499,"context_line":"                LOG.warning(\"Unexpected vif_type:%(vif_type)s for baremetal\""},{"line_number":500,"context_line":"                            \" port:%(port_id)s\","},{"line_number":501,"context_line":"                            {\u0027vif_type\u0027: vif_type, \u0027port_id\u0027: iface_id})"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_160ee331","line":499,"range":{"start_line":499,"start_character":66,"end_line":499,"end_character":75},"in_reply_to":"9fdfeff1_861c0e6b","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                            {\u0027vif_type\u0027: vif_type, \u0027port_id\u0027: iface_id})"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        except Exception as e:"},{"line_number":504,"context_line":"            LOG.warning(\"Failed to treat smartnic port:%(port_id)s ,\""},{"line_number":505,"context_line":"                        \"error:%(error)s\","},{"line_number":506,"context_line":"                        {\u0027port_id\u0027: iface_id, \u0027error\u0027: e})"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_e90274b4","line":504,"range":{"start_line":504,"start_character":16,"end_line":504,"end_character":23},"updated":"2019-01-23 16:52:43.000000000","message":"error?","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                            {\u0027vif_type\u0027: vif_type, \u0027port_id\u0027: iface_id})"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        except Exception as e:"},{"line_number":504,"context_line":"            LOG.warning(\"Failed to treat smartnic port:%(port_id)s ,\""},{"line_number":505,"context_line":"                        \"error:%(error)s\","},{"line_number":506,"context_line":"                        {\u0027port_id\u0027: iface_id, \u0027error\u0027: e})"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_c931b0a4","line":504,"range":{"start_line":504,"start_character":41,"end_line":504,"end_character":49},"updated":"2019-01-23 16:52:43.000000000","message":"smart-nic","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                            {\u0027vif_type\u0027: vif_type, \u0027port_id\u0027: iface_id})"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        except Exception as e:"},{"line_number":504,"context_line":"            LOG.warning(\"Failed to treat smartnic port:%(port_id)s ,\""},{"line_number":505,"context_line":"                        \"error:%(error)s\","},{"line_number":506,"context_line":"                        {\u0027port_id\u0027: iface_id, \u0027error\u0027: e})"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_76288f85","line":504,"range":{"start_line":504,"start_character":41,"end_line":504,"end_character":49},"in_reply_to":"9fdfeff1_c931b0a4","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                            {\u0027vif_type\u0027: vif_type, \u0027port_id\u0027: iface_id})"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        except Exception as e:"},{"line_number":504,"context_line":"            LOG.warning(\"Failed to treat smartnic port:%(port_id)s ,\""},{"line_number":505,"context_line":"                        \"error:%(error)s\","},{"line_number":506,"context_line":"                        {\u0027port_id\u0027: iface_id, \u0027error\u0027: e})"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_962bb380","line":504,"range":{"start_line":504,"start_character":16,"end_line":504,"end_character":23},"in_reply_to":"9fdfeff1_e90274b4","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        smartnic_ports \u003d self.plugin_rpc.get_ports_by_vnic_type_and_host("},{"line_number":569,"context_line":"            self.context, VNIC_SMARTNIC, self.conf.host)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        for port in smartnic_ports:"},{"line_number":572,"context_line":"            if port[\u0027id\u0027] not in port_info[\u0027current\u0027]:"},{"line_number":573,"context_line":"                port_info[\u0027added\u0027].add(port[\u0027id\u0027])"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        all_ports_ids \u003d [port[\u0027id\u0027] for port in smartnic_ports]"},{"line_number":576,"context_line":"        for port in port_info[\u0027current\u0027]:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_e99ef461","line":573,"range":{"start_line":571,"start_character":8,"end_line":573,"end_character":50},"updated":"2019-01-23 16:52:43.000000000","message":"port_info[\u0027added\u0027] and smartnic_ports are sets\n\nyou can: port_info[\u0027added\u0027] |\u003d smartnic_ports","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        smartnic_ports \u003d self.plugin_rpc.get_ports_by_vnic_type_and_host("},{"line_number":569,"context_line":"            self.context, VNIC_SMARTNIC, self.conf.host)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"        for port in smartnic_ports:"},{"line_number":572,"context_line":"            if port[\u0027id\u0027] not in port_info[\u0027current\u0027]:"},{"line_number":573,"context_line":"                port_info[\u0027added\u0027].add(port[\u0027id\u0027])"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        all_ports_ids \u003d [port[\u0027id\u0027] for port in smartnic_ports]"},{"line_number":576,"context_line":"        for port in port_info[\u0027current\u0027]:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_b69ef760","line":573,"range":{"start_line":571,"start_character":8,"end_line":573,"end_character":50},"in_reply_to":"9fdfeff1_e99ef461","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":572,"context_line":"            if port[\u0027id\u0027] not in port_info[\u0027current\u0027]:"},{"line_number":573,"context_line":"                port_info[\u0027added\u0027].add(port[\u0027id\u0027])"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        all_ports_ids \u003d [port[\u0027id\u0027] for port in smartnic_ports]"},{"line_number":576,"context_line":"        for port in port_info[\u0027current\u0027]:"},{"line_number":577,"context_line":"            if port not in all_ports_ids:"},{"line_number":578,"context_line":"                port_info[\u0027removed\u0027].add(port)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_49c70047","line":575,"range":{"start_line":575,"start_character":8,"end_line":575,"end_character":21},"updated":"2019-01-23 16:52:43.000000000","message":"nit: smartnic_port_ids","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":572,"context_line":"            if port[\u0027id\u0027] not in port_info[\u0027current\u0027]:"},{"line_number":573,"context_line":"                port_info[\u0027added\u0027].add(port[\u0027id\u0027])"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        all_ports_ids \u003d [port[\u0027id\u0027] for port in smartnic_ports]"},{"line_number":576,"context_line":"        for port in port_info[\u0027current\u0027]:"},{"line_number":577,"context_line":"            if port not in all_ports_ids:"},{"line_number":578,"context_line":"                port_info[\u0027removed\u0027].add(port)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_169343a5","line":575,"range":{"start_line":575,"start_character":8,"end_line":575,"end_character":21},"in_reply_to":"9fdfeff1_49c70047","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":572,"context_line":"            if port[\u0027id\u0027] not in port_info[\u0027current\u0027]:"},{"line_number":573,"context_line":"                port_info[\u0027added\u0027].add(port[\u0027id\u0027])"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        all_ports_ids \u003d [port[\u0027id\u0027] for port in smartnic_ports]"},{"line_number":576,"context_line":"        for port in port_info[\u0027current\u0027]:"},{"line_number":577,"context_line":"            if port not in all_ports_ids:"},{"line_number":578,"context_line":"                port_info[\u0027removed\u0027].add(port)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    def process_deactivated_bindings(self, port_info):"},{"line_number":581,"context_line":"        # don\u0027t try to deactivate bindings for removed ports since they are"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_29ccfc68","line":578,"range":{"start_line":575,"start_character":7,"end_line":578,"end_character":46},"updated":"2019-01-23 16:52:43.000000000","message":"port_info[\u0027removed\u0027] |\u003d smartnic_port_ids - port_info[current]","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":572,"context_line":"            if port[\u0027id\u0027] not in port_info[\u0027current\u0027]:"},{"line_number":573,"context_line":"                port_info[\u0027added\u0027].add(port[\u0027id\u0027])"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        all_ports_ids \u003d [port[\u0027id\u0027] for port in smartnic_ports]"},{"line_number":576,"context_line":"        for port in port_info[\u0027current\u0027]:"},{"line_number":577,"context_line":"            if port not in all_ports_ids:"},{"line_number":578,"context_line":"                port_info[\u0027removed\u0027].add(port)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    def process_deactivated_bindings(self, port_info):"},{"line_number":581,"context_line":"        # don\u0027t try to deactivate bindings for removed ports since they are"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_b677d73a","line":578,"range":{"start_line":575,"start_character":7,"end_line":578,"end_character":46},"in_reply_to":"9fdfeff1_29ccfc68","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":2292,"context_line":"                    self.process_activated_bindings(port_info,"},{"line_number":2293,"context_line":"                                                    activated_bindings_copy)"},{"line_number":2294,"context_line":"                    updated_smartnic_ports_copy \u003d self.updated_smartnic_ports"},{"line_number":2295,"context_line":"                    self.updated_smartnic_ports \u003d list()"},{"line_number":2296,"context_line":"                    for port_data in updated_smartnic_ports_copy:"},{"line_number":2297,"context_line":"                        self.treat_smartnic_port(port_data)"},{"line_number":2298,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_695c447e","line":2295,"range":{"start_line":2295,"start_character":50,"end_line":2295,"end_character":56},"updated":"2019-01-23 16:52:43.000000000","message":"set() ?","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":2292,"context_line":"                    self.process_activated_bindings(port_info,"},{"line_number":2293,"context_line":"                                                    activated_bindings_copy)"},{"line_number":2294,"context_line":"                    updated_smartnic_ports_copy \u003d self.updated_smartnic_ports"},{"line_number":2295,"context_line":"                    self.updated_smartnic_ports \u003d list()"},{"line_number":2296,"context_line":"                    for port_data in updated_smartnic_ports_copy:"},{"line_number":2297,"context_line":"                        self.treat_smartnic_port(port_data)"},{"line_number":2298,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_b63597dc","line":2295,"range":{"start_line":2295,"start_character":50,"end_line":2295,"end_character":56},"in_reply_to":"9fdfeff1_695c447e","updated":"2019-01-27 11:21:46.000000000","message":"the order is important in this case","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":2350,"context_line":"                    LOG.exception(\"Error while processing VIF ports\")"},{"line_number":2351,"context_line":"                    # Put the ports back in self.updated_port"},{"line_number":2352,"context_line":"                    self.updated_ports |\u003d updated_ports_copy"},{"line_number":2353,"context_line":"                    self.activated_bindings |\u003d activated_bindings_copy"},{"line_number":2354,"context_line":"                    sync \u003d True"},{"line_number":2355,"context_line":"            port_stats \u003d self.get_port_stats(port_info, ancillary_port_info)"},{"line_number":2356,"context_line":"            self.loop_count_and_wait(start, port_stats)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_29287ce0","line":2353,"updated":"2019-01-23 16:52:43.000000000","message":"need to add:\nself.updated_smartnic_ports |\u003d updated_smartnic_ports_copy?","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":2350,"context_line":"                    LOG.exception(\"Error while processing VIF ports\")"},{"line_number":2351,"context_line":"                    # Put the ports back in self.updated_port"},{"line_number":2352,"context_line":"                    self.updated_ports |\u003d updated_ports_copy"},{"line_number":2353,"context_line":"                    self.activated_bindings |\u003d activated_bindings_copy"},{"line_number":2354,"context_line":"                    sync \u003d True"},{"line_number":2355,"context_line":"            port_stats \u003d self.get_port_stats(port_info, ancillary_port_info)"},{"line_number":2356,"context_line":"            self.loop_count_and_wait(start, port_stats)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_56a8ebd9","line":2353,"in_reply_to":"9fdfeff1_29287ce0","updated":"2019-01-27 11:21:46.000000000","message":"No need because when sync\u003dtrue then SmartNIC ports will be synced.","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"5d2f948f62e69cb697b06cd3d42e08ef3d759d68","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        # Stores the port IDs whose binding has been activated"},{"line_number":188,"context_line":"        self.activated_bindings \u003d set()"},{"line_number":189,"context_line":"        # Stores smartnic ports update/remove"},{"line_number":190,"context_line":"        self.updated_smartnic_ports \u003d list()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        self.network_ports \u003d collections.defaultdict(set)"},{"line_number":193,"context_line":"        # keeps association between ports and ofports to detect ofport change"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_9b450518","line":190,"updated":"2019-02-11 11:00:54.000000000","message":"should we use set() here and maybe separate update/remove ?","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"c81c3be9be8ebb96b8dddc68a0e86f6c50af4987","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        # Stores the port IDs whose binding has been activated"},{"line_number":188,"context_line":"        self.activated_bindings \u003d set()"},{"line_number":189,"context_line":"        # Stores smartnic ports update/remove"},{"line_number":190,"context_line":"        self.updated_smartnic_ports \u003d list()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        self.network_ports \u003d collections.defaultdict(set)"},{"line_number":193,"context_line":"        # keeps association between ports and ofports to detect ofport change"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_5b8d5dd1","line":190,"in_reply_to":"9fdfeff1_9b450518","updated":"2019-02-11 11:35:05.000000000","message":"We\u0027re using list() because the order is important in case of Smart NIC.\nAlso Neutron server is sending Notification for the agent as  the following:\n1- port remove (vif_type\u003dunbound)\n2- port add (vif_type\u003dovs)\n\nSo it\u0027s more convenient to process port updates in the same order which Neutron server sends. (ordered, one list for the updates)","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # In case of smart-nic port, add smart-nic representor port to"},{"line_number":442,"context_line":"        # the integration bridge."},{"line_number":443,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"},{"line_number":444,"context_line":"            get_resource_by_id(resources.PORT, port[\u0027id\u0027])"},{"line_number":445,"context_line":"        if not port_data:"},{"line_number":446,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_79f1f294","line":443,"range":{"start_line":443,"start_character":59,"end_line":443,"end_character":60},"updated":"2019-02-14 19:36:33.000000000","message":"super nit: backslashes are discouraged in the style guide","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # In case of smart-nic port, add smart-nic representor port to"},{"line_number":442,"context_line":"        # the integration bridge."},{"line_number":443,"context_line":"        port_data \u003d self.plugin_rpc.remote_resource_cache. \\"},{"line_number":444,"context_line":"            get_resource_by_id(resources.PORT, port[\u0027id\u0027])"},{"line_number":445,"context_line":"        if not port_data:"},{"line_number":446,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_485435fe","line":443,"range":{"start_line":443,"start_character":59,"end_line":443,"end_character":60},"in_reply_to":"9fdfeff1_79f1f294","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":492,"context_line":"                interface_id\u003diface_id)"},{"line_number":493,"context_line":"            vif \u003d vif_obj.VIFOpenVSwitch("},{"line_number":494,"context_line":"                vif_name\u003drep_port, plugin\u003d\u0027ovs\u0027, port_profile\u003dport_profile,"},{"line_number":495,"context_line":"                network\u003dnetwork, address\u003dstr(mac))"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"            if vif_type \u003d\u003d portbindings.VIF_TYPE_OVS:"},{"line_number":498,"context_line":"                os_vif.plug(vif, instance_info)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_b9051a48","line":495,"updated":"2019-02-14 19:36:33.000000000","message":"Will any of the above throw an exception or is it just the plug calls below?  Just trying to reduce what\u0027s under the try.","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":492,"context_line":"                interface_id\u003diface_id)"},{"line_number":493,"context_line":"            vif \u003d vif_obj.VIFOpenVSwitch("},{"line_number":494,"context_line":"                vif_name\u003drep_port, plugin\u003d\u0027ovs\u0027, port_profile\u003dport_profile,"},{"line_number":495,"context_line":"                network\u003dnetwork, address\u003dstr(mac))"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"            if vif_type \u003d\u003d portbindings.VIF_TYPE_OVS:"},{"line_number":498,"context_line":"                os_vif.plug(vif, instance_info)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_68a57902","line":495,"in_reply_to":"9fdfeff1_b9051a48","updated":"2019-02-17 14:31:58.000000000","message":"We are expecting exceptions from the os_vif calls only.","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                             \u0027port_id\u0027: iface_id})"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        except Exception as e:"},{"line_number":511,"context_line":"            LOG.error(\"Failed to treat %(vnic_type)s port:%(port_id)s ,\""},{"line_number":512,"context_line":"                      \"error:%(error)s\","},{"line_number":513,"context_line":"                      {\u0027vnic_type\u0027: portbindings.VNIC_SMARTNIC,"},{"line_number":514,"context_line":"                       \u0027port_id\u0027: iface_id,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_7946d2c2","line":511,"range":{"start_line":511,"start_character":69,"end_line":511,"end_character":71},"updated":"2019-02-14 19:36:33.000000000","message":"missing trailing space, will be \u0027...ID ,error:...\u0027","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                             \u0027port_id\u0027: iface_id})"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        except Exception as e:"},{"line_number":511,"context_line":"            LOG.error(\"Failed to treat %(vnic_type)s port:%(port_id)s ,\""},{"line_number":512,"context_line":"                      \"error:%(error)s\","},{"line_number":513,"context_line":"                      {\u0027vnic_type\u0027: portbindings.VNIC_SMARTNIC,"},{"line_number":514,"context_line":"                       \u0027port_id\u0027: iface_id,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_283d31ba","line":511,"range":{"start_line":511,"start_character":69,"end_line":511,"end_character":71},"in_reply_to":"9fdfeff1_7946d2c2","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":1717,"context_line":"        # calling: vif_by_id \u003d self.int_br.get_vifs_by_ids"},{"line_number":1718,"context_line":"        for device in devices:"},{"line_number":1719,"context_line":"            if \u0027profile\u0027 not in device:"},{"line_number":1720,"context_line":"                continue"},{"line_number":1721,"context_line":"            vnic_type \u003d device[\u0027vnic_type\u0027]"},{"line_number":1722,"context_line":"            if vnic_type !\u003d portbindings.VNIC_SMARTNIC:"},{"line_number":1723,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_39084a90","line":1720,"updated":"2019-02-14 19:36:33.000000000","message":"Is this check required?  Up around L465 there is no such check, assuming since it\u0027s a smartnic port and it must be present?","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":1717,"context_line":"        # calling: vif_by_id \u003d self.int_br.get_vifs_by_ids"},{"line_number":1718,"context_line":"        for device in devices:"},{"line_number":1719,"context_line":"            if \u0027profile\u0027 not in device:"},{"line_number":1720,"context_line":"                continue"},{"line_number":1721,"context_line":"            vnic_type \u003d device[\u0027vnic_type\u0027]"},{"line_number":1722,"context_line":"            if vnic_type !\u003d portbindings.VNIC_SMARTNIC:"},{"line_number":1723,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_e842c93a","line":1720,"in_reply_to":"9fdfeff1_39084a90","updated":"2019-02-17 14:31:58.000000000","message":"you are right, Smart NIC port must have a profile that has local link connection info, but some unit tests will fail because the mocked device wouldn\u0027t have full port details.","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"645023a92b193251a675d79bd27d1b104458e5c3","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # In case of smart-nic port, add smart-nic representor port to"},{"line_number":442,"context_line":"        # the integration bridge."},{"line_number":443,"context_line":"        port_data \u003d (self.plugin_rpc.remote_resource_cache"},{"line_number":444,"context_line":"                     .get_resource_by_id(resources.PORT, port[\u0027id\u0027]))"},{"line_number":445,"context_line":"        if not port_data:"},{"line_number":446,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_b767faea","line":443,"updated":"2019-02-20 16:32:40.000000000","message":"Do we have to make an RPC call in here? ovs_neutron_agent always seems to bend my brain, but it seems like this could be handled elsewhere without since I *think* we end up making an RPC call to pull this information anyway here https://github.com/openstack/neutron/blob/2451b8e34d76bc958b21d4bf94ed340f12ae9895/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L1622. Just a thought......","commit_id":"78a6d00d6d92649e39d5390e52fe574e2d9022bf"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"09b0164bfffebea062c07a3d0e144e4e1a913a6b","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # In case of smart-nic port, add smart-nic representor port to"},{"line_number":442,"context_line":"        # the integration bridge."},{"line_number":443,"context_line":"        port_data \u003d (self.plugin_rpc.remote_resource_cache"},{"line_number":444,"context_line":"                     .get_resource_by_id(resources.PORT, port[\u0027id\u0027]))"},{"line_number":445,"context_line":"        if not port_data:"},{"line_number":446,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_639d2e65","line":443,"in_reply_to":"9fdfeff1_b767faea","updated":"2019-02-22 11:13:24.000000000","message":"So I think for Smart-nic there won\u0027t be lot of calls of port update, when it run in the hypervisor you are right.\nI think we should add a config option indicating if we are in ovs neutron agent for bare metal or in the regular use-case on  the hypervisor.  And only for the bare metal case we will do the rpc call. what do you think? So there will be not performance impact when it run on compute node.","commit_id":"78a6d00d6d92649e39d5390e52fe574e2d9022bf"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"705d59af9646b2c64d4952887edcf3f7b99c1c63","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        self.catch_sigterm \u003d False"},{"line_number":324,"context_line":"        self.catch_sighup \u003d False"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        os_vif.initialize()"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        # The initialization is complete; we can start receiving messages"},{"line_number":329,"context_line":"        self.connection.consume_in_threads()"}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_17954fe4","line":326,"range":{"start_line":326,"start_character":7,"end_line":326,"end_character":27},"updated":"2019-02-25 19:17:43.000000000","message":"All the os_vif imports and initialize can be done according to config option","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"61bc916ebe200229356b265bde09ae70e23d3853","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        self.catch_sigterm \u003d False"},{"line_number":324,"context_line":"        self.catch_sighup \u003d False"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        os_vif.initialize()"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        # The initialization is complete; we can start receiving messages"},{"line_number":329,"context_line":"        self.connection.consume_in_threads()"}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_7394e137","line":326,"range":{"start_line":326,"start_character":7,"end_line":326,"end_character":27},"in_reply_to":"9fdfeff1_17954fe4","updated":"2019-02-26 10:05:52.000000000","message":"Done","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"c0d23ade85e744b820382360b88578eb7ff3c7ff","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        self.catch_sigterm \u003d False"},{"line_number":324,"context_line":"        self.catch_sighup \u003d False"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        os_vif.initialize()"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        # The initialization is complete; we can start receiving messages"},{"line_number":329,"context_line":"        self.connection.consume_in_threads()"}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_a9a41a4c","line":326,"range":{"start_line":326,"start_character":7,"end_line":326,"end_character":27},"in_reply_to":"9fdfeff1_7394e137","updated":"2019-02-26 11:39:09.000000000","message":"conditional initialize and import are breaking the unit testing, will fix the issue and push soon.","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"65c3d57a4e14ca59e68aa59ba6cc31d76ec1979d","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        self.catch_sigterm \u003d False"},{"line_number":324,"context_line":"        self.catch_sighup \u003d False"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        os_vif.initialize()"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        # The initialization is complete; we can start receiving messages"},{"line_number":329,"context_line":"        self.connection.consume_in_threads()"}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_5fd8bc51","line":326,"range":{"start_line":326,"start_character":7,"end_line":326,"end_character":27},"in_reply_to":"9fdfeff1_a9a41a4c","updated":"2019-02-26 12:53:04.000000000","message":"We added conditional initialize for the os_vif but I think it\u0027s complicated to do a conditional import.","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a7d15534203ad6303840af57453fbbaeb6858d66","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            return"},{"line_number":451,"context_line":"        if \u0027bindings\u0027 in port_data:"},{"line_number":452,"context_line":"            for port_binding in port_data[\u0027bindings\u0027]:"},{"line_number":453,"context_line":"                if port_binding[\u0027vnic_type\u0027] \u003d\u003d portbindings.VNIC_SMARTNIC:"},{"line_number":454,"context_line":"                    if port_binding[\u0027host\u0027] !\u003d self.conf.host:"},{"line_number":455,"context_line":"                        # The port doesn\u0027t belong to this Smart NIC,"},{"line_number":456,"context_line":"                        # the reason for this could be multi Smart NIC"}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_32e2e1d6","line":453,"updated":"2019-02-25 20:04:35.000000000","message":"So there can be a mix of types, right?  But you have to have the conf set to True in order to process them?  I\u0027m just thinking of if you need the conf setting at all since it just introduces dependencies on other things, like tripleo, etc.","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"61bc916ebe200229356b265bde09ae70e23d3853","unresolved":false,"context_lines":[{"line_number":450,"context_line":"            return"},{"line_number":451,"context_line":"        if \u0027bindings\u0027 in port_data:"},{"line_number":452,"context_line":"            for port_binding in port_data[\u0027bindings\u0027]:"},{"line_number":453,"context_line":"                if port_binding[\u0027vnic_type\u0027] \u003d\u003d portbindings.VNIC_SMARTNIC:"},{"line_number":454,"context_line":"                    if port_binding[\u0027host\u0027] !\u003d self.conf.host:"},{"line_number":455,"context_line":"                        # The port doesn\u0027t belong to this Smart NIC,"},{"line_number":456,"context_line":"                        # the reason for this could be multi Smart NIC"}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_73306157","line":453,"in_reply_to":"9fdfeff1_32e2e1d6","updated":"2019-02-26 10:05:52.000000000","message":"We introduces the conf option to prevent unnecessary RPC calls that can flood Neutron server.\nsee comments:\nhttps://review.openstack.org/#/c/586252/25/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py@443","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a7d15534203ad6303840af57453fbbaeb6858d66","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                        # the reason for this could be multi Smart NIC"},{"line_number":457,"context_line":"                        # setup or in case of super agent that is not"},{"line_number":458,"context_line":"                        # implemented yet."},{"line_number":459,"context_line":"                        LOG.info(\"Smart NIC port %(port_id)s doesn\u0027t belong \""},{"line_number":460,"context_line":"                                 \"to this host %(host)s\","},{"line_number":461,"context_line":"                                 {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":462,"context_line":"                                  \u0027host\u0027: self.conf.host})"}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_72b86910","line":459,"range":{"start_line":459,"start_character":61,"end_line":459,"end_character":68},"updated":"2019-02-25 20:04:35.000000000","message":"super nit: s/does not","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"61bc916ebe200229356b265bde09ae70e23d3853","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                        # the reason for this could be multi Smart NIC"},{"line_number":457,"context_line":"                        # setup or in case of super agent that is not"},{"line_number":458,"context_line":"                        # implemented yet."},{"line_number":459,"context_line":"                        LOG.info(\"Smart NIC port %(port_id)s doesn\u0027t belong \""},{"line_number":460,"context_line":"                                 \"to this host %(host)s\","},{"line_number":461,"context_line":"                                 {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":462,"context_line":"                                  \u0027host\u0027: self.conf.host})"}],"source_content_type":"text/x-python","patch_set":27,"id":"9fdfeff1_502e7343","line":459,"range":{"start_line":459,"start_character":61,"end_line":459,"end_character":68},"in_reply_to":"9fdfeff1_72b86910","updated":"2019-02-26 10:05:52.000000000","message":"Done","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"29611d15e8c0abf47fbb7f4b28d45076d94c891b","unresolved":false,"context_lines":[{"line_number":455,"context_line":"                    if port_binding[\u0027host\u0027] !\u003d self.conf.host:"},{"line_number":456,"context_line":"                        # The port doesn\u0027t belong to this Smart NIC,"},{"line_number":457,"context_line":"                        # the reason for this could be multi Smart NIC"},{"line_number":458,"context_line":"                        # setup or in case of super agent that is not"},{"line_number":459,"context_line":"                        # implemented yet."},{"line_number":460,"context_line":"                        LOG.info(\"Smart NIC port %(port_id)s does not belong \""},{"line_number":461,"context_line":"                                 \"to this host %(host)s\","},{"line_number":462,"context_line":"                                 {\u0027port_id\u0027: port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"9fdfeff1_599cdc5a","line":459,"range":{"start_line":458,"start_character":31,"end_line":459,"end_character":42},"updated":"2019-03-05 13:13:14.000000000","message":"Nit: super agent Not really fully defined yet right ? if so id loose that.","commit_id":"e7b25b5aabaecf09cdc973e0e5eb6af3e4c7cd71"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"0dc721d5e08ab33071c73cf011dd5820be5a30d0","unresolved":false,"context_lines":[{"line_number":455,"context_line":"                    if port_binding[\u0027host\u0027] !\u003d self.conf.host:"},{"line_number":456,"context_line":"                        # The port doesn\u0027t belong to this Smart NIC,"},{"line_number":457,"context_line":"                        # the reason for this could be multi Smart NIC"},{"line_number":458,"context_line":"                        # setup or in case of super agent that is not"},{"line_number":459,"context_line":"                        # implemented yet."},{"line_number":460,"context_line":"                        LOG.info(\"Smart NIC port %(port_id)s does not belong \""},{"line_number":461,"context_line":"                                 \"to this host %(host)s\","},{"line_number":462,"context_line":"                                 {\u0027port_id\u0027: port[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"9fdfeff1_571c8e76","line":459,"range":{"start_line":458,"start_character":31,"end_line":459,"end_character":42},"in_reply_to":"9fdfeff1_599cdc5a","updated":"2019-03-05 20:14:02.000000000","message":"Done","commit_id":"e7b25b5aabaecf09cdc973e0e5eb6af3e4c7cd71"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"29611d15e8c0abf47fbb7f4b28d45076d94c891b","unresolved":false,"context_lines":[{"line_number":464,"context_line":"                        continue"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"                    profile \u003d port_binding[\u0027profile\u0027]"},{"line_number":467,"context_line":"                    if (\u0027local_link_information\u0027 in profile and"},{"line_number":468,"context_line":"                            len(profile[\u0027local_link_information\u0027]) \u003e 0):"},{"line_number":469,"context_line":"                        iface_name \u003d profile["},{"line_number":470,"context_line":"                            \u0027local_link_information\u0027][0][\u0027port_id\u0027]"},{"line_number":471,"context_line":"                        self.updated_smartnic_ports.append({"},{"line_number":472,"context_line":"                            \u0027mac\u0027: port_data[\u0027mac_address\u0027],"},{"line_number":473,"context_line":"                            \u0027vm_uuid\u0027: port_data[\u0027device_id\u0027],"},{"line_number":474,"context_line":"                            \u0027iface_name\u0027: iface_name,"},{"line_number":475,"context_line":"                            \u0027iface_id\u0027: port_binding[\u0027port_id\u0027],"},{"line_number":476,"context_line":"                            \u0027vif_type\u0027: port_binding[\u0027vif_type\u0027]"},{"line_number":477,"context_line":"                        })"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def treat_smartnic_port(self, smartnic_port_data):"},{"line_number":480,"context_line":"        mac \u003d smartnic_port_data[\u0027mac\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"9fdfeff1_2b741d36","line":477,"range":{"start_line":467,"start_character":11,"end_line":477,"end_character":26},"updated":"2019-03-05 13:13:14.000000000","message":"duplicate logic with process_smartnic_ports(),\ncan we have it as a helper method  ?","commit_id":"e7b25b5aabaecf09cdc973e0e5eb6af3e4c7cd71"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"0dc721d5e08ab33071c73cf011dd5820be5a30d0","unresolved":false,"context_lines":[{"line_number":464,"context_line":"                        continue"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"                    profile \u003d port_binding[\u0027profile\u0027]"},{"line_number":467,"context_line":"                    if (\u0027local_link_information\u0027 in profile and"},{"line_number":468,"context_line":"                            len(profile[\u0027local_link_information\u0027]) \u003e 0):"},{"line_number":469,"context_line":"                        iface_name \u003d profile["},{"line_number":470,"context_line":"                            \u0027local_link_information\u0027][0][\u0027port_id\u0027]"},{"line_number":471,"context_line":"                        self.updated_smartnic_ports.append({"},{"line_number":472,"context_line":"                            \u0027mac\u0027: port_data[\u0027mac_address\u0027],"},{"line_number":473,"context_line":"                            \u0027vm_uuid\u0027: port_data[\u0027device_id\u0027],"},{"line_number":474,"context_line":"                            \u0027iface_name\u0027: iface_name,"},{"line_number":475,"context_line":"                            \u0027iface_id\u0027: port_binding[\u0027port_id\u0027],"},{"line_number":476,"context_line":"                            \u0027vif_type\u0027: port_binding[\u0027vif_type\u0027]"},{"line_number":477,"context_line":"                        })"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def treat_smartnic_port(self, smartnic_port_data):"},{"line_number":480,"context_line":"        mac \u003d smartnic_port_data[\u0027mac\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"9fdfeff1_52781c8e","line":477,"range":{"start_line":467,"start_character":11,"end_line":477,"end_character":26},"in_reply_to":"9fdfeff1_2b741d36","updated":"2019-03-05 20:14:02.000000000","message":"you are right. Done.","commit_id":"e7b25b5aabaecf09cdc973e0e5eb6af3e4c7cd71"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"8cc397473f592a5f2cea8b05a19a74cbc921b8eb","unresolved":false,"context_lines":[{"line_number":512,"context_line":"            vif_name\u003drep_port, plugin\u003d\u0027ovs\u0027, port_profile\u003dport_profile,"},{"line_number":513,"context_line":"            network\u003dnetwork, address\u003dstr(mac))"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def _add_port_to_updated_smartnic_ports(self, port_data, port_binding):"},{"line_number":516,"context_line":"        profile \u003d port_binding[\u0027profile\u0027]"},{"line_number":517,"context_line":"        llc \u003d profile.get(\u0027local_link_information\u0027, [])"},{"line_number":518,"context_line":"        if llc:"},{"line_number":519,"context_line":"            iface_name \u003d llc[0][\u0027port_id\u0027]"},{"line_number":520,"context_line":"            self.updated_smartnic_ports.append({"},{"line_number":521,"context_line":"                \u0027mac\u0027: port_data[\u0027mac_address\u0027],"},{"line_number":522,"context_line":"                \u0027vm_uuid\u0027: port_data[\u0027device_id\u0027],"},{"line_number":523,"context_line":"                \u0027iface_name\u0027: iface_name,"},{"line_number":524,"context_line":"                \u0027iface_id\u0027: port_data[\u0027id\u0027],"},{"line_number":525,"context_line":"                \u0027vif_type\u0027: port_binding[\u0027vif_type\u0027]})"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def port_delete(self, context, **kwargs):"},{"line_number":528,"context_line":"        port_id \u003d kwargs.get(\u0027port_id\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"5fc1f717_2f85c15a","line":525,"range":{"start_line":515,"start_character":4,"end_line":525,"end_character":54},"updated":"2019-03-10 16:52:38.000000000","message":"Thank you for this.\n\nA unit test for the added method would be appreciated ! :)","commit_id":"a113270e33432d24f5cc4713c52b7e2c8c94597a"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"c0b102d601dcfaf43c272a165f8186cb83fd4e92","unresolved":false,"context_lines":[{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def _add_port_to_updated_smartnic_ports(self, port_data, port_binding):"},{"line_number":520,"context_line":"        profile \u003d port_binding[\u0027profile\u0027]"},{"line_number":521,"context_line":"        llc \u003d profile.get(\u0027local_link_information\u0027, [])"},{"line_number":522,"context_line":"        if llc:"},{"line_number":523,"context_line":"            iface_name \u003d llc[0][\u0027port_id\u0027]"},{"line_number":524,"context_line":"            self.updated_smartnic_ports.append({"}],"source_content_type":"text/x-python","patch_set":39,"id":"dfbec78f_48a3b250","line":521,"range":{"start_line":521,"start_character":8,"end_line":521,"end_character":11},"updated":"2019-05-03 02:37:16.000000000","message":"nit: In some countries \u0027llc\u0027 has a strong association with a Limited Liability Corporation.  In this case I also don\u0027t know what the \u0027c\u0027 stands for... context?  Perhaps \u0027local_link\u0027 would be a better variable name.","commit_id":"d416a02e7d6843dbe7d97526ab02455d20854a0b"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"b661061639bcc19624590d2f0c33d341cfd19c4f","unresolved":false,"context_lines":[{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def _add_port_to_updated_smartnic_ports(self, port_data, port_binding):"},{"line_number":520,"context_line":"        profile \u003d port_binding[\u0027profile\u0027]"},{"line_number":521,"context_line":"        llc \u003d profile.get(\u0027local_link_information\u0027, [])"},{"line_number":522,"context_line":"        if llc:"},{"line_number":523,"context_line":"            iface_name \u003d llc[0][\u0027port_id\u0027]"},{"line_number":524,"context_line":"            self.updated_smartnic_ports.append({"}],"source_content_type":"text/x-python","patch_set":39,"id":"dfbec78f_3f59bb59","line":521,"range":{"start_line":521,"start_character":8,"end_line":521,"end_character":11},"in_reply_to":"dfbec78f_48a3b250","updated":"2019-05-05 13:44:51.000000000","message":"Done","commit_id":"d416a02e7d6843dbe7d97526ab02455d20854a0b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c72383e82cd574f77ef0bbfb3b5cdc502b46282f","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                               \u0027ovs_capabilities\u0027: self.ovs.capabilities,"},{"line_number":310,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":311,"context_line":"                               ovs_conf.vhostuser_socket_dir,"},{"line_number":312,"context_line":"                               portbindings.OVS_HYBRID_PLUG: hybrid_plug},"},{"line_number":313,"context_line":"            \u0027resource_versions\u0027: resources.LOCAL_RESOURCE_VERSIONS,"},{"line_number":314,"context_line":"            \u0027agent_type\u0027: agent_conf.agent_type,"},{"line_number":315,"context_line":"            \u0027start_flag\u0027: True}"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_59bce468","line":312,"updated":"2019-05-17 13:50:07.000000000","message":"You should probably add info about this new config option to agent state as it will be necessary to make decision if port can be bound to host or not","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"b9aa29b9363f131ac324f136f995c97ebc443acd","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                               \u0027ovs_capabilities\u0027: self.ovs.capabilities,"},{"line_number":310,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":311,"context_line":"                               ovs_conf.vhostuser_socket_dir,"},{"line_number":312,"context_line":"                               portbindings.OVS_HYBRID_PLUG: hybrid_plug},"},{"line_number":313,"context_line":"            \u0027resource_versions\u0027: resources.LOCAL_RESOURCE_VERSIONS,"},{"line_number":314,"context_line":"            \u0027agent_type\u0027: agent_conf.agent_type,"},{"line_number":315,"context_line":"            \u0027start_flag\u0027: True}"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_3a6a06b3","line":312,"in_reply_to":"bfb3d3c7_223c2992","updated":"2019-05-21 20:01:34.000000000","message":"ok, will add baremetal_smartnic here and check it in AgentMechanismDriverBase.bind_port()","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9b14b4724df1a9c9520e0eb702d5b0f5d119541a","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                               \u0027ovs_capabilities\u0027: self.ovs.capabilities,"},{"line_number":310,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":311,"context_line":"                               ovs_conf.vhostuser_socket_dir,"},{"line_number":312,"context_line":"                               portbindings.OVS_HYBRID_PLUG: hybrid_plug},"},{"line_number":313,"context_line":"            \u0027resource_versions\u0027: resources.LOCAL_RESOURCE_VERSIONS,"},{"line_number":314,"context_line":"            \u0027agent_type\u0027: agent_conf.agent_type,"},{"line_number":315,"context_line":"            \u0027start_flag\u0027: True}"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_223c2992","line":312,"in_reply_to":"bfb3d3c7_27d8bb51","updated":"2019-05-21 12:22:40.000000000","message":"But mech driver should always have new vif type in supported extensions. This list shouldn\u0027t be dynamic.\nAnd mech_driver have to know about config of specific agent on given host to check if port can be bound there or not.","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"444537020fd9146bace3f3beff043d828463034c","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                               \u0027ovs_capabilities\u0027: self.ovs.capabilities,"},{"line_number":310,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":311,"context_line":"                               ovs_conf.vhostuser_socket_dir,"},{"line_number":312,"context_line":"                               portbindings.OVS_HYBRID_PLUG: hybrid_plug},"},{"line_number":313,"context_line":"            \u0027resource_versions\u0027: resources.LOCAL_RESOURCE_VERSIONS,"},{"line_number":314,"context_line":"            \u0027agent_type\u0027: agent_conf.agent_type,"},{"line_number":315,"context_line":"            \u0027start_flag\u0027: True}"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_b3ae312c","line":312,"in_reply_to":"bfb3d3c7_3ef0ddc9","updated":"2019-05-21 09:01:33.000000000","message":"Not exactly. This dict with some agent\u0027s config options is send to the neutron-server with every heartbeat and neutron store it in db. So during port binding mechanism driver can check if agent on host have this option enabled or not and bind port only if it has it configured.\n\nIMO it is useless to bind smart Nic port to host with disabled support for baremetal_smartnic as then it will be bound properly but will not work as expected, right?","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"939cc284229495c5fe3bf3577f5dce24e9281b4f","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                               \u0027ovs_capabilities\u0027: self.ovs.capabilities,"},{"line_number":310,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":311,"context_line":"                               ovs_conf.vhostuser_socket_dir,"},{"line_number":312,"context_line":"                               portbindings.OVS_HYBRID_PLUG: hybrid_plug},"},{"line_number":313,"context_line":"            \u0027resource_versions\u0027: resources.LOCAL_RESOURCE_VERSIONS,"},{"line_number":314,"context_line":"            \u0027agent_type\u0027: agent_conf.agent_type,"},{"line_number":315,"context_line":"            \u0027start_flag\u0027: True}"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_3ef0ddc9","line":312,"in_reply_to":"bfb3d3c7_59bce468","updated":"2019-05-20 10:54:40.000000000","message":"So you are saying that when Neutron server tries to bound a SmartNIC port, it should send port_update to the agent running on host if baremetal_smartnic config enabled otherwise error is thrown saying agent can\u0027t bound SmartNIC port, right ?","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"86875358b4c9a85bcff2d10197a739eff7395192","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                               \u0027ovs_capabilities\u0027: self.ovs.capabilities,"},{"line_number":310,"context_line":"                               \u0027vhostuser_socket_dir\u0027:"},{"line_number":311,"context_line":"                               ovs_conf.vhostuser_socket_dir,"},{"line_number":312,"context_line":"                               portbindings.OVS_HYBRID_PLUG: hybrid_plug},"},{"line_number":313,"context_line":"            \u0027resource_versions\u0027: resources.LOCAL_RESOURCE_VERSIONS,"},{"line_number":314,"context_line":"            \u0027agent_type\u0027: agent_conf.agent_type,"},{"line_number":315,"context_line":"            \u0027start_flag\u0027: True}"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_27d8bb51","line":312,"in_reply_to":"bfb3d3c7_b3ae312c","updated":"2019-05-21 11:39:31.000000000","message":"So the mech driver will do this for us,\nhttps://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/mech_agent.py#L93\n\nthe server will attempt to bind the port if the port\u0027s vnic type is supported by the mech driver.","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c72383e82cd574f77ef0bbfb3b5cdc502b46282f","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        if not port_data:"},{"line_number":463,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":464,"context_line":"            return"},{"line_number":465,"context_line":"        if \u0027bindings\u0027 in port_data:"},{"line_number":466,"context_line":"            for port_binding in port_data[\u0027bindings\u0027]:"},{"line_number":467,"context_line":"                if port_binding[\u0027vnic_type\u0027] \u003d\u003d portbindings.VNIC_SMARTNIC:"},{"line_number":468,"context_line":"                    if port_binding[\u0027host\u0027] \u003d\u003d self.conf.host:"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_99d7bc24","line":465,"updated":"2019-05-17 13:50:07.000000000","message":"nit: if You would do something like:\n\n    for port_binding in port_data.get(\"bindings\", []):\n        ....\n\nYou would safe one indentation level :)","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"939cc284229495c5fe3bf3577f5dce24e9281b4f","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        if not port_data:"},{"line_number":463,"context_line":"            LOG.warning(\u0027Failed to get port details, port id: %s\u0027, port[\u0027id\u0027])"},{"line_number":464,"context_line":"            return"},{"line_number":465,"context_line":"        if \u0027bindings\u0027 in port_data:"},{"line_number":466,"context_line":"            for port_binding in port_data[\u0027bindings\u0027]:"},{"line_number":467,"context_line":"                if port_binding[\u0027vnic_type\u0027] \u003d\u003d portbindings.VNIC_SMARTNIC:"},{"line_number":468,"context_line":"                    if port_binding[\u0027host\u0027] \u003d\u003d self.conf.host:"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_508587ac","line":465,"in_reply_to":"bfb3d3c7_99d7bc24","updated":"2019-05-20 10:54:40.000000000","message":"Done","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c72383e82cd574f77ef0bbfb3b5cdc502b46282f","unresolved":false,"context_lines":[{"line_number":472,"context_line":"                        # The port doesn\u0027t belong to this Smart NIC,"},{"line_number":473,"context_line":"                        # the reason for this could be multi Smart NIC"},{"line_number":474,"context_line":"                        # setup."},{"line_number":475,"context_line":"                        LOG.info(\"Smart NIC port %(port_id)s does not belong \""},{"line_number":476,"context_line":"                                 \"to this host %(host)s\","},{"line_number":477,"context_line":"                                 {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":478,"context_line":"                                  \u0027host\u0027: self.conf.host})"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_d9fe94ad","line":475,"range":{"start_line":475,"start_character":28,"end_line":475,"end_character":32},"updated":"2019-05-17 13:50:07.000000000","message":"do we need it as \"info\"? Maybe debug would be enough?","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"939cc284229495c5fe3bf3577f5dce24e9281b4f","unresolved":false,"context_lines":[{"line_number":472,"context_line":"                        # The port doesn\u0027t belong to this Smart NIC,"},{"line_number":473,"context_line":"                        # the reason for this could be multi Smart NIC"},{"line_number":474,"context_line":"                        # setup."},{"line_number":475,"context_line":"                        LOG.info(\"Smart NIC port %(port_id)s does not belong \""},{"line_number":476,"context_line":"                                 \"to this host %(host)s\","},{"line_number":477,"context_line":"                                 {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":478,"context_line":"                                  \u0027host\u0027: self.conf.host})"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_90a3ff4f","line":475,"range":{"start_line":475,"start_character":28,"end_line":475,"end_character":32},"in_reply_to":"bfb3d3c7_d9fe94ad","updated":"2019-05-20 10:54:40.000000000","message":"I think so yes, this is the agent code that runs on the SmartNIC, so it\u0027s important to inform the user that the SmartNIC port was not found on this host.","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c72383e82cd574f77ef0bbfb3b5cdc502b46282f","unresolved":false,"context_lines":[{"line_number":473,"context_line":"                        # the reason for this could be multi Smart NIC"},{"line_number":474,"context_line":"                        # setup."},{"line_number":475,"context_line":"                        LOG.info(\"Smart NIC port %(port_id)s does not belong \""},{"line_number":476,"context_line":"                                 \"to this host %(host)s\","},{"line_number":477,"context_line":"                                 {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":478,"context_line":"                                  \u0027host\u0027: self.conf.host})"},{"line_number":479,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_f920384c","line":476,"range":{"start_line":476,"start_character":37,"end_line":476,"end_character":41},"updated":"2019-05-17 13:50:07.000000000","message":"nitty nit: I don\u0027t think this is necessary","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"939cc284229495c5fe3bf3577f5dce24e9281b4f","unresolved":false,"context_lines":[{"line_number":473,"context_line":"                        # the reason for this could be multi Smart NIC"},{"line_number":474,"context_line":"                        # setup."},{"line_number":475,"context_line":"                        LOG.info(\"Smart NIC port %(port_id)s does not belong \""},{"line_number":476,"context_line":"                                 \"to this host %(host)s\","},{"line_number":477,"context_line":"                                 {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":478,"context_line":"                                  \u0027host\u0027: self.conf.host})"},{"line_number":479,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_b09403ea","line":476,"range":{"start_line":476,"start_character":37,"end_line":476,"end_character":41},"in_reply_to":"bfb3d3c7_f920384c","updated":"2019-05-20 10:54:40.000000000","message":"Done","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c72383e82cd574f77ef0bbfb3b5cdc502b46282f","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        vif \u003d self._get_vif_object(iface_id, rep_port, mac)"},{"line_number":489,"context_line":"        try:"},{"line_number":490,"context_line":"            if vif_type \u003d\u003d portbindings.VIF_TYPE_OVS:"},{"line_number":491,"context_line":"                os_vif.plug(vif, instance_info)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"            elif vif_type \u003d\u003d portbindings.VIF_TYPE_UNBOUND:"},{"line_number":494,"context_line":"                os_vif.unplug(vif, instance_info)"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_59baa4de","line":491,"updated":"2019-05-17 13:50:07.000000000","message":"we have some interface driver in: https://github.com/openstack/neutron/blob/master/neutron/agent/linux/interface.py\nMaybe we should use this driver here instead of using os-vif directly? Than we can maybe switch to use os-vif in this drivers module later","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"6d92a3612bd56f0243cbdc301f8562907d39961c","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        vif \u003d self._get_vif_object(iface_id, rep_port, mac)"},{"line_number":489,"context_line":"        try:"},{"line_number":490,"context_line":"            if vif_type \u003d\u003d portbindings.VIF_TYPE_OVS:"},{"line_number":491,"context_line":"                os_vif.plug(vif, instance_info)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"            elif vif_type \u003d\u003d portbindings.VIF_TYPE_UNBOUND:"},{"line_number":494,"context_line":"                os_vif.unplug(vif, instance_info)"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_70c2f987","line":491,"in_reply_to":"bfb3d3c7_59baa4de","updated":"2019-05-20 17:40:19.000000000","message":"So, i think there were discussions on this topic during the spec review. in the spec[1] it was decided to go with os-vif as it should be the one entity who performs the port plugging (connecting the port to the datapath) on the host.\n\nOn another note, Today, the ovs network interface is not used by the L2 agent.\n\n\n[1]https://review.opendev.org/#/c/619920/6","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"303a607dce16b40a3d23e091e75f6af3c576f5a7","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        vif \u003d self._get_vif_object(iface_id, rep_port, mac)"},{"line_number":489,"context_line":"        try:"},{"line_number":490,"context_line":"            if vif_type \u003d\u003d portbindings.VIF_TYPE_OVS:"},{"line_number":491,"context_line":"                os_vif.plug(vif, instance_info)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"            elif vif_type \u003d\u003d portbindings.VIF_TYPE_UNBOUND:"},{"line_number":494,"context_line":"                os_vif.unplug(vif, instance_info)"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_93976d91","line":491,"in_reply_to":"bfb3d3c7_59baa4de","updated":"2019-05-21 08:35:13.000000000","message":"The spec says that the plugging would be done using os-vif[1], also I don\u0027t see usage of interface driver in L2.\n\n[1] https://github.com/openstack/neutron-specs/blob/master/specs/stein/neutron-ovs-agent-support-baremetal-with-smart-nic.rst","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"6063c1fa19384f705d57c79b1bc5453964a6868c","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        vif \u003d self._get_vif_object(iface_id, rep_port, mac)"},{"line_number":489,"context_line":"        try:"},{"line_number":490,"context_line":"            if vif_type \u003d\u003d portbindings.VIF_TYPE_OVS:"},{"line_number":491,"context_line":"                os_vif.plug(vif, instance_info)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"            elif vif_type \u003d\u003d portbindings.VIF_TYPE_UNBOUND:"},{"line_number":494,"context_line":"                os_vif.unplug(vif, instance_info)"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_d05f25e3","line":491,"in_reply_to":"bfb3d3c7_70c2f987","updated":"2019-05-20 17:41:35.000000000","message":"L#133/134 in the spec, forgot to mention :)","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"444537020fd9146bace3f3beff043d828463034c","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        vif \u003d self._get_vif_object(iface_id, rep_port, mac)"},{"line_number":489,"context_line":"        try:"},{"line_number":490,"context_line":"            if vif_type \u003d\u003d portbindings.VIF_TYPE_OVS:"},{"line_number":491,"context_line":"                os_vif.plug(vif, instance_info)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"            elif vif_type \u003d\u003d portbindings.VIF_TYPE_UNBOUND:"},{"line_number":494,"context_line":"                os_vif.unplug(vif, instance_info)"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_13637d1c","line":491,"in_reply_to":"bfb3d3c7_93976d91","updated":"2019-05-21 09:01:33.000000000","message":"ok, so I\u0027m fine with this :)","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c72383e82cd574f77ef0bbfb3b5cdc502b46282f","unresolved":false,"context_lines":[{"line_number":494,"context_line":"                os_vif.unplug(vif, instance_info)"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"            else:"},{"line_number":497,"context_line":"                LOG.warning(\"Unexpected vif_type:%(vif_type)s for \""},{"line_number":498,"context_line":"                            \"%(vnic_type)s port:%(port_id)s\","},{"line_number":499,"context_line":"                            {\u0027vnic_type\u0027: portbindings.VNIC_SMARTNIC,"},{"line_number":500,"context_line":"                             \u0027vif_type\u0027: vif_type,"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_f9cef881","line":497,"range":{"start_line":497,"start_character":20,"end_line":497,"end_character":27},"updated":"2019-05-17 13:50:07.000000000","message":"Isn\u0027t this error?","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"939cc284229495c5fe3bf3577f5dce24e9281b4f","unresolved":false,"context_lines":[{"line_number":494,"context_line":"                os_vif.unplug(vif, instance_info)"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"            else:"},{"line_number":497,"context_line":"                LOG.warning(\"Unexpected vif_type:%(vif_type)s for \""},{"line_number":498,"context_line":"                            \"%(vnic_type)s port:%(port_id)s\","},{"line_number":499,"context_line":"                            {\u0027vnic_type\u0027: portbindings.VNIC_SMARTNIC,"},{"line_number":500,"context_line":"                             \u0027vif_type\u0027: vif_type,"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_d0f4175e","line":497,"range":{"start_line":497,"start_character":20,"end_line":497,"end_character":27},"in_reply_to":"bfb3d3c7_f9cef881","updated":"2019-05-20 10:54:40.000000000","message":"yes","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c72383e82cd574f77ef0bbfb3b5cdc502b46282f","unresolved":false,"context_lines":[{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def _add_port_to_updated_smartnic_ports(self, port_data, port_binding):"},{"line_number":520,"context_line":"        profile \u003d port_binding[\u0027profile\u0027]"},{"line_number":521,"context_line":"        local_link \u003d profile.get(\u0027local_link_information\u0027, [])"},{"line_number":522,"context_line":"        if local_link:"},{"line_number":523,"context_line":"            iface_name \u003d local_link[0][\u0027port_id\u0027]"},{"line_number":524,"context_line":"            self.updated_smartnic_ports.append({"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_f993585b","line":521,"range":{"start_line":521,"start_character":59,"end_line":521,"end_character":61},"updated":"2019-05-17 13:50:07.000000000","message":"nit: is this necessary?","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"939cc284229495c5fe3bf3577f5dce24e9281b4f","unresolved":false,"context_lines":[{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def _add_port_to_updated_smartnic_ports(self, port_data, port_binding):"},{"line_number":520,"context_line":"        profile \u003d port_binding[\u0027profile\u0027]"},{"line_number":521,"context_line":"        local_link \u003d profile.get(\u0027local_link_information\u0027, [])"},{"line_number":522,"context_line":"        if local_link:"},{"line_number":523,"context_line":"            iface_name \u003d local_link[0][\u0027port_id\u0027]"},{"line_number":524,"context_line":"            self.updated_smartnic_ports.append({"}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_b0ef2386","line":521,"range":{"start_line":521,"start_character":59,"end_line":521,"end_character":61},"in_reply_to":"bfb3d3c7_f993585b","updated":"2019-05-20 10:54:40.000000000","message":"no","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"}],"neutron/plugins/ml2/drivers/openvswitch/mech_driver/mech_openvswitch.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"f45849aa8cff6513dcf77e4fc85980e97a0a63af","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.supported_vnic_types \u003d self.blacklist_supported_vnic_types("},{"line_number":76,"context_line":"            vnic_types\u003d[portbindings.VNIC_NORMAL,"},{"line_number":77,"context_line":"                        portbindings.VNIC_DIRECT,"},{"line_number":78,"context_line":"                        portbindings.VNIC_BAREMETAL,"},{"line_number":79,"context_line":"                        portbindings.VNIC_SMARTNIC],"},{"line_number":80,"context_line":"            blacklist\u003dcfg.CONF.OVS_DRIVER.vnic_type_blacklist"},{"line_number":81,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_3e0afb7a","line":78,"range":{"start_line":78,"start_character":24,"end_line":78,"end_character":52},"updated":"2018-12-13 17:22:39.000000000","message":"remove the baremetal","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"80ae21aadd98dafe87712ee0aae8bb272c28e821","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.supported_vnic_types \u003d self.blacklist_supported_vnic_types("},{"line_number":76,"context_line":"            vnic_types\u003d[portbindings.VNIC_NORMAL,"},{"line_number":77,"context_line":"                        portbindings.VNIC_DIRECT,"},{"line_number":78,"context_line":"                        portbindings.VNIC_BAREMETAL,"},{"line_number":79,"context_line":"                        portbindings.VNIC_SMARTNIC],"},{"line_number":80,"context_line":"            blacklist\u003dcfg.CONF.OVS_DRIVER.vnic_type_blacklist"},{"line_number":81,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_981ea05f","line":78,"range":{"start_line":78,"start_character":24,"end_line":78,"end_character":52},"in_reply_to":"3f79a3b5_3e0afb7a","updated":"2018-12-16 11:56:34.000000000","message":"Done","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"f45849aa8cff6513dcf77e4fc85980e97a0a63af","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        is_smartnic \u003d False"},{"line_number":106,"context_line":"        if profile:"},{"line_number":107,"context_line":"            capabilities \u003d profile.get(\u0027capabilities\u0027, [])"},{"line_number":108,"context_line":"            is_smartnic \u003d profile.get(\u0027smart_nic\u0027, False)"},{"line_number":109,"context_line":"        if (vnic_type \u003d\u003d portbindings.VNIC_DIRECT and"},{"line_number":110,"context_line":"                \u0027switchdev\u0027 not in capabilities):"},{"line_number":111,"context_line":"            LOG.debug(\"Refusing to bind due to unsupported vnic_type: %s with \""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_1e093f82","line":108,"range":{"start_line":108,"start_character":11,"end_line":108,"end_character":57},"updated":"2018-12-13 17:22:39.000000000","message":"why do we need this?","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"80ae21aadd98dafe87712ee0aae8bb272c28e821","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        is_smartnic \u003d False"},{"line_number":106,"context_line":"        if profile:"},{"line_number":107,"context_line":"            capabilities \u003d profile.get(\u0027capabilities\u0027, [])"},{"line_number":108,"context_line":"            is_smartnic \u003d profile.get(\u0027smart_nic\u0027, False)"},{"line_number":109,"context_line":"        if (vnic_type \u003d\u003d portbindings.VNIC_DIRECT and"},{"line_number":110,"context_line":"                \u0027switchdev\u0027 not in capabilities):"},{"line_number":111,"context_line":"            LOG.debug(\"Refusing to bind due to unsupported vnic_type: %s with \""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_b8211ca3","line":108,"range":{"start_line":108,"start_character":11,"end_line":108,"end_character":57},"in_reply_to":"3f79a3b5_1e093f82","updated":"2018-12-16 11:56:34.000000000","message":"Done","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"f45849aa8cff6513dcf77e4fc85980e97a0a63af","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                      \"no switchdev capability\", portbindings.VNIC_DIRECT)"},{"line_number":113,"context_line":"            return"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if vnic_type \u003d\u003d portbindings.VNIC_BAREMETAL and not is_smartnic:"},{"line_number":116,"context_line":"            LOG.debug(\"Can\u0027t bind vnic_type: %s with smart_nic is False\","},{"line_number":117,"context_line":"                      vnic_type)"},{"line_number":118,"context_line":"            return"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        super(OpenvswitchMechanismDriver, self).bind_port(context)"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_9e146f9b","line":118,"range":{"start_line":115,"start_character":0,"end_line":118,"end_character":18},"updated":"2018-12-13 17:22:39.000000000","message":"we don\u0027t need this","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"80ae21aadd98dafe87712ee0aae8bb272c28e821","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                      \"no switchdev capability\", portbindings.VNIC_DIRECT)"},{"line_number":113,"context_line":"            return"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if vnic_type \u003d\u003d portbindings.VNIC_BAREMETAL and not is_smartnic:"},{"line_number":116,"context_line":"            LOG.debug(\"Can\u0027t bind vnic_type: %s with smart_nic is False\","},{"line_number":117,"context_line":"                      vnic_type)"},{"line_number":118,"context_line":"            return"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        super(OpenvswitchMechanismDriver, self).bind_port(context)"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_58180871","line":118,"range":{"start_line":115,"start_character":0,"end_line":118,"end_character":18},"in_reply_to":"3f79a3b5_9e146f9b","updated":"2018-12-16 11:56:34.000000000","message":"Done","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c72383e82cd574f77ef0bbfb3b5cdc502b46282f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.supported_vnic_types \u003d self.blacklist_supported_vnic_types("},{"line_number":79,"context_line":"            vnic_types\u003d[portbindings.VNIC_NORMAL,"},{"line_number":80,"context_line":"                        portbindings.VNIC_DIRECT,"},{"line_number":81,"context_line":"                        portbindings.VNIC_SMARTNIC],"},{"line_number":82,"context_line":"            blacklist\u003dcfg.CONF.OVS_DRIVER.vnic_type_blacklist"},{"line_number":83,"context_line":"        )"},{"line_number":84,"context_line":"        LOG.info(\"%s\u0027s supported_vnic_types: %s\","}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_1900ac34","line":81,"updated":"2019-05-17 13:50:07.000000000","message":"this new vnic type should be allowed to be bound on host only if agent on this host has got proper config option configured. We shouldn\u0027t allow to bind such port on any host with openvswitch agent even when \u0027baremetal_smartnic\u0027 is set to False","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"939cc284229495c5fe3bf3577f5dce24e9281b4f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.supported_vnic_types \u003d self.blacklist_supported_vnic_types("},{"line_number":79,"context_line":"            vnic_types\u003d[portbindings.VNIC_NORMAL,"},{"line_number":80,"context_line":"                        portbindings.VNIC_DIRECT,"},{"line_number":81,"context_line":"                        portbindings.VNIC_SMARTNIC],"},{"line_number":82,"context_line":"            blacklist\u003dcfg.CONF.OVS_DRIVER.vnic_type_blacklist"},{"line_number":83,"context_line":"        )"},{"line_number":84,"context_line":"        LOG.info(\"%s\u0027s supported_vnic_types: %s\","}],"source_content_type":"text/x-python","patch_set":40,"id":"bfb3d3c7_d0cbb71b","line":81,"in_reply_to":"bfb3d3c7_1900ac34","updated":"2019-05-20 10:54:40.000000000","message":"Done","commit_id":"c9d0c995ade170733ce66ed689e995fdbea138c0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0b14bf2b595aa747bfe522b5c1f8275515ce405d","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        vnic_types \u003d [portbindings.VNIC_NORMAL, portbindings.VNIC_DIRECT]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        if cfg.CONF.AGENT.baremetal_smartnic:"},{"line_number":78,"context_line":"            vnic_types.append(portbindings.VNIC_SMARTNIC)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        # TODO(lajoskatona): move this blacklisting to"}],"source_content_type":"text/x-python","patch_set":42,"id":"bfb3d3c7_c76c3f0a","line":77,"updated":"2019-05-21 12:03:42.000000000","message":"You can\u0027t rely here on agent\u0027s config option. This code is executed only in neutron-server and cfg.CONF.AGENT.baremetal_smartnic is supposed to be configured on compute node where ovs agent is running","commit_id":"e39234041d0904c535aa1deb461e5614de4c1101"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"b9aa29b9363f131ac324f136f995c97ebc443acd","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        vnic_types \u003d [portbindings.VNIC_NORMAL, portbindings.VNIC_DIRECT]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        if cfg.CONF.AGENT.baremetal_smartnic:"},{"line_number":78,"context_line":"            vnic_types.append(portbindings.VNIC_SMARTNIC)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        # TODO(lajoskatona): move this blacklisting to"}],"source_content_type":"text/x-python","patch_set":42,"id":"bfb3d3c7_5a3c9abe","line":77,"in_reply_to":"bfb3d3c7_c76c3f0a","updated":"2019-05-21 20:01:34.000000000","message":"I see, will add SmartNIC vnic type to supported vnic types here and will check agent capability to bind SmartNIC in AgentMechanismDriverBase.bind_port()","commit_id":"e39234041d0904c535aa1deb461e5614de4c1101"}],"neutron/plugins/ml2/rpc.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    #   1.5 Support update_device_list and"},{"line_number":55,"context_line":"    #       get_devices_details_list_and_failed_devices"},{"line_number":56,"context_line":"    #   1.6 Support get_ports_by_vnic_type_and_host"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.6\u0027)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, notifier, type_manager):"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_d921feb5","line":57,"updated":"2019-02-14 19:36:33.000000000","message":"nit: extra blank line","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    #   1.5 Support update_device_list and"},{"line_number":55,"context_line":"    #       get_devices_details_list_and_failed_devices"},{"line_number":56,"context_line":"    #   1.6 Support get_ports_by_vnic_type_and_host"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.6\u0027)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, notifier, type_manager):"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_e82de98e","line":57,"in_reply_to":"9fdfeff1_d921feb5","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"c0b102d601dcfaf43c272a165f8186cb83fd4e92","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    def get_ports_by_vnic_type_and_host(self, rpc_context, vnic_type, host):"},{"line_number":394,"context_line":"        plugin \u003d directory.get_plugin()"},{"line_number":395,"context_line":"        return plugin.get_ports_by_vnic_type_and_host("},{"line_number":396,"context_line":"            rpc_context, vnic_type\u003dvnic_type, host\u003dhost)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"dfbec78f_a8910ef4","line":395,"updated":"2019-05-03 02:37:16.000000000","message":"Couldn\u0027t you have called ports_obj.Port.get_ports_by_vnic_type_and_host() directly here and avoided the same-name function in neutron/plugins/ml2/plugin.py?  What purpose does the extra function serve?","commit_id":"d416a02e7d6843dbe7d97526ab02455d20854a0b"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"b661061639bcc19624590d2f0c33d341cfd19c4f","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    def get_ports_by_vnic_type_and_host(self, rpc_context, vnic_type, host):"},{"line_number":394,"context_line":"        plugin \u003d directory.get_plugin()"},{"line_number":395,"context_line":"        return plugin.get_ports_by_vnic_type_and_host("},{"line_number":396,"context_line":"            rpc_context, vnic_type\u003dvnic_type, host\u003dhost)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"dfbec78f_5a327df3","line":395,"in_reply_to":"dfbec78f_a8910ef4","updated":"2019-05-05 13:44:51.000000000","message":"in the rpc file I see only plugin calls not direct calls to port database, also I think it is more organized that the ml2 plugin has the query function and the rpc to call it.","commit_id":"d416a02e7d6843dbe7d97526ab02455d20854a0b"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":972,"context_line":"                                             \u0027failed_devices_down\u0027: []}):"},{"line_number":973,"context_line":"            with mock.patch.object(self.agent, \u0027port_unbound\u0027) \\"},{"line_number":974,"context_line":"                    as port_unbound,\\"},{"line_number":975,"context_line":"                    mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027)\\"},{"line_number":976,"context_line":"                    as get_vif_mock:"},{"line_number":977,"context_line":"                get_vif_mock.return_value \u003d None"},{"line_number":978,"context_line":"                self.assertFalse(self.agent.treat_devices_removed([{}]))"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_54863568","line":975,"updated":"2019-02-14 19:36:33.000000000","message":"Could have just made this one level deeper, \u0027with mock...\u0027 and used return_value\u003d as L969","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":972,"context_line":"                                             \u0027failed_devices_down\u0027: []}):"},{"line_number":973,"context_line":"            with mock.patch.object(self.agent, \u0027port_unbound\u0027) \\"},{"line_number":974,"context_line":"                    as port_unbound,\\"},{"line_number":975,"context_line":"                    mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027)\\"},{"line_number":976,"context_line":"                    as get_vif_mock:"},{"line_number":977,"context_line":"                get_vif_mock.return_value \u003d None"},{"line_number":978,"context_line":"                self.assertFalse(self.agent.treat_devices_removed([{}]))"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_a8eda125","line":975,"in_reply_to":"9fdfeff1_54863568","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":973,"context_line":"            with mock.patch.object(self.agent, \u0027port_unbound\u0027) \\"},{"line_number":974,"context_line":"                    as port_unbound,\\"},{"line_number":975,"context_line":"                    mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027)\\"},{"line_number":976,"context_line":"                    as get_vif_mock:"},{"line_number":977,"context_line":"                get_vif_mock.return_value \u003d None"},{"line_number":978,"context_line":"                self.assertFalse(self.agent.treat_devices_removed([{}]))"},{"line_number":979,"context_line":"        self.assertTrue(port_unbound.called)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_147c2d70","line":976,"updated":"2019-02-14 19:36:33.000000000","message":"This should be indented to make the block obvious, or maybe it will go away with above suggestion","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":973,"context_line":"            with mock.patch.object(self.agent, \u0027port_unbound\u0027) \\"},{"line_number":974,"context_line":"                    as port_unbound,\\"},{"line_number":975,"context_line":"                    mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027)\\"},{"line_number":976,"context_line":"                    as get_vif_mock:"},{"line_number":977,"context_line":"                get_vif_mock.return_value \u003d None"},{"line_number":978,"context_line":"                self.assertFalse(self.agent.treat_devices_removed([{}]))"},{"line_number":979,"context_line":"        self.assertTrue(port_unbound.called)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_48f0b5fd","line":976,"in_reply_to":"9fdfeff1_147c2d70","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":994,"context_line":"                                             \u0027failed_devices_down\u0027: ["},{"line_number":995,"context_line":"                                                 dev_mock]}), \\"},{"line_number":996,"context_line":"                mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027) \\"},{"line_number":997,"context_line":"                as get_vif_mock:"},{"line_number":998,"context_line":"            get_vif_mock.return_value \u003d None"},{"line_number":999,"context_line":"            failed_devices \u003d {\u0027added\u0027: set(), \u0027removed\u0027: set()}"},{"line_number":1000,"context_line":"            failed_devices[\u0027removed\u0027] \u003d self.agent.treat_devices_removed([{}])"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_94e49d3d","line":997,"updated":"2019-02-14 19:36:33.000000000","message":"Same comments as above","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":994,"context_line":"                                             \u0027failed_devices_down\u0027: ["},{"line_number":995,"context_line":"                                                 dev_mock]}), \\"},{"line_number":996,"context_line":"                mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027) \\"},{"line_number":997,"context_line":"                as get_vif_mock:"},{"line_number":998,"context_line":"            get_vif_mock.return_value \u003d None"},{"line_number":999,"context_line":"            failed_devices \u003d {\u0027added\u0027: set(), \u0027removed\u0027: set()}"},{"line_number":1000,"context_line":"            failed_devices[\u0027removed\u0027] \u003d self.agent.treat_devices_removed([{}])"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_68f3390a","line":997,"in_reply_to":"9fdfeff1_94e49d3d","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"        m_unbound \u003d mock.patch.object(self.agent, \u0027port_unbound\u0027)"},{"line_number":1013,"context_line":"        with m_delete as delete, m_rpc, m_unbound, \\"},{"line_number":1014,"context_line":"                mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027) \\"},{"line_number":1015,"context_line":"                as get_vif_mock:"},{"line_number":1016,"context_line":"            get_vif_mock.return_value \u003d None"},{"line_number":1017,"context_line":"            self.agent.treat_devices_removed([port_id])"},{"line_number":1018,"context_line":"            delete.assert_called_with(mock.ANY, {\u0027port_id\u0027: port_id})"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_34f4d1f0","line":1015,"updated":"2019-02-14 19:36:33.000000000","message":"Same","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"        m_unbound \u003d mock.patch.object(self.agent, \u0027port_unbound\u0027)"},{"line_number":1013,"context_line":"        with m_delete as delete, m_rpc, m_unbound, \\"},{"line_number":1014,"context_line":"                mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027) \\"},{"line_number":1015,"context_line":"                as get_vif_mock:"},{"line_number":1016,"context_line":"            get_vif_mock.return_value \u003d None"},{"line_number":1017,"context_line":"            self.agent.treat_devices_removed([port_id])"},{"line_number":1018,"context_line":"            delete.assert_called_with(mock.ANY, {\u0027port_id\u0027: port_id})"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_08de2d6c","line":1015,"in_reply_to":"9fdfeff1_34f4d1f0","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":2414,"context_line":"                bridge.set_datapath_id.assert_called_once_with(dpid)"},{"line_number":2415,"context_line":""},{"line_number":2416,"context_line":"    def test_treat_smartnic_port_add(self):"},{"line_number":2417,"context_line":"        with mock.patch.object(os_vif, \u0027plug\u0027) as os_vif_mock:"},{"line_number":2418,"context_line":"            smartnic_data \u003d {"},{"line_number":2419,"context_line":"                \u0027mac\u0027: FAKE_MAC,"},{"line_number":2420,"context_line":"                \u0027vm_uuid\u0027: \"407a79e0-e0be-4b7d-92a6-513b2161011b\","}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_f4c2c984","line":2417,"range":{"start_line":2417,"start_character":50,"end_line":2417,"end_character":61},"updated":"2019-02-14 19:36:33.000000000","message":"plug_mock ?","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":2414,"context_line":"                bridge.set_datapath_id.assert_called_once_with(dpid)"},{"line_number":2415,"context_line":""},{"line_number":2416,"context_line":"    def test_treat_smartnic_port_add(self):"},{"line_number":2417,"context_line":"        with mock.patch.object(os_vif, \u0027plug\u0027) as os_vif_mock:"},{"line_number":2418,"context_line":"            smartnic_data \u003d {"},{"line_number":2419,"context_line":"                \u0027mac\u0027: FAKE_MAC,"},{"line_number":2420,"context_line":"                \u0027vm_uuid\u0027: \"407a79e0-e0be-4b7d-92a6-513b2161011b\","}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_28d9b181","line":2417,"range":{"start_line":2417,"start_character":50,"end_line":2417,"end_character":61},"in_reply_to":"9fdfeff1_f4c2c984","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":2422,"context_line":"                \u0027iface_id\u0027: \"407a79e0-e0be-4b7d-92a6-513b2161011c\","},{"line_number":2423,"context_line":"                \u0027vif_type\u0027: \u0027ovs\u0027}"},{"line_number":2424,"context_line":"            self.agent.treat_smartnic_port(smartnic_data)"},{"line_number":2425,"context_line":"            self.assertTrue(os_vif_mock.called)"},{"line_number":2426,"context_line":""},{"line_number":2427,"context_line":"    def test_treat_smartnic_port_remove(self):"},{"line_number":2428,"context_line":"        with mock.patch.object(os_vif, \u0027unplug\u0027) as os_vif_mock:"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_34cdb1b6","line":2425,"updated":"2019-02-14 19:36:33.000000000","message":"You should verify plug was called with the correct args.","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":2422,"context_line":"                \u0027iface_id\u0027: \"407a79e0-e0be-4b7d-92a6-513b2161011c\","},{"line_number":2423,"context_line":"                \u0027vif_type\u0027: \u0027ovs\u0027}"},{"line_number":2424,"context_line":"            self.agent.treat_smartnic_port(smartnic_data)"},{"line_number":2425,"context_line":"            self.assertTrue(os_vif_mock.called)"},{"line_number":2426,"context_line":""},{"line_number":2427,"context_line":"    def test_treat_smartnic_port_remove(self):"},{"line_number":2428,"context_line":"        with mock.patch.object(os_vif, \u0027unplug\u0027) as os_vif_mock:"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_084ced3f","line":2425,"in_reply_to":"9fdfeff1_34cdb1b6","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":2425,"context_line":"            self.assertTrue(os_vif_mock.called)"},{"line_number":2426,"context_line":""},{"line_number":2427,"context_line":"    def test_treat_smartnic_port_remove(self):"},{"line_number":2428,"context_line":"        with mock.patch.object(os_vif, \u0027unplug\u0027) as os_vif_mock:"},{"line_number":2429,"context_line":"            smartnic_data \u003d {"},{"line_number":2430,"context_line":"                \u0027mac\u0027: FAKE_MAC,"},{"line_number":2431,"context_line":"                \u0027vm_uuid\u0027: \"407a79e0-e0be-4b7d-92a6-513b2161011b\","}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_34429110","line":2428,"range":{"start_line":2428,"start_character":52,"end_line":2428,"end_character":63},"updated":"2019-02-14 19:36:33.000000000","message":"unplug_mock ?","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":2425,"context_line":"            self.assertTrue(os_vif_mock.called)"},{"line_number":2426,"context_line":""},{"line_number":2427,"context_line":"    def test_treat_smartnic_port_remove(self):"},{"line_number":2428,"context_line":"        with mock.patch.object(os_vif, \u0027unplug\u0027) as os_vif_mock:"},{"line_number":2429,"context_line":"            smartnic_data \u003d {"},{"line_number":2430,"context_line":"                \u0027mac\u0027: FAKE_MAC,"},{"line_number":2431,"context_line":"                \u0027vm_uuid\u0027: \"407a79e0-e0be-4b7d-92a6-513b2161011b\","}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_c8e34533","line":2428,"range":{"start_line":2428,"start_character":52,"end_line":2428,"end_character":63},"in_reply_to":"9fdfeff1_34429110","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":2433,"context_line":"                \u0027iface_id\u0027: \"407a79e0-e0be-4b7d-92a6-513b2161011c\","},{"line_number":2434,"context_line":"                \u0027vif_type\u0027: \u0027unbound\u0027}"},{"line_number":2435,"context_line":"            self.agent.treat_smartnic_port(smartnic_data)"},{"line_number":2436,"context_line":"            self.assertTrue(os_vif_mock.called)"},{"line_number":2437,"context_line":""},{"line_number":2438,"context_line":"    def test_process_smartnic_ports(self):"},{"line_number":2439,"context_line":"        with mock.patch.object("}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_d4c78595","line":2436,"updated":"2019-02-14 19:36:33.000000000","message":"Ditto","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":2433,"context_line":"                \u0027iface_id\u0027: \"407a79e0-e0be-4b7d-92a6-513b2161011c\","},{"line_number":2434,"context_line":"                \u0027vif_type\u0027: \u0027unbound\u0027}"},{"line_number":2435,"context_line":"            self.agent.treat_smartnic_port(smartnic_data)"},{"line_number":2436,"context_line":"            self.assertTrue(os_vif_mock.called)"},{"line_number":2437,"context_line":""},{"line_number":2438,"context_line":"    def test_process_smartnic_ports(self):"},{"line_number":2439,"context_line":"        with mock.patch.object("}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_2847711f","line":2436,"in_reply_to":"9fdfeff1_d4c78595","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":2454,"context_line":"            expected_port_info[\u0027added\u0027].add(\u0027port_to_add\u0027)"},{"line_number":2455,"context_line":"            expected_port_info[\u0027removed\u0027].add(\u0027port_to_remove\u0027)"},{"line_number":2456,"context_line":"            self.agent.process_smartnic_ports(port_info)"},{"line_number":2457,"context_line":"            self.assertEqual(port_info, expected_port_info)"},{"line_number":2458,"context_line":""},{"line_number":2459,"context_line":""},{"line_number":2460,"context_line":"class TestOvsNeutronAgentOFCtl(TestOvsNeutronAgent,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_740a59d2","line":2457,"updated":"2019-02-14 19:36:33.000000000","message":"should be (expected, info)","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":2454,"context_line":"            expected_port_info[\u0027added\u0027].add(\u0027port_to_add\u0027)"},{"line_number":2455,"context_line":"            expected_port_info[\u0027removed\u0027].add(\u0027port_to_remove\u0027)"},{"line_number":2456,"context_line":"            self.agent.process_smartnic_ports(port_info)"},{"line_number":2457,"context_line":"            self.assertEqual(port_info, expected_port_info)"},{"line_number":2458,"context_line":""},{"line_number":2459,"context_line":""},{"line_number":2460,"context_line":"class TestOvsNeutronAgentOFCtl(TestOvsNeutronAgent,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_88d3fd5f","line":2457,"in_reply_to":"9fdfeff1_740a59d2","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":3183,"context_line":"                                {self._physical_network: phys_br}),\\"},{"line_number":3184,"context_line":"                mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027)\\"},{"line_number":3185,"context_line":"                as get_vif_mock:"},{"line_number":3186,"context_line":"            get_vif_mock.return_value \u003d None"},{"line_number":3187,"context_line":"            failed_devices \u003d {\u0027added\u0027: set(), \u0027removed\u0027: set()}"},{"line_number":3188,"context_line":"            failed_devices[\u0027removed\u0027] \u003d self.agent.treat_devices_removed("},{"line_number":3189,"context_line":"                [self._port.vif_id])"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_d4754565","line":3186,"updated":"2019-02-14 19:36:33.000000000","message":"Same comment as above","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":3183,"context_line":"                                {self._physical_network: phys_br}),\\"},{"line_number":3184,"context_line":"                mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027)\\"},{"line_number":3185,"context_line":"                as get_vif_mock:"},{"line_number":3186,"context_line":"            get_vif_mock.return_value \u003d None"},{"line_number":3187,"context_line":"            failed_devices \u003d {\u0027added\u0027: set(), \u0027removed\u0027: set()}"},{"line_number":3188,"context_line":"            failed_devices[\u0027removed\u0027] \u003d self.agent.treat_devices_removed("},{"line_number":3189,"context_line":"                [self._port.vif_id])"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_c85105db","line":3186,"in_reply_to":"9fdfeff1_d4754565","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"daf18890e82d9ba70074c64350a37926f3fe8852","unresolved":false,"context_lines":[{"line_number":3404,"context_line":"                mock.patch.object(self.agent.dvr_agent, \u0027tun_br\u0027, new\u003dtun_br),\\"},{"line_number":3405,"context_line":"                mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027) \\"},{"line_number":3406,"context_line":"                as get_vif_mock:"},{"line_number":3407,"context_line":"            get_vif_mock.return_value \u003d None"},{"line_number":3408,"context_line":"            failed_devices \u003d {\u0027added\u0027: set(), \u0027removed\u0027: set()}"},{"line_number":3409,"context_line":"            failed_devices[\u0027removed\u0027] \u003d self.agent.treat_devices_removed("},{"line_number":3410,"context_line":"                [self._port.vif_id])"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_345b71f6","line":3407,"updated":"2019-02-14 19:36:33.000000000","message":"Same comment as above","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"010de2f7a3f32155e97652c88f134750fcf2bdd5","unresolved":false,"context_lines":[{"line_number":3404,"context_line":"                mock.patch.object(self.agent.dvr_agent, \u0027tun_br\u0027, new\u003dtun_br),\\"},{"line_number":3405,"context_line":"                mock.patch.object(self.agent.int_br, \u0027get_vif_port_by_id\u0027) \\"},{"line_number":3406,"context_line":"                as get_vif_mock:"},{"line_number":3407,"context_line":"            get_vif_mock.return_value \u003d None"},{"line_number":3408,"context_line":"            failed_devices \u003d {\u0027added\u0027: set(), \u0027removed\u0027: set()}"},{"line_number":3409,"context_line":"            failed_devices[\u0027removed\u0027] \u003d self.agent.treat_devices_removed("},{"line_number":3410,"context_line":"                [self._port.vif_id])"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_8861bdab","line":3407,"in_reply_to":"9fdfeff1_345b71f6","updated":"2019-02-17 14:31:58.000000000","message":"Done","commit_id":"68f9ccbc869baf41c3edc7b7f2338a89c51736e9"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/mech_driver/test_mech_openvswitch.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"f45849aa8cff6513dcf77e4fc85980e97a0a63af","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        }"},{"line_number":309,"context_line":"        self.default_supported_vnics \u003d [portbindings.VNIC_NORMAL,"},{"line_number":310,"context_line":"                                        portbindings.VNIC_DIRECT,"},{"line_number":311,"context_line":"                                        portbindings.VNIC_BAREMETAL]"},{"line_number":312,"context_line":"        super(OpenvswitchMechVnicTypesTestCase, self).setUp()"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def test_default_vnic_types(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_1e7e1fe2","line":311,"range":{"start_line":311,"start_character":40,"end_line":311,"end_character":66},"updated":"2018-12-13 17:22:39.000000000","message":"should be smart-nic","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"80ae21aadd98dafe87712ee0aae8bb272c28e821","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        }"},{"line_number":309,"context_line":"        self.default_supported_vnics \u003d [portbindings.VNIC_NORMAL,"},{"line_number":310,"context_line":"                                        portbindings.VNIC_DIRECT,"},{"line_number":311,"context_line":"                                        portbindings.VNIC_BAREMETAL]"},{"line_number":312,"context_line":"        super(OpenvswitchMechVnicTypesTestCase, self).setUp()"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def test_default_vnic_types(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_98430047","line":311,"range":{"start_line":311,"start_character":40,"end_line":311,"end_character":66},"in_reply_to":"3f79a3b5_1e7e1fe2","updated":"2018-12-16 11:56:34.000000000","message":"Done","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"f45849aa8cff6513dcf77e4fc85980e97a0a63af","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    def test_default_vnic_types(self):"},{"line_number":315,"context_line":"        self.assertEqual([portbindings.VNIC_NORMAL,"},{"line_number":316,"context_line":"                          portbindings.VNIC_DIRECT,"},{"line_number":317,"context_line":"                          portbindings.VNIC_BAREMETAL],"},{"line_number":318,"context_line":"                         self.driver.supported_vnic_types)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def test_vnic_type_blacklist_valid_item(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_de5f4776","line":317,"range":{"start_line":317,"start_character":25,"end_line":317,"end_character":53},"updated":"2018-12-13 17:22:39.000000000","message":"same here","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"80ae21aadd98dafe87712ee0aae8bb272c28e821","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    def test_default_vnic_types(self):"},{"line_number":315,"context_line":"        self.assertEqual([portbindings.VNIC_NORMAL,"},{"line_number":316,"context_line":"                          portbindings.VNIC_DIRECT,"},{"line_number":317,"context_line":"                          portbindings.VNIC_BAREMETAL],"},{"line_number":318,"context_line":"                         self.driver.supported_vnic_types)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def test_vnic_type_blacklist_valid_item(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_b846fc54","line":317,"range":{"start_line":317,"start_character":25,"end_line":317,"end_character":53},"in_reply_to":"3f79a3b5_de5f4776","updated":"2018-12-16 11:56:34.000000000","message":"Done","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"f45849aa8cff6513dcf77e4fc85980e97a0a63af","unresolved":false,"context_lines":[{"line_number":349,"context_line":"    def test_vnic_type_blacklist_all_items(self):"},{"line_number":350,"context_line":"        self.blacklist_cfg[\u0027OVS_DRIVER\u0027][\u0027vnic_type_blacklist\u0027] \u003d \\"},{"line_number":351,"context_line":"            [portbindings.VNIC_NORMAL, portbindings.VNIC_DIRECT,"},{"line_number":352,"context_line":"             portbindings.VNIC_BAREMETAL]"},{"line_number":353,"context_line":"        fake_conf \u003d cfg.CONF"},{"line_number":354,"context_line":"        fake_conf_fixture \u003d base.MechDriverConfFixture("},{"line_number":355,"context_line":"            fake_conf, self.blacklist_cfg,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_be4b6bb1","line":352,"range":{"start_line":352,"start_character":13,"end_line":352,"end_character":40},"updated":"2018-12-13 17:22:39.000000000","message":"same here","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"80ae21aadd98dafe87712ee0aae8bb272c28e821","unresolved":false,"context_lines":[{"line_number":349,"context_line":"    def test_vnic_type_blacklist_all_items(self):"},{"line_number":350,"context_line":"        self.blacklist_cfg[\u0027OVS_DRIVER\u0027][\u0027vnic_type_blacklist\u0027] \u003d \\"},{"line_number":351,"context_line":"            [portbindings.VNIC_NORMAL, portbindings.VNIC_DIRECT,"},{"line_number":352,"context_line":"             portbindings.VNIC_BAREMETAL]"},{"line_number":353,"context_line":"        fake_conf \u003d cfg.CONF"},{"line_number":354,"context_line":"        fake_conf_fixture \u003d base.MechDriverConfFixture("},{"line_number":355,"context_line":"            fake_conf, self.blacklist_cfg,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_584d686e","line":352,"range":{"start_line":352,"start_character":13,"end_line":352,"end_character":40},"in_reply_to":"3f79a3b5_be4b6bb1","updated":"2018-12-16 11:56:34.000000000","message":"Done","commit_id":"e511a0d1fadc7406b69eb7d5dec68df1df525fa5"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"2f6cce8b3e17c97bb10cc790c941df44622c32b5","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    mech_openvswitch)"},{"line_number":29,"context_line":"from neutron.tests.unit.plugins.ml2 import _test_mech_agent as base"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"VNIC_SMARTNIC \u003d \u0027smart-nic\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class OpenvswitchMechanismBaseTestCase(base.AgentMechanismBaseTestCase):"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_a9954ce6","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":27},"updated":"2019-01-23 16:52:43.000000000","message":"this is already pushed to neutron lib right ?\nhttps://review.openstack.org/#/c/624660/9/neutron_lib/api/definitions/portbindings.py\n\nmaybe add a TODO to remove and use the other one once available","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"dbee2ab38c6b3a70426da004ebd63fcf6f44fd62","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    mech_openvswitch)"},{"line_number":29,"context_line":"from neutron.tests.unit.plugins.ml2 import _test_mech_agent as base"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"VNIC_SMARTNIC \u003d \u0027smart-nic\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class OpenvswitchMechanismBaseTestCase(base.AgentMechanismBaseTestCase):"}],"source_content_type":"text/x-python","patch_set":19,"id":"9fdfeff1_5b49f488","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":27},"in_reply_to":"9fdfeff1_a9954ce6","updated":"2019-01-27 11:21:46.000000000","message":"Done","commit_id":"986e1c72dd50cdcce5ab452cff432e3954634366"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"c0b102d601dcfaf43c272a165f8186cb83fd4e92","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                \u0027vnic_type_blacklist\u0027: []"},{"line_number":327,"context_line":"            }"},{"line_number":328,"context_line":"        }"},{"line_number":329,"context_line":"        self.default_supported_vnics \u003d [portbindings.VNIC_NORMAL,"},{"line_number":330,"context_line":"                                        portbindings.VNIC_DIRECT,"},{"line_number":331,"context_line":"                                        portbindings.VNIC_SMARTNIC]"},{"line_number":332,"context_line":"        super(OpenvswitchMechVnicTypesTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":39,"id":"dfbec78f_48bc1269","line":329,"updated":"2019-05-03 02:37:16.000000000","message":"Could you declare a constant at the top of the file equal to [portbindings.VNIC_NORMAL, portbindings.VNIC_DIRECT, portbindings.VNIC_SMARTNIC] and use it in all three of these places?","commit_id":"d416a02e7d6843dbe7d97526ab02455d20854a0b"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"b661061639bcc19624590d2f0c33d341cfd19c4f","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                \u0027vnic_type_blacklist\u0027: []"},{"line_number":327,"context_line":"            }"},{"line_number":328,"context_line":"        }"},{"line_number":329,"context_line":"        self.default_supported_vnics \u003d [portbindings.VNIC_NORMAL,"},{"line_number":330,"context_line":"                                        portbindings.VNIC_DIRECT,"},{"line_number":331,"context_line":"                                        portbindings.VNIC_SMARTNIC]"},{"line_number":332,"context_line":"        super(OpenvswitchMechVnicTypesTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":39,"id":"dfbec78f_bf45ab72","line":329,"in_reply_to":"dfbec78f_48bc1269","updated":"2019-05-05 13:44:51.000000000","message":"Done","commit_id":"d416a02e7d6843dbe7d97526ab02455d20854a0b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"90875788d7f82907263d960a68bfc34d880fecf7","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                         self.driver.supported_vnic_types)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def test_smartnic_vnic_type(self):"},{"line_number":342,"context_line":"        cfg.CONF.set_override(\u0027baremetal_smartnic\u0027, True, \u0027AGENT\u0027)"},{"line_number":343,"context_line":"        test_driver \u003d mech_openvswitch.OpenvswitchMechanismDriver()"},{"line_number":344,"context_line":"        supported_vnic_types \u003d test_driver.supported_vnic_types"},{"line_number":345,"context_line":"        self.assertIn(portbindings.VNIC_SMARTNIC, supported_vnic_types)"}],"source_content_type":"text/x-python","patch_set":45,"id":"bfb3d3c7_d6e7e5e3","line":342,"updated":"2019-05-23 07:06:17.000000000","message":"do You really need that in this test?","commit_id":"e9943133e44db535fd3dfbdfae86a23bf82631af"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"bcf1ea18adefc2a80eaac4b515613d5dc85a77b0","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                         self.driver.supported_vnic_types)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def test_smartnic_vnic_type(self):"},{"line_number":342,"context_line":"        cfg.CONF.set_override(\u0027baremetal_smartnic\u0027, True, \u0027AGENT\u0027)"},{"line_number":343,"context_line":"        test_driver \u003d mech_openvswitch.OpenvswitchMechanismDriver()"},{"line_number":344,"context_line":"        supported_vnic_types \u003d test_driver.supported_vnic_types"},{"line_number":345,"context_line":"        self.assertIn(portbindings.VNIC_SMARTNIC, supported_vnic_types)"}],"source_content_type":"text/x-python","patch_set":45,"id":"bfb3d3c7_8974f269","line":342,"in_reply_to":"bfb3d3c7_d6e7e5e3","updated":"2019-05-23 07:53:39.000000000","message":"no we don\u0027t.","commit_id":"e9943133e44db535fd3dfbdfae86a23bf82631af"}],"releasenotes/notes/add-smartnic-support-53d25564bab0cbc5.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a7d15534203ad6303840af57453fbbaeb6858d66","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Add Support for Smart NIC in OVS ML2 mechanism driver."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Add Support for Smart NIC in OVS ML2 mechanism driver, by extending the Neutron OVS mechanism driver"},{"line_number":7,"context_line":"    and Neutron OVS Agent to bind the Neutron port for the baremetal host with Smart NIC."}],"source_content_type":"text/x-yaml","patch_set":27,"id":"9fdfeff1_f20e998a","line":6,"range":{"start_line":6,"start_character":33,"end_line":6,"end_character":40},"updated":"2019-02-25 20:04:35.000000000","message":"nit: ML2/OVS","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"61bc916ebe200229356b265bde09ae70e23d3853","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Add Support for Smart NIC in OVS ML2 mechanism driver."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Add Support for Smart NIC in OVS ML2 mechanism driver, by extending the Neutron OVS mechanism driver"},{"line_number":7,"context_line":"    and Neutron OVS Agent to bind the Neutron port for the baremetal host with Smart NIC."}],"source_content_type":"text/x-yaml","patch_set":27,"id":"9fdfeff1_d0f823c5","line":6,"range":{"start_line":6,"start_character":33,"end_line":6,"end_character":40},"in_reply_to":"9fdfeff1_f20e998a","updated":"2019-02-26 10:05:52.000000000","message":"Done","commit_id":"287ff43a7d4a6b840e6ab41fd1318453a6f49927"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"974df88c8112b7fca4a392b5ed3e26c4025a02c8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Add Support for Smart NIC in OVS mechanism driver."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Add Support for Smart NIC in OVS mechanism driver, by extending the Neutron OVS mechanism driver"}],"source_content_type":"text/x-yaml","patch_set":32,"id":"9fdfeff1_ab060085","line":3,"range":{"start_line":3,"start_character":33,"end_line":3,"end_character":36},"updated":"2019-03-01 03:39:36.000000000","message":"nit: I meant ML2/OVS here and below just since that\u0027s what we typically refer to it as.","commit_id":"6768c410bac2d1e0360ae86d38e5efae687ec4a1"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"e9deb47c780ace1bb7019ef931918a57d7d87b48","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Add Support for Smart NIC in OVS mechanism driver."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - |"},{"line_number":6,"context_line":"    Add Support for Smart NIC in OVS mechanism driver, by extending the Neutron OVS mechanism driver"}],"source_content_type":"text/x-yaml","patch_set":32,"id":"9fdfeff1_9b156e9e","line":3,"range":{"start_line":3,"start_character":33,"end_line":3,"end_character":36},"in_reply_to":"9fdfeff1_ab060085","updated":"2019-03-02 13:50:19.000000000","message":"Done","commit_id":"6768c410bac2d1e0360ae86d38e5efae687ec4a1"}]}
