Fixes for commit 6e4ef67269

* restriction by the release version for upgrade
  dpdk hugepages value and min value was added
* appropriate tests for migration were added
* comment for MIN_DPDK_HUGEPAGES_MEMORY was added
* fix for Node.dpdk_hugepages_attrs method was added

Change-Id: Ifb71a266d05abf34dbfa1753dbe279ee6cdd4bb0
Related-Bug: #1653081
This commit is contained in:
Anastasiya 2017-01-11 18:51:20 +04:00
parent b6a3b79414
commit 763d5c25bc
3 changed files with 55 additions and 8 deletions

View File

@ -241,11 +241,15 @@ DEFAULT_RELEASE_BOND_ATTRIBUTES = {
}
}
# minimal RAM amount for OVS+DPDK in MB
MIN_DPDK_HUGEPAGES_MEMORY = 1024
# version of Fuel when security group switch was added
FUEL_SECURITY_GROUPS_VERSION = '9.0'
# version of Fuel when DPDK hugepages was introduced
FUEL_DPDK_HUGEPAGES_VERSION = '9.0'
def update_vmware_attributes_metadata(upgrade):
connection = op.get_bind()
@ -401,14 +405,16 @@ def upgrade_cluster_attributes(connection):
def upgrade_release_node_attributes(connection):
select_query = sa.sql.text(
'SELECT id, node_attributes FROM releases '
'SELECT id, node_attributes, version FROM releases '
'WHERE node_attributes IS NOT NULL')
update_query = sa.sql.text(
'UPDATE releases SET node_attributes = :node_attributes '
'WHERE id = :release_id')
for release_id, node_attrs in connection.execute(select_query):
for release_id, node_attrs, version in connection.execute(select_query):
if not is_feature_supported(version, FUEL_DPDK_HUGEPAGES_VERSION):
continue
node_attrs = jsonutils.loads(node_attrs)
dpdk = node_attrs.setdefault('hugepages', {}).setdefault('dpdk', {})
dpdk['min'] = MIN_DPDK_HUGEPAGES_MEMORY
@ -421,14 +427,18 @@ def upgrade_release_node_attributes(connection):
def upgrade_node_attributes(connection):
select_query = sa.sql.text(
'SELECT id, attributes FROM nodes '
'WHERE attributes IS NOT NULL')
'SELECT nodes.id, attributes, version FROM nodes INNER JOIN clusters '
'ON clusters.id = nodes.cluster_id INNER JOIN releases '
'ON releases.id = clusters.release_id '
'WHERE nodes.attributes IS NOT NULL')
update_query = sa.sql.text(
'UPDATE nodes SET attributes = :attributes '
'WHERE id = :node_id')
for node_id, attrs in connection.execute(select_query):
for node_id, attrs, version in connection.execute(select_query):
if not is_feature_supported(version, FUEL_DPDK_HUGEPAGES_VERSION):
continue
attrs = jsonutils.loads(attrs)
dpdk = attrs.setdefault('hugepages', {}).setdefault('dpdk', {})
dpdk['min'] = MIN_DPDK_HUGEPAGES_MEMORY

View File

@ -1578,7 +1578,7 @@ class NodeAttributes(object):
"""
hugepages = cls._safe_get_hugepages(node)
if (not Node.dpdk_enabled(node) and 'dpdk' not in hugepages or
if (not Node.dpdk_enabled(node) or 'dpdk' not in hugepages or
not hugepages['dpdk']['value']):
return {}

View File

@ -216,6 +216,8 @@ MIN_DPDK_HUGEPAGES_VALUE = 1024
RELEASE_VERSION = '9.0'
# version of Fuel when tags was introduced
FUEL_TAGS_SUPPORT = '9.0'
# version of Fuel when DPDK hugepages was introduced
FUEL_DPDK_HUGEPAGES_VERSION = '9.0'
NEW_ROLES_META = {
'controller': {
@ -593,22 +595,57 @@ class TestAttributesUpdate(base.BaseAlembicMigrationTest):
def test_release_node_attributes_update(self):
releases = self.meta.tables['releases']
results = db.execute(
sa.select([releases.c.node_attributes]))
sa.select([releases.c.node_attributes],
releases.c.id.in_(
self.get_release_ids(RELEASE_VERSION))))
for node_attrs in results:
node_attrs = jsonutils.loads(node_attrs[0])
dpdk = node_attrs.setdefault('hugepages', {}).setdefault('dpdk',
{})
self.assertEqual(dpdk.get('min'), MIN_DPDK_HUGEPAGES_VALUE)
def test_release_node_attributes_no_update(self):
releases = self.meta.tables['releases']
releases_list = self.get_release_ids(RELEASE_VERSION, available=False)
results = db.execute(
sa.select([releases.c.node_attributes],
releases.c.id.in_(releases_list)))
for node_attrs in results:
node_attrs = jsonutils.loads(node_attrs[0])
dpdk = node_attrs.setdefault('hugepages', {}).setdefault('dpdk',
{})
self.assertEqual(dpdk.get('min'), 0)
def test_node_attributes_update(self):
nodes = self.meta.tables['nodes']
clusters = self.meta.tables['clusters']
releases_list = self.get_release_ids(RELEASE_VERSION)
results = db.execute(
sa.select([nodes.c.attributes]))
sa.select([nodes.c.attributes],
clusters.c.release_id.in_(releases_list)
).select_from(sa.join(clusters, nodes,
clusters.c.id ==
nodes.c.cluster_id)))
for attrs in results:
attrs = jsonutils.loads(attrs[0])
dpdk = attrs.setdefault('hugepages', {}).setdefault('dpdk', {})
self.assertEqual(dpdk.get('min'), MIN_DPDK_HUGEPAGES_VALUE)
def test_node_attributes_no_update(self):
nodes = self.meta.tables['nodes']
clusters = self.meta.tables['clusters']
releases_list = self.get_release_ids(RELEASE_VERSION, available=False)
results = db.execute(
sa.select([nodes.c.attributes],
clusters.c.release_id.in_(releases_list)
).select_from(sa.join(clusters, nodes,
clusters.c.id ==
nodes.c.cluster_id)))
for attrs in results:
attrs = jsonutils.loads(attrs[0])
dpdk = attrs.setdefault('hugepages', {}).setdefault('dpdk', {})
self.assertEqual(dpdk.get('min'), 0)
def get_release_ids(self, start_version, available=True):
"""Get release ids