From 4573826d361b44c367ca54c5d0f7943346666ade Mon Sep 17 00:00:00 2001 From: Dave Hill Date: Tue, 11 Jul 2017 15:02:13 -0400 Subject: [PATCH] NetApp: Define 'preferred' to False instead of none Define preferred to false instead of none in the NetApp driver as setting it to none will trigger a traceback later on because the database doesn't allow null values to be inserted. "preferred" export location metadata must be set to true or false. warning logging is also added to the SQLAlchemy API if a none value is used to update the export location metadata. Change-Id: Ie7420c9286cc42eaa1361eeffe607b9b5b6b3fbd Closes-Bug: 1703660 --- manila/db/sqlalchemy/api.py | 5 +++++ .../share/drivers/netapp/dataontap/cluster_mode/lib_base.py | 2 +- .../drivers/netapp/dataontap/cluster_mode/test_lib_base.py | 2 +- ...-fix-netapp-driver-preferred-state-0ce1a62961cded35.yaml | 6 ++++++ 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 releasenotes/notes/bug-1703660-fix-netapp-driver-preferred-state-0ce1a62961cded35.yaml diff --git a/manila/db/sqlalchemy/api.py b/manila/db/sqlalchemy/api.py index f35397f3..f8f08617 100644 --- a/manila/db/sqlalchemy/api.py +++ b/manila/db/sqlalchemy/api.py @@ -2902,6 +2902,11 @@ def export_location_metadata_update(context, export_location_uuid, metadata, # that will not take effect using one session and we will rewrite, # in that case, single record - first one added with this call. session = get_session() + + if meta_value is None: + LOG.warning("%s should be properly defined in the driver.", + meta_key) + item = {"value": meta_value, "updated_at": timeutils.utcnow()} meta_ref = _export_location_metadata_get_query( diff --git a/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py b/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py index 3ddf85e2..fc002cc4 100644 --- a/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py +++ b/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py @@ -742,7 +742,7 @@ class NetAppCmodeFileStorageLibrary(object): if home_node: preferred = interface.get('home-node') == home_node else: - preferred = None + preferred = False addresses[address] = { 'is_admin_only': is_admin_only, diff --git a/manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_base.py b/manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_base.py index 510ad016..acb99197 100644 --- a/manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_base.py +++ b/manila/tests/share/drivers/netapp/dataontap/cluster_mode/test_lib_base.py @@ -1120,7 +1120,7 @@ class NetAppFileStorageLibraryTestCase(test.TestCase): expected = copy.deepcopy(fake.INTERFACE_ADDRESSES_WITH_METADATA) for key, value in expected.items(): - value['preferred'] = None + value['preferred'] = False self.assertEqual(expected, result) mock_get_aggregate_node.assert_called_once_with(fake.POOL_NAME) diff --git a/releasenotes/notes/bug-1703660-fix-netapp-driver-preferred-state-0ce1a62961cded35.yaml b/releasenotes/notes/bug-1703660-fix-netapp-driver-preferred-state-0ce1a62961cded35.yaml new file mode 100644 index 00000000..203aca70 --- /dev/null +++ b/releasenotes/notes/bug-1703660-fix-netapp-driver-preferred-state-0ce1a62961cded35.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixed the NetApp driver to report the correct value of the "preferred" + export location metadata where it cannot determine if there are any + "preferred" export locations.