)]}'
{"neutron/plugins/ml2/drivers/openvswitch/agent/common/constants.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"57e0a565fce8b5a4547c1b08b2cebca9f7ceea37","unresolved":false,"context_lines":[{"line_number":204,"context_line":"# ovs_cleanup script is used."},{"line_number":205,"context_line":"SKIP_CLEANUP \u003d \u0027skip_cleanup\u0027"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"VIF_OVS_DPDK \u003d \u0027ovs_dpdk\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_78a81b8b","line":207,"updated":"2019-05-14 16:14:29.000000000","message":"as i said on the nova review this is incorrect.\n\nwe shoudl not be intoducing a new vif type fro this.\n\neven if we were to do this we woudl have to extend the vif_type defintions in neutron lib https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/portbindings.py#L85-L104\n\nthat would be an api extention which requirs a spec but ignoring that for a moment we have decied years ago to never have a vif_ovs_dpdk. this should not be needed.","commit_id":"27e1af603eaa44021ace0ae15b59d15bb1ae60c2"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"a7ce447060be06ef35d76e9a936bff12e6018002","unresolved":false,"context_lines":[{"line_number":204,"context_line":"# ovs_cleanup script is used."},{"line_number":205,"context_line":"SKIP_CLEANUP \u003d \u0027skip_cleanup\u0027"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"VIF_OVS_DPDK \u003d \u0027ovs_dpdk\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_071092a7","line":207,"in_reply_to":"dfbec78f_78a81b8b","updated":"2019-05-15 10:30:56.000000000","message":"Done","commit_id":"27e1af603eaa44021ace0ae15b59d15bb1ae60c2"}],"neutron/plugins/ml2/drivers/openvswitch/mech_driver/mech_openvswitch.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"57e0a565fce8b5a4547c1b08b2cebca9f7ceea37","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def get_vif_type(self, context, agent, segment):"},{"line_number":133,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":134,"context_line":"        vnic_type \u003d context.current[portbindings.VNIC_TYPE]"},{"line_number":135,"context_line":"        is_netdev \u003d (agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":136,"context_line":"                     a_const.OVS_DATAPATH_NETDEV)"},{"line_number":137,"context_line":"        if vnic_type \u003d\u003d portbindings.VNIC_DIRECT and is_netdev:"},{"line_number":138,"context_line":"            return a_const.VIF_OVS_DPDK"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if (any(x in caps.get(\u0027iface_types\u0027, []) for x"},{"line_number":141,"context_line":"                in [a_const.OVS_DPDK_VHOST_USER,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_98b4efd2","line":138,"range":{"start_line":134,"start_character":7,"end_line":138,"end_character":39},"updated":"2019-05-14 16:14:29.000000000","message":"we should continue to use VIF_OVS for all direct mode vfs.\n\nwhther it s a dpdk represntor port or kenel represntor shoudl not change that.","commit_id":"27e1af603eaa44021ace0ae15b59d15bb1ae60c2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"58d38ab61eb56500104e3d2732f3b910f831c8b4","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def get_vif_type(self, context, agent, segment):"},{"line_number":133,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":134,"context_line":"        vnic_type \u003d context.current[portbindings.VNIC_TYPE]"},{"line_number":135,"context_line":"        is_netdev \u003d (agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":136,"context_line":"                     a_const.OVS_DATAPATH_NETDEV)"},{"line_number":137,"context_line":"        if vnic_type \u003d\u003d portbindings.VNIC_DIRECT and is_netdev:"},{"line_number":138,"context_line":"            return a_const.VIF_OVS_DPDK"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if (any(x in caps.get(\u0027iface_types\u0027, []) for x"},{"line_number":141,"context_line":"                in [a_const.OVS_DPDK_VHOST_USER,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_1129b5e4","line":138,"range":{"start_line":134,"start_character":7,"end_line":138,"end_character":39},"in_reply_to":"dfbec78f_4202013f","updated":"2019-05-15 02:06:50.000000000","message":"yes we do that intentionally so that we dotn need to have an ovs-dpdk vif type\n\nif we had an ovs-dpdk vif type i woudl expect that to model vhost user not the dpdk inferface type if the vnic type is normal which is not how this new vif type is beign proposed.\n\nfrom an os-vif point of view we can use the datapath type as a switch to choose between kernel and dpdk hardware offload when we are using the hostdev options.\n\nfrom a nova perspective there is no difference in the xml genereted for kernel or dpdk. both are just using the hostdev elemnt to passthough the vf to the vm.\n\nit shoudl be noted there is a different mechanisum that uses vfio-mediated devices called vhost-vifo that does not pass the vf to the vm but still does a hardware offload but i think if that is enabled in the futrue either the virto-forward vnic can be reused for a vhost-vifo vnic can be added.\n\nfor vhost-vfio i would still expect VIF_TYPE_OVS to be used too. the vnic would different as the as the interface presented to the guest is different in this case vs direct vf passthough.","commit_id":"27e1af603eaa44021ace0ae15b59d15bb1ae60c2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6eb57c969c19e31fc25dfa00eb34a06d3ed084fc","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def get_vif_type(self, context, agent, segment):"},{"line_number":133,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":134,"context_line":"        vnic_type \u003d context.current[portbindings.VNIC_TYPE]"},{"line_number":135,"context_line":"        is_netdev \u003d (agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":136,"context_line":"                     a_const.OVS_DATAPATH_NETDEV)"},{"line_number":137,"context_line":"        if vnic_type \u003d\u003d portbindings.VNIC_DIRECT and is_netdev:"},{"line_number":138,"context_line":"            return a_const.VIF_OVS_DPDK"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if (any(x in caps.get(\u0027iface_types\u0027, []) for x"},{"line_number":141,"context_line":"                in [a_const.OVS_DPDK_VHOST_USER,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_6c9cdc0d","line":138,"range":{"start_line":134,"start_character":7,"end_line":138,"end_character":39},"in_reply_to":"dfbec78f_4cc47891","updated":"2019-05-14 16:58:07.000000000","message":"if neutron set vif_type\u003dovs we should not generate a vhost_user port if the data path is netdev so really the only change need is to ensure if the vnic_type is direct that we return VIF_OVS regardless of the datapath type so i guess a trivail neutron change is needed here to do that but we do not need a new vif_type","commit_id":"27e1af603eaa44021ace0ae15b59d15bb1ae60c2"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"f01ef66bcff6baea75a1cbbea5aebe670bc9db9d","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def get_vif_type(self, context, agent, segment):"},{"line_number":133,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":134,"context_line":"        vnic_type \u003d context.current[portbindings.VNIC_TYPE]"},{"line_number":135,"context_line":"        is_netdev \u003d (agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":136,"context_line":"                     a_const.OVS_DATAPATH_NETDEV)"},{"line_number":137,"context_line":"        if vnic_type \u003d\u003d portbindings.VNIC_DIRECT and is_netdev:"},{"line_number":138,"context_line":"            return a_const.VIF_OVS_DPDK"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if (any(x in caps.get(\u0027iface_types\u0027, []) for x"},{"line_number":141,"context_line":"                in [a_const.OVS_DPDK_VHOST_USER,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_4202013f","line":138,"range":{"start_line":134,"start_character":7,"end_line":138,"end_character":39},"in_reply_to":"dfbec78f_6c9cdc0d","updated":"2019-05-14 19:07:37.000000000","message":"I see that we are passing the  OVS_DATAPATH_TYPE in the vif details so we can use this to distinguish between OVS Kernel and OVS DPDK instead of the new vif type.","commit_id":"27e1af603eaa44021ace0ae15b59d15bb1ae60c2"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"a7ce447060be06ef35d76e9a936bff12e6018002","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def get_vif_type(self, context, agent, segment):"},{"line_number":133,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":134,"context_line":"        vnic_type \u003d context.current[portbindings.VNIC_TYPE]"},{"line_number":135,"context_line":"        is_netdev \u003d (agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":136,"context_line":"                     a_const.OVS_DATAPATH_NETDEV)"},{"line_number":137,"context_line":"        if vnic_type \u003d\u003d portbindings.VNIC_DIRECT and is_netdev:"},{"line_number":138,"context_line":"            return a_const.VIF_OVS_DPDK"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if (any(x in caps.get(\u0027iface_types\u0027, []) for x"},{"line_number":141,"context_line":"                in [a_const.OVS_DPDK_VHOST_USER,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_a72ae6d7","line":138,"range":{"start_line":134,"start_character":7,"end_line":138,"end_character":39},"in_reply_to":"dfbec78f_98b4efd2","updated":"2019-05-15 10:30:56.000000000","message":"Done","commit_id":"27e1af603eaa44021ace0ae15b59d15bb1ae60c2"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b88cfb86b8504958a971f48cec8388b17b81c8cc","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def get_vif_type(self, context, agent, segment):"},{"line_number":133,"context_line":"        caps \u003d agent[\u0027configurations\u0027].get(\u0027ovs_capabilities\u0027, {})"},{"line_number":134,"context_line":"        vnic_type \u003d context.current[portbindings.VNIC_TYPE]"},{"line_number":135,"context_line":"        is_netdev \u003d (agent[\u0027configurations\u0027].get(\u0027datapath_type\u0027) \u003d\u003d"},{"line_number":136,"context_line":"                     a_const.OVS_DATAPATH_NETDEV)"},{"line_number":137,"context_line":"        if vnic_type \u003d\u003d portbindings.VNIC_DIRECT and is_netdev:"},{"line_number":138,"context_line":"            return a_const.VIF_OVS_DPDK"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if (any(x in caps.get(\u0027iface_types\u0027, []) for x"},{"line_number":141,"context_line":"                in [a_const.OVS_DPDK_VHOST_USER,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_4cc47891","line":138,"range":{"start_line":134,"start_character":7,"end_line":138,"end_character":39},"in_reply_to":"dfbec78f_98b4efd2","updated":"2019-05-14 16:41:09.000000000","message":"I agree with sean.\n\nI\u0027ll have to go check but I\u0027m unsure what happens if datapath_type \u003d netdev and you set vnic_type \u003d direct.\n\nIf neutron sends an ovs vif then all is well, but if not, then there still needs to be a small fix here and the unit tests updated to test that case.","commit_id":"27e1af603eaa44021ace0ae15b59d15bb1ae60c2"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"1ee2c7c086bf46f03fdd8a99de3725abcaebd282","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        super(OpenvswitchMechanismDriver, self).bind_port(context)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def get_vif_type(self, context, agent, segment):"},{"line_number":133,"context_line":"        if (context.current[portbindings.VNIC_TYPE] \u003d\u003d"},{"line_number":134,"context_line":"                portbindings.VNIC_DIRECT):"},{"line_number":135,"context_line":"            return portbindings.VIF_TYPE_OVS"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_44cb6671","line":133,"range":{"start_line":133,"start_character":27,"end_line":133,"end_character":51},"updated":"2019-05-21 16:02:30.000000000","message":"What about the \"unlikely\" event the port doesn\u0027t have a vnic_type defined? I\u0027m not sure we want this to raise an attribute error. Perhaps a check for whether vnic_type is set would be in order? Perhaps something like this:\n\nif context.current.get(portbindings.VNIC_TYPE) \u003d\u003d portbindings.VNIC_DIRECT:\n    return portbindings.VIF_TYPE_OVS","commit_id":"f8cdd8bffb0e1e7ed42ef66e1535ff56f05d83e8"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"6fecd4af65815e301393667a5cbfa7d5499e1bab","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        super(OpenvswitchMechanismDriver, self).bind_port(context)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def get_vif_type(self, context, agent, segment):"},{"line_number":133,"context_line":"        if (context.current[portbindings.VNIC_TYPE] \u003d\u003d"},{"line_number":134,"context_line":"                portbindings.VNIC_DIRECT):"},{"line_number":135,"context_line":"            return portbindings.VIF_TYPE_OVS"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_f71b2718","line":133,"range":{"start_line":133,"start_character":27,"end_line":133,"end_character":51},"in_reply_to":"bfb3d3c7_04f9ee4b","updated":"2019-05-21 19:17:03.000000000","message":"well, better safe than sorry :)","commit_id":"f8cdd8bffb0e1e7ed42ef66e1535ff56f05d83e8"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8cd3696f69be12b9944cb525d83da559dd8eba93","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        super(OpenvswitchMechanismDriver, self).bind_port(context)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def get_vif_type(self, context, agent, segment):"},{"line_number":133,"context_line":"        if (context.current[portbindings.VNIC_TYPE] \u003d\u003d"},{"line_number":134,"context_line":"                portbindings.VNIC_DIRECT):"},{"line_number":135,"context_line":"            return portbindings.VIF_TYPE_OVS"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_04f9ee4b","line":133,"range":{"start_line":133,"start_character":27,"end_line":133,"end_character":51},"in_reply_to":"bfb3d3c7_44cb6671","updated":"2019-05-21 16:20:06.000000000","message":"it will be vnic_type normal in that case.\n\nits not valid for a port not to have a vnic type as far as i am aware.\n\nthis could be change to context.current.get(portbinding.VNIC_TYPE) \u003d\u003d ...\nto guard against that but i dont think its needed.\n\nget will return None by default if no defualt is provided which will not equal VNIC_DIRECT so it will give the correct behavior but other things would break if you did not have a vnic type.","commit_id":"f8cdd8bffb0e1e7ed42ef66e1535ff56f05d83e8"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"f70cb982e5e321d02fbc7743979b31067390d90c","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        super(OpenvswitchMechanismDriver, self).bind_port(context)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def get_vif_type(self, context, agent, segment):"},{"line_number":133,"context_line":"        if (context.current[portbindings.VNIC_TYPE] \u003d\u003d"},{"line_number":134,"context_line":"                portbindings.VNIC_DIRECT):"},{"line_number":135,"context_line":"            return portbindings.VIF_TYPE_OVS"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bfb3d3c7_f01c8d6b","line":133,"range":{"start_line":133,"start_character":27,"end_line":133,"end_character":51},"in_reply_to":"bfb3d3c7_f71b2718","updated":"2019-05-21 21:42:12.000000000","message":"Sean makes a good point, I\u0027m sure things will break in other places. I may be engaging in bike-shedding, but I would prefer not to see an AttributeError raised if it can be avoided. The current behavior is that this method doesn\u0027t directly access the vnic_type and so it passes the potential problem along. I only suggested this tweak to maintain that behavior.","commit_id":"f8cdd8bffb0e1e7ed42ef66e1535ff56f05d83e8"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/mech_driver/test_mech_openvswitch.py":[{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"a94b9aaa4e4a62199a99f802744a55c33afc92ad","unresolved":false,"context_lines":[{"line_number":297,"context_line":"                                          self.AGENT_SYSTEM, None)"},{"line_number":298,"context_line":"        self.assertEqual(portbindings.VIF_TYPE_OVS, result)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        direct_port_cxt \u003d base.FakePortContext("},{"line_number":301,"context_line":"            None, None, None, vnic_type\u003dportbindings.VNIC_DIRECT)"},{"line_number":302,"context_line":"        result \u003d self.driver.get_vif_type("},{"line_number":303,"context_line":"            direct_port_cxt, self.AGENT, None)"},{"line_number":304,"context_line":"        self.assertEqual(portbindings.VIF_TYPE_OVS, result)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_65a88f8c","line":303,"range":{"start_line":300,"start_character":8,"end_line":303,"end_character":46},"updated":"2019-05-27 09:21:34.000000000","message":"minor nit: the indentation style here is different from the rest of the function","commit_id":"801d384e3fa088d67f09be6d87555decb620331a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"2c740760e4bc373423669f3b971141ce26378ca5","unresolved":false,"context_lines":[{"line_number":297,"context_line":"                                          self.AGENT_SYSTEM, None)"},{"line_number":298,"context_line":"        self.assertEqual(portbindings.VIF_TYPE_OVS, result)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        direct_port_cxt \u003d base.FakePortContext("},{"line_number":301,"context_line":"            None, None, None, vnic_type\u003dportbindings.VNIC_DIRECT)"},{"line_number":302,"context_line":"        result \u003d self.driver.get_vif_type("},{"line_number":303,"context_line":"            direct_port_cxt, self.AGENT, None)"},{"line_number":304,"context_line":"        self.assertEqual(portbindings.VIF_TYPE_OVS, result)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_00266169","line":303,"range":{"start_line":300,"start_character":8,"end_line":303,"end_character":46},"in_reply_to":"bfb3d3c7_65a88f8c","updated":"2019-05-27 10:30:16.000000000","message":"Done","commit_id":"801d384e3fa088d67f09be6d87555decb620331a"}],"releasenotes/notes/ovs-dpdk-rep-port-40fe628974040786.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"eeb17d3b3778a87ffb2779983935be7a6b67235c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds support for OVS DPDK port representors, a direct port on"},{"line_number":5,"context_line":"    a netdev datapath is considered a DPDK representor port."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"bfb3d3c7_9beba2da","line":5,"range":{"start_line":4,"start_character":4,"end_line":5,"end_character":60},"updated":"2019-05-27 12:01:59.000000000","message":"nit: technically we consider a direct port on any datapath\nto now be a representor interfaces for a hardware offloaded interface.\n\nbut this is also correct","commit_id":"47390226f5c755a083b0f181f7a81b480069c8a9"}]}
