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
(cherry picked from commit 763d5c25bc
)
This commit is contained in:
parent
ce96d5a91e
commit
d307453cec
|
@ -240,11 +240,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()
|
||||
|
@ -347,14 +351,16 @@ def upgrade_attributes_node():
|
|||
|
||||
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
|
||||
|
@ -367,14 +373,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
|
||||
|
|
|
@ -1702,7 +1702,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 {}
|
||||
|
||||
|
|
|
@ -219,6 +219,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': {
|
||||
|
@ -796,22 +798,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
|
||||
|
||||
|
|
Loading…
Reference in New Issue