DPDK is available for VLAN segmentation only
Neutron segmentation type of the environment is now taken into account when dpdk.available property is calculated. Change-Id: I5db8fcdbf04b368044f52cf02b7672c2748fc9b2 Partial-Bug: #1564866 Closes-Bug: #1562841
This commit is contained in:
parent
daab130239
commit
16a93df010
|
@ -17,6 +17,7 @@
|
|||
import six
|
||||
from sqlalchemy.sql import not_
|
||||
|
||||
from nailgun import consts
|
||||
from nailgun.db import db
|
||||
from nailgun.db.sqlalchemy import models
|
||||
from nailgun.objects import NailgunCollection
|
||||
|
@ -75,7 +76,22 @@ class NIC(DPDKMixin, NailgunObject):
|
|||
|
||||
@classmethod
|
||||
def dpdk_available(cls, instance, dpdk_drivers):
|
||||
return cls.get_dpdk_driver(instance, dpdk_drivers) is not None
|
||||
"""Checks availability of DPDK for given interface.
|
||||
|
||||
DPDK availability of the interface depends on presence of DPDK drivers
|
||||
and libraries for particular NIC. It may vary for different OpenStack
|
||||
releases. So, dpdk_drivers vary for different releases and it can be
|
||||
not empty only for node that is assigned to cluster currently. Also,
|
||||
DPDK is only supported for Neutron with VLAN segmentation currently.
|
||||
|
||||
:param instance: NodeNICInterface instance
|
||||
:param dpdk_drivers: DPDK drivers to PCI_ID mapping for cluster node is
|
||||
currently assigned to (dict)
|
||||
:return: True if DPDK is available
|
||||
"""
|
||||
return (cls.get_dpdk_driver(instance, dpdk_drivers) is not None and
|
||||
instance.node.cluster.network_config.segmentation_type ==
|
||||
consts.NEUTRON_SEGMENT_TYPES.vlan)
|
||||
|
||||
@classmethod
|
||||
def is_sriov_enabled(cls, instance):
|
||||
|
|
|
@ -300,12 +300,12 @@ class TestHandlers(BaseIntegrationTest):
|
|||
for conn in ('assigned_networks', ):
|
||||
self.assertEqual(resp_nic[conn], [])
|
||||
|
||||
@patch('nailgun.objects.Release.get_supported_dpdk_drivers')
|
||||
def test_update_dpdk_availability(self, drivers_mock):
|
||||
def check_update_dpdk_availability(self, segment_type, drivers_mock,
|
||||
dpdk_available):
|
||||
drivers_mock.return_value = {
|
||||
'driver_1': ['8765:4321']
|
||||
}
|
||||
cluster = self.env.create_cluster()
|
||||
cluster = self.env.create_cluster(net_segment_type=segment_type)
|
||||
meta = self.env.default_metadata()
|
||||
self.env.set_interfaces_in_meta(meta, [
|
||||
{'name': 'eth0', 'mac': '00:00:00:00:00:00', 'current_speed': 1,
|
||||
|
@ -340,9 +340,21 @@ class TestHandlers(BaseIntegrationTest):
|
|||
resp_nic['interface_properties']['dpdk'],
|
||||
{
|
||||
'enabled': False,
|
||||
'available': True
|
||||
'available': dpdk_available
|
||||
})
|
||||
|
||||
@patch('nailgun.objects.Release.get_supported_dpdk_drivers')
|
||||
def test_update_dpdk_unavailable_tun(self, drivers_mock):
|
||||
self.check_update_dpdk_availability(consts.NEUTRON_SEGMENT_TYPES.tun,
|
||||
drivers_mock,
|
||||
False)
|
||||
|
||||
@patch('nailgun.objects.Release.get_supported_dpdk_drivers')
|
||||
def test_update_dpdk_available_vlan(self, drivers_mock):
|
||||
self.check_update_dpdk_availability(consts.NEUTRON_SEGMENT_TYPES.vlan,
|
||||
drivers_mock,
|
||||
True)
|
||||
|
||||
def test_NIC_offloading_modes(self):
|
||||
meta = self.env.default_metadata()
|
||||
meta["interfaces"] = []
|
||||
|
|
Loading…
Reference in New Issue