]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
qa/cephfs: add a method to destroy fs in filesystem.py
authorRishabh Dave <ridave@redhat.com>
Wed, 24 Jun 2020 13:30:04 +0000 (19:00 +0530)
committerRishabh Dave <ridave@redhat.com>
Thu, 10 Sep 2020 11:40:51 +0000 (17:10 +0530)
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 <ridave@redhat.com>
qa/tasks/cephfs/filesystem.py

index b32a73bdc5c347a6f4ab3e151827b7738b26e84f..b5a01290349e8ec233ad1db72986031f7bebfdca 100644 (file)
@@ -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: