new_fs_name = 'new_cephfs'
client_id = 'test_new_cephfs'
+ self.run_ceph_cmd(f'fs fail {self.fs.name}')
+ sleep(5)
self.run_ceph_cmd(f'fs rename {orig_fs_name} {new_fs_name} --yes-i-really-mean-it')
+ self.run_ceph_cmd(f'fs set {new_fs_name} joinable true')
+ sleep(5)
# authorize a cephx ID access to the renamed file system.
# use the ID to write to the file system.
orig_fs_name = self.fs.name
new_fs_name = 'new_cephfs'
+ self.run_ceph_cmd(f'fs fail {self.fs.name}')
+ sleep(5)
self.run_ceph_cmd(f'fs rename {orig_fs_name} {new_fs_name} --yes-i-really-mean-it')
self.run_ceph_cmd(f'fs rename {orig_fs_name} {new_fs_name} --yes-i-really-mean-it')
+ self.run_ceph_cmd(f'fs set {new_fs_name} joinable true')
+ sleep(5)
# original file system name does not appear in `fs ls` command
self.assertFalse(self.fs.exists())
new_fs_name = 'new_cephfs'
data_pool = self.fs.get_data_pool_name()
metadata_pool = self.fs.get_metadata_pool_name()
+ self.run_ceph_cmd(f'fs fail {self.fs.name}')
+ sleep(5)
self.run_ceph_cmd(f'fs rename {orig_fs_name} {new_fs_name} --yes-i-really-mean-it')
+ self.run_ceph_cmd(f'fs set {new_fs_name} joinable true')
+ sleep(5)
try:
self.run_ceph_cmd(f"fs new {orig_fs_name} {metadata_pool} {data_pool}")
"""
That renaming a file system without '--yes-i-really-mean-it' flag fails.
"""
+ self.run_ceph_cmd(f'fs fail {self.fs.name}')
+ sleep(5)
try:
self.run_ceph_cmd(f"fs rename {self.fs.name} new_fs")
except CommandFailedError as ce:
else:
self.fail("expected renaming of file system without the "
"'--yes-i-really-mean-it' flag to fail ")
+ self.run_ceph_cmd(f'fs set {self.fs.name} joinable true')
def test_fs_rename_fails_for_non_existent_fs(self):
"""
That renaming a non-existent file system fails.
"""
+ self.run_ceph_cmd(f'fs fail {self.fs.name}')
+ sleep(5)
try:
self.run_ceph_cmd("fs rename non_existent_fs new_fs --yes-i-really-mean-it")
except CommandFailedError as ce:
"""
self.fs2 = self.mds_cluster.newfs(name='cephfs2', create=True)
+ self.run_ceph_cmd(f'fs fail {self.fs.name}')
+ sleep(5)
try:
self.run_ceph_cmd(f"fs rename {self.fs.name} {self.fs2.name} --yes-i-really-mean-it")
except CommandFailedError as ce:
"invalid error code on renaming to a fs name that is already in use")
else:
self.fail("expected renaming to a new file system name that is already in use to fail.")
+ self.run_ceph_cmd(f'fs set {self.fs.name} joinable true')
def test_fs_rename_fails_with_mirroring_enabled(self):
"""
new_fs_name = 'new_cephfs'
self.run_ceph_cmd(f'fs mirror enable {orig_fs_name}')
+ self.run_ceph_cmd(f'fs fail {self.fs.name}')
+ sleep(5)
try:
self.run_ceph_cmd(f'fs rename {orig_fs_name} {new_fs_name} --yes-i-really-mean-it')
except CommandFailedError as ce:
else:
self.fail("expected renaming of a mirrored file system to fail")
self.run_ceph_cmd(f'fs mirror disable {orig_fs_name}')
+ self.run_ceph_cmd(f'fs set {self.fs.name} joinable true')
+
+ def test_rename_when_fs_is_online(self):
+ '''
+ Test that the command "ceph fs swap" command fails when first of the
+ two of FSs isn't failed/down.
+ '''
+ client_id = 'test_new_cephfs'
+ new_fs_name = 'new_cephfs'
+ self.negtest_ceph_cmd(
+ args=(f'fs rename {self.fs.name} {new_fs_name} '
+ '--yes-i-really-mean-it'),
+ errmsgs=(f"CephFS '{self.fs.name}' is not offline. Before "
+ "renaming a CephFS, it must be marked as down. See "
+ "`ceph fs fail`."),
+ retval=errno.EPERM)
+
+ self.fs.getinfo()
+ keyring = self.fs.authorize(client_id, ('/', 'rw'))
+ keyring_path = self.mount_a.client_remote.mktemp(data=keyring)
+ self.mount_a.remount(client_id=client_id,
+ client_keyring_path=keyring_path,
+ cephfs_mntpt='/',
+ cephfs_name=self.fs.name)
+
+ self.check_pool_application_metadata_key_value(
+ self.fs.get_data_pool_name(), 'cephfs', 'data', self.fs.name)
+ self.check_pool_application_metadata_key_value(
+ self.fs.get_metadata_pool_name(), 'cephfs', 'metadata',
+ self.fs.name)
class TestDump(CephFSTestCase):
oldvolname = self.volname
newvolname = self._gen_vol_name()
new_data_pool, new_metadata_pool = f"cephfs.{newvolname}.data", f"cephfs.{newvolname}.meta"
+
+ self.run_ceph_cmd(f'fs fail {oldvolname}')
self._fs_cmd("volume", "rename", oldvolname, newvolname,
"--yes-i-really-mean-it")
+ self.run_ceph_cmd(f'fs set {newvolname} joinable true')
+
volumels = json.loads(self._fs_cmd('volume', 'ls'))
volnames = [volume['name'] for volume in volumels]
# volume name changed
oldvolname = self.volname
newvolname = self._gen_vol_name()
new_data_pool, new_metadata_pool = f"cephfs.{newvolname}.data", f"cephfs.{newvolname}.meta"
+
+ self.run_ceph_cmd(f'fs fail {oldvolname}')
self._fs_cmd("volume", "rename", oldvolname, newvolname,
"--yes-i-really-mean-it")
self._fs_cmd("volume", "rename", oldvolname, newvolname,
"--yes-i-really-mean-it")
+ self.run_ceph_cmd(f'fs set {newvolname} joinable true')
+
volumels = json.loads(self._fs_cmd('volume', 'ls'))
volnames = [volume['name'] for volume in volumels]
self.assertIn(newvolname, volnames)
"""
newvolname = self._gen_vol_name()
+ self.run_ceph_cmd(f'fs fail {self.volname}')
try:
self._fs_cmd("volume", "rename", self.volname, newvolname)
except CommandFailedError as ce:
else:
self.fail("expected renaming of FS volume to fail without the "
"'--yes-i-really-mean-it' flag")
+ self.run_ceph_cmd(f'fs set {self.volname} joinable true')
def test_volume_rename_for_more_than_one_data_pool(self):
"""
self.fs.get_pool_names(refresh=True)
orig_data_pool_names = list(self.fs.data_pools.values())
new_metadata_pool = f"cephfs.{newvolname}.meta"
+
+ self.run_ceph_cmd(f'fs fail {oldvolname}')
self._fs_cmd("volume", "rename", self.volname, newvolname,
"--yes-i-really-mean-it")
+ self.run_ceph_cmd(f'fs set {newvolname} joinable true')
+
volumels = json.loads(self._fs_cmd('volume', 'ls'))
volnames = [volume['name'] for volume in volumels]
# volume name changed
# data pool names unchanged
self.assertCountEqual(orig_data_pool_names, list(self.fs.data_pools.values()))
+ def test_rename_when_fs_is_online(self):
+ for m in self.mounts:
+ m.umount_wait()
+ newvolname = self._gen_vol_name()
+
+ self.negtest_ceph_cmd(
+ args=(f'fs volume rename {self.volname} {newvolname} '
+ '--yes-i-really-mean-it'),
+ errmsgs=(f"CephFS '{self.volname}' is not offline. Before "
+ "renaming a CephFS, it must be marked as down. See "
+ "`ceph fs fail`."),
+ retval=errno.EPERM)
+
def test_volume_info(self):
"""
Tests the 'fs volume info' command