mirror of
https://github.com/ceph/ceph
synced 2025-02-23 02:57:21 +00:00
qa: add test for fs rm idempotency
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
This commit is contained in:
parent
e4d826d7a0
commit
780a1dd5ff
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user