From a5f8d445ea434eadbafc02a89e959765f1bdebfd Mon Sep 17 00:00:00 2001 From: Nahim Alves de Souza Date: Fri, 4 Jun 2021 21:12:48 +0000 Subject: [PATCH] [NetApp] Fix default thin_provisioned volumes on AFF The NetApp ONTAP driver was creating thin provisioned volumes on AFF systems even when the thin provisioned extra spec was saying the contrary. ONTAP AFF systems create thin provisioned volumes by default, which differs from FAS systems, that creates thick provisioned volumes by default. The NetApp ONTAP driver was modified to fix this misbehavior. Change-Id: I9218bf0d7cb607dd75e892ce86af958d43a7fcdb Closes-Bug: #1929421 (cherry picked from commit c1db551775c512e42001a8183975f1abbc4c5253) (cherry picked from commit eb813e0800d5204cdb3ce9ec997c799c06f13ab1) (cherry picked from commit 596f01905dfcf9188f7e0d4400e73ce8fbf036bf) (cherry picked from commit a695aac60d2352d55f5a9afcb81dbaadb0f26d3e) (cherry picked from commit ddb34f8c0dde097b69ef661d30fb1ee1dad37238) --- .../netapp/dataontap/client/client_cmode.py | 3 +-- .../dataontap/client/test_client_cmode.py | 25 +++++++++++++++++++ ...olume-create-for-AFF-c22c72ce4c3fac16.yaml | 7 ++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 releasenotes/notes/bug-1929421-netapp-fix-thick-provision-volume-create-for-AFF-c22c72ce4c3fac16.yaml diff --git a/manila/share/drivers/netapp/dataontap/client/client_cmode.py b/manila/share/drivers/netapp/dataontap/client/client_cmode.py index de3e8be867..f767a80085 100644 --- a/manila/share/drivers/netapp/dataontap/client/client_cmode.py +++ b/manila/share/drivers/netapp/dataontap/client/client_cmode.py @@ -1557,11 +1557,10 @@ class NetAppCmodeClient(client_base.NetAppBaseClient): 'size': six.text_type(size_gb) + 'g', 'volume': volume_name, 'volume-type': volume_type, + 'space-reserve': ('none' if thin_provisioned else 'volume'), } if volume_type != 'dp': api_args['junction-path'] = '/%s' % volume_name - if thin_provisioned: - api_args['space-reserve'] = 'none' if snapshot_policy is not None: api_args['snapshot-policy'] = snapshot_policy if language is not None: diff --git a/manila/tests/share/drivers/netapp/dataontap/client/test_client_cmode.py b/manila/tests/share/drivers/netapp/dataontap/client/test_client_cmode.py index cb7638794b..905a3a2a33 100644 --- a/manila/tests/share/drivers/netapp/dataontap/client/test_client_cmode.py +++ b/manila/tests/share/drivers/netapp/dataontap/client/test_client_cmode.py @@ -2796,6 +2796,7 @@ class NetAppClientCmodeTestCase(test.TestCase): 'volume': fake.SHARE_NAME, 'volume-type': 'rw', 'junction-path': '/%s' % fake.SHARE_NAME, + 'space-reserve': 'volume', } self.client.send_request.assert_called_once_with('volume-create', @@ -2843,6 +2844,28 @@ class NetAppClientCmodeTestCase(test.TestCase): self.client.enable_dedup.assert_called_once_with(fake.SHARE_NAME) self.client.enable_compression.assert_called_once_with(fake.SHARE_NAME) + @ddt.data(True, False) + def test_create_volume_thin_provisioned(self, thin_provisioned): + + self.mock_object(self.client, 'send_request') + self.mock_object(self.client, 'update_volume_efficiency_attributes') + + self.client.create_volume( + fake.SHARE_AGGREGATE_NAME, fake.SHARE_NAME, 100, + thin_provisioned=thin_provisioned) + + volume_create_args = { + 'containing-aggr-name': fake.SHARE_AGGREGATE_NAME, + 'size': '100g', + 'volume': fake.SHARE_NAME, + 'volume-type': 'rw', + 'junction-path': '/%s' % fake.SHARE_NAME, + 'space-reserve': ('none' if thin_provisioned else 'volume'), + } + + self.client.send_request.assert_called_once_with('volume-create', + volume_create_args) + def test_create_encrypted_volume(self): self.mock_object(self.client, 'send_request') @@ -2859,6 +2882,7 @@ class NetAppClientCmodeTestCase(test.TestCase): 'volume-type': 'rw', 'junction-path': '/%s' % fake.SHARE_NAME, 'encrypt': 'true', + 'space-reserve': 'volume', } self.client.send_request.assert_called_once_with('volume-create', @@ -2879,6 +2903,7 @@ class NetAppClientCmodeTestCase(test.TestCase): 'volume': fake.SHARE_NAME, 'volume-type': 'rw', 'junction-path': '/%s' % fake.SHARE_NAME, + 'space-reserve': 'volume', } self.client.send_request.assert_called_once_with('volume-create', diff --git a/releasenotes/notes/bug-1929421-netapp-fix-thick-provision-volume-create-for-AFF-c22c72ce4c3fac16.yaml b/releasenotes/notes/bug-1929421-netapp-fix-thick-provision-volume-create-for-AFF-c22c72ce4c3fac16.yaml new file mode 100644 index 0000000000..cd22caefbd --- /dev/null +++ b/releasenotes/notes/bug-1929421-netapp-fix-thick-provision-volume-create-for-AFF-c22c72ce4c3fac16.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixed an issue with ONTAP AFF platforms while creating shares that forced + volumes to have efficient data saving even when the contrary was + specified. For more details, please refer to + `launchpad bug #1929421 `_