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:
Aleksey Kasatkin 2016-04-07 18:46:11 +03:00
parent daab130239
commit 16a93df010
2 changed files with 33 additions and 5 deletions

View File

@ -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):

View File

@ -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"] = []