qa: add test for fs rm idempotency

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
This commit is contained in:
Patrick Donnelly 2021-01-08 12:23:21 -08:00
parent e4d826d7a0
commit 780a1dd5ff
No known key found for this signature in database
GPG Key ID: 3A2A7E25BEA8AADB
2 changed files with 51 additions and 18 deletions

View File

@ -680,6 +680,27 @@ class Filesystem(MDSCluster):
m.run_shell_payload(cmd)
m.umount_wait(require_clean=True)
def _remove_pool(self, name, **kwargs):
c = f'osd pool rm {name} {name} --yes-i-really-really-mean-it'
return self.mon_manager.ceph(c, **kwargs)
def rm(self, **kwargs):
c = f'fs rm {self.name} --yes-i-really-mean-it'
return self.mon_manager.ceph(c, **kwargs)
def remove_pools(self, data_pools):
self._remove_pool(self.get_metadata_pool_name())
for poolname in data_pools:
try:
self._remove_pool(poolname)
except CommandFailedError as e:
# EBUSY, this data pool is used by two metadata pools, let the
# 2nd pass delete it
if e.exitstatus == EBUSY:
pass
else:
raise
def destroy(self, reset_obj_attrs=True):
log.info(f'Destroying file system {self.name} and related pools')
@ -690,24 +711,10 @@ class Filesystem(MDSCluster):
data_pools = self.get_data_pool_names(refresh=True)
# make sure no MDSs are attached to given FS.
self.mon_manager.raw_cluster_cmd('fs', 'fail', self.name)
self.mon_manager.raw_cluster_cmd(
'fs', 'rm', self.name, '--yes-i-really-mean-it')
self.fail()
self.rm()
self.mon_manager.raw_cluster_cmd('osd', 'pool', 'rm',
self.get_metadata_pool_name(), self.get_metadata_pool_name(),
'--yes-i-really-really-mean-it')
for poolname in data_pools:
try:
self.mon_manager.raw_cluster_cmd('osd', 'pool', 'rm', poolname,
poolname, '--yes-i-really-really-mean-it')
except CommandFailedError as e:
# EBUSY, this data pool is used by two metadata pools, let the
# 2nd pass delete it
if e.exitstatus == EBUSY:
pass
else:
raise
self.remove_pools(data_pools)
if reset_obj_attrs:
self.id = None

View File

@ -5,7 +5,7 @@ from os.path import join as os_path_join
from teuthology.orchestra.run import CommandFailedError, Raw
from tasks.cephfs.cephfs_test_case import CephFSTestCase
from tasks.cephfs.filesystem import FileLayout
from tasks.cephfs.filesystem import FileLayout, FSMissing
from tasks.cephfs.fuse_mount import FuseMount
from tasks.cephfs.caps_helper import CapsHelper
@ -576,3 +576,29 @@ class TestSubCmdFsAuthorize(CapsHelper):
mounts = (self.mount_a, )
return filepaths, filedata, mounts, keyring
class TestAdminCommandIdempotency(CephFSTestCase):
"""
Tests for administration command idempotency.
"""
CLIENTS_REQUIRED = 0
MDSS_REQUIRED = 1
def test_rm_idempotency(self):
"""
That a removing a fs twice is idempotent.
"""
data_pools = self.fs.get_data_pool_names(refresh=True)
self.fs.fail()
self.fs.rm()
try:
self.fs.get_mds_map()
except FSMissing:
pass
else:
self.fail("get_mds_map should raise")
p = self.fs.rm()
self.assertIn("does not exist", p.stderr.getvalue())
self.fs.remove_pools(data_pools)