summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorValerii Ponomarov <vponomar@redhat.com>2018-08-31 17:26:35 +0530
committerValerii Ponomarov <vponomar@redhat.com>2018-11-02 11:33:25 +0000
commit7a67efc52703882646015edbdaf52a090062844b (patch)
tree4bc605a82f3ea4d7c3240e5fd439289693f3f59c /tests
parent384cb369f256162606190e4df4767500668d3a7c (diff)
[CNS-1265] Recreate PVCs to make Gluster reuse released space
Create and delete lots of volumes so summary vol size is bigger than total available size making sure Gluster really reuses space of deleted volumes. Change-Id: I3cdc85df488a66cfed55c92438a126736dc06ff2
Diffstat (limited to 'tests')
-rw-r--r--tests/functional/common/arbiter/test_arbiter.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/tests/functional/common/arbiter/test_arbiter.py b/tests/functional/common/arbiter/test_arbiter.py
index 7ff383a6..8b86c640 100644
--- a/tests/functional/common/arbiter/test_arbiter.py
+++ b/tests/functional/common/arbiter/test_arbiter.py
@@ -496,3 +496,98 @@ class TestArbiterVolumeCreateExpandDelete(cns_baseclass.CnsBaseClass):
for data_brick in data_bricks:
self.assertIn(
data_brick.split(':')[0], data_nodes_ip_addresses)
+
+ def test_create_delete_pvcs_to_make_gluster_reuse_released_space(self):
+ """Test case CNS-1265"""
+ min_storage_gb = 10
+
+ # Set arbiter:disabled tags to the first 2 nodes
+ data_nodes = []
+ biggest_disks = []
+ heketi_server_url = self.cns_storage_class['storage_class1']['resturl']
+ self.assertGreater(len(self.node_id_list), 2)
+ for node_id in self.node_id_list[0:2]:
+ node_info = heketi_ops.heketi_node_info(
+ self.heketi_client_node, heketi_server_url, node_id, json=True)
+ biggest_disk_free_space = 0
+ for device in node_info['devices']:
+ disk_free_space = int(device['storage']['free'])
+ if disk_free_space < (min_storage_gb * 1024**2):
+ self.skipTest(
+ "Devices are expected to have more than "
+ "%sGb of free space" % min_storage_gb)
+ if disk_free_space > biggest_disk_free_space:
+ biggest_disk_free_space = disk_free_space
+ self._set_arbiter_tag_with_further_revert(
+ self.heketi_client_node, heketi_server_url, 'device',
+ device['id'], 'disabled',
+ revert_to=device.get('tags', {}).get('arbiter'))
+ biggest_disks.append(biggest_disk_free_space)
+ self._set_arbiter_tag_with_further_revert(
+ self.heketi_client_node, heketi_server_url, 'node',
+ node_id, 'disabled',
+ revert_to=node_info.get('tags', {}).get('arbiter'))
+ data_nodes.append(node_info)
+
+ # Set arbiter:required tag to all other nodes and their devices
+ arbiter_nodes = []
+ for node_id in self.node_id_list[2:]:
+ node_info = heketi_ops.heketi_node_info(
+ self.heketi_client_node, heketi_server_url, node_id, json=True)
+ for device in node_info['devices']:
+ self._set_arbiter_tag_with_further_revert(
+ self.heketi_client_node, heketi_server_url, 'device',
+ device['id'], 'required',
+ revert_to=device.get('tags', {}).get('arbiter'))
+ self._set_arbiter_tag_with_further_revert(
+ self.heketi_client_node, heketi_server_url, 'node',
+ node_id, 'required',
+ revert_to=node_info.get('tags', {}).get('arbiter'))
+ arbiter_nodes.append(node_info)
+
+ # Calculate size and amount of volumes to be created
+ pvc_size = int(min(biggest_disks) / 1024**2)
+ pvc_amount = max([len(n['devices']) for n in data_nodes]) + 1
+
+ # Create sc with gluster arbiter info
+ self._create_storage_class()
+
+ # Create and delete 3 small volumes concurrently
+ pvc_names = []
+ for i in range(3):
+ pvc_name = oc_create_pvc(
+ self.node, self.sc_name, pvc_name_prefix='arbiter-pvc',
+ pvc_size=int(pvc_size / 3))
+ pvc_names.append(pvc_name)
+ exception_exists = False
+ for pvc_name in pvc_names:
+ try:
+ verify_pvc_status_is_bound(self.node, pvc_name)
+ except Exception:
+ for pvc_name in pvc_names:
+ self.addCleanup(
+ wait_for_resource_absence, self.node, 'pvc', pvc_name)
+ for pvc_name in pvc_names:
+ self.addCleanup(oc_delete, self.node, 'pvc', pvc_name)
+ exception_exists = True
+ if exception_exists:
+ raise
+ for pvc_name in pvc_names:
+ oc_delete(self.node, 'pvc', pvc_name)
+ for pvc_name in pvc_names:
+ wait_for_resource_absence(self.node, 'pvc', pvc_name)
+
+ # Create and delete big volumes in a loop
+ for i in range(pvc_amount):
+ pvc_name = oc_create_pvc(
+ self.node, self.sc_name, pvc_name_prefix='arbiter-pvc',
+ pvc_size=pvc_size)
+ try:
+ verify_pvc_status_is_bound(self.node, pvc_name)
+ except Exception:
+ self.addCleanup(
+ wait_for_resource_absence, self.node, 'pvc', pvc_name)
+ self.addCleanup(oc_delete, self.node, 'pvc', pvc_name)
+ raise
+ oc_delete(self.node, 'pvc', pvc_name)
+ wait_for_resource_absence(self.node, 'pvc', pvc_name)