From ee6e2297a127683b8514a878697c7dfd4e908d3b Mon Sep 17 00:00:00 2001 From: Rishabh Dave Date: Wed, 24 Jun 2020 19:00:04 +0530 Subject: [PATCH] qa/cephfs: add a method to destroy fs in filesystem.py And reset_obj_attrs parameter to it so that the caller of the method can choose to destroy the Ceph FS represented by the object without disturbing the object attributes. Signed-off-by: Rishabh Dave --- qa/tasks/cephfs/filesystem.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/qa/tasks/cephfs/filesystem.py b/qa/tasks/cephfs/filesystem.py index b32a73bdc5c..b5a01290349 100644 --- a/qa/tasks/cephfs/filesystem.py +++ b/qa/tasks/cephfs/filesystem.py @@ -12,6 +12,7 @@ import traceback from io import BytesIO from io import StringIO +from errno import EBUSY from teuthology.exceptions import CommandFailedError from teuthology import misc @@ -611,6 +612,37 @@ class Filesystem(MDSCluster): self.getinfo(refresh = True) + def destroy(self, reset_obj_attrs=True): + log.info('Destroying file system ' + self.name + ' and related ' + 'pools') + + # 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.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 self.get_data_pool_names(): + 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 + + if reset_obj_attrs: + self.id = None + self.name = None + self.metadata_pool_name = None + self.data_pool_name = None + self.data_pools = None + def check_pool_application(self, pool_name): osd_map = self.mon_manager.get_osd_dump_json() for pool in osd_map['pools']: @@ -619,7 +651,6 @@ class Filesystem(MDSCluster): if not "cephfs" in pool['application_metadata']: raise RuntimeError("Pool {pool_name} does not name cephfs as application!".\ format(pool_name=pool_name)) - def __del__(self): if getattr(self._ctx, "filesystem", None) == self: -- 2.47.3