From: Sage Weil Date: Wed, 19 Apr 2017 13:31:57 +0000 (-0400) Subject: ceph-disk: add --filestore argument, default to --bluestore X-Git-Tag: v12.1.0~241^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5cfe4cfa13ab35c449e2316ace4f56499139ec24;p=ceph.git ceph-disk: add --filestore argument, default to --bluestore Signed-off-by: Sage Weil Signed-off-by: Loic Dachary --- diff --git a/qa/workunits/ceph-disk/ceph-disk-no-lockbox b/qa/workunits/ceph-disk/ceph-disk-no-lockbox index aa730200edca..b9c1c6c39da0 100755 --- a/qa/workunits/ceph-disk/ceph-disk-no-lockbox +++ b/qa/workunits/ceph-disk/ceph-disk-no-lockbox @@ -1761,6 +1761,11 @@ class PrepareBluestore(Prepare): action='store_true', default=None, help='bluestore objectstore', ) + parser.add_argument( + '--filestore', + action='store_true', default=True, + help='IGNORED FORWARD COMPATIBIILTY HACK', + ) return parser @staticmethod @@ -2409,6 +2414,11 @@ class PrepareFilestoreData(PrepareData): self.set_data_partition() self.populate_data_path_device(*to_prepare_list) + def populate_data_path(self, path, *to_prepare_list): + super(PrepareFilestoreData, self).populate_data_path(path, + *to_prepare_list) + write_one_line(path, 'type', 'filestore') + class PrepareBluestoreData(PrepareData): diff --git a/qa/workunits/ceph-disk/ceph-disk-test.py b/qa/workunits/ceph-disk/ceph-disk-test.py index 6452dc6877f1..b80e1da89712 100644 --- a/qa/workunits/ceph-disk/ceph-disk-test.py +++ b/qa/workunits/ceph-disk/ceph-disk-test.py @@ -245,7 +245,6 @@ class TestCephDisk(object): # # bluestore # - c.conf['global']['enable experimental unrecoverable data corrupting features'] = '*' c.conf['global']['bluestore fsck on mount'] = 'true' c.save_conf() @@ -261,7 +260,7 @@ class TestCephDisk(object): disk = c.unused_disks()[0] osd_uuid = str(uuid.uuid1()) c.sh("ceph-disk --verbose zap " + disk) - c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose prepare --filestore --osd-uuid " + osd_uuid + " " + disk) c.wait_for_osd_up(osd_uuid) device = json.loads(c.sh("ceph-disk list --format json " + disk))[0] @@ -283,7 +282,7 @@ class TestCephDisk(object): c = CephDisk() disk = c.unused_disks()[0] osd_uuid = str(uuid.uuid1()) - c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + " " + disk) + c.sh("ceph-disk --verbose prepare --filestore --osd-uuid " + osd_uuid + " " + disk) c.wait_for_osd_up(osd_uuid) c.check_osd_status(osd_uuid) c.destroy_osd(osd_uuid) @@ -292,7 +291,7 @@ class TestCephDisk(object): c = CephDisk() disk = c.unused_disks()[0] osd_uuid = str(uuid.uuid1()) - c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + " " + disk) + c.sh("ceph-disk --verbose prepare --filestore --osd-uuid " + osd_uuid + " " + disk) c.wait_for_osd_up(osd_uuid) partition = c.get_osd_partition(osd_uuid) assert partition['type'] == 'data' @@ -374,7 +373,7 @@ class TestCephDisk(object): osd_uuid = str(uuid.uuid1()) journal_uuid = str(uuid.uuid1()) c.sh("ceph-disk --verbose zap " + disk) - c.sh(ceph_disk + " --verbose prepare " + + c.sh(ceph_disk + " --verbose prepare --filestore " + " --osd-uuid " + osd_uuid + " --journal-uuid " + journal_uuid + " --dmcrypt " + @@ -429,7 +428,7 @@ class TestCephDisk(object): c.sh("ceph-disk --verbose zap " + disk) c.conf['global']['osd objectstore'] = 'memstore' c.save_conf() - c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose prepare --filestore --osd-uuid " + osd_uuid + " " + disk) c.wait_for_osd_up(osd_uuid) device = json.loads(c.sh("ceph-disk list --format json " + disk))[0] @@ -447,7 +446,7 @@ class TestCephDisk(object): disk = c.unused_disks()[0] osd_uuid = str(uuid.uuid1()) c.sh("ceph-disk --verbose zap " + disk) - c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose prepare --filestore --osd-uuid " + osd_uuid + " " + disk) c.wait_for_osd_up(osd_uuid) device = json.loads(c.sh("ceph-disk list --format json " + disk))[0] @@ -552,7 +551,7 @@ class TestCephDisk(object): symlink = os.path.join(tempdir, 'osd') os.symlink(disk, symlink) c.sh("ceph-disk --verbose zap " + symlink) - c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose prepare --filestore --osd-uuid " + osd_uuid + " " + symlink) c.wait_for_osd_up(osd_uuid) device = json.loads(c.sh("ceph-disk list --format json " + symlink))[0] @@ -581,7 +580,7 @@ class TestCephDisk(object): c.sh("chown ceph:ceph " + tempdir + " || true") journal_file = os.path.join(tempdir, 'journal') osd_uuid = str(uuid.uuid1()) - c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose prepare --filestore --osd-uuid " + osd_uuid + " " + data_disk + " " + journal_file) c.wait_for_osd_up(osd_uuid) device = json.loads( @@ -629,7 +628,7 @@ class TestCephDisk(object): def activate_separated_journal(self, data_disk, journal_disk): c = CephDisk() osd_uuid = str(uuid.uuid1()) - c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose prepare --filestore --osd-uuid " + osd_uuid + " " + data_disk + " " + journal_disk) c.wait_for_osd_up(osd_uuid) device = json.loads( @@ -684,7 +683,7 @@ class TestCephDisk(object): # # Create another OSD with the journal partition of the previous OSD # - c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose prepare --filestore --osd-uuid " + osd_uuid + " " + data_disk + " " + journal_path) c.helper("pool_read_write 1") # 1 == pool size c.wait_for_osd_up(osd_uuid) @@ -722,7 +721,7 @@ class TestCephDisk(object): # osd_uuid = str(uuid.uuid1()) c.sh("ceph-disk --verbose zap " + multipath) - c.sh("ceph-disk --verbose prepare --osd-uuid " + osd_uuid + + c.sh("ceph-disk --verbose prepare --filestore --osd-uuid " + osd_uuid + " " + multipath) c.wait_for_osd_up(osd_uuid) device = json.loads( diff --git a/qa/workunits/ceph-helpers.sh b/qa/workunits/ceph-helpers.sh index d8f69604145d..bc682cab1ce4 100755 --- a/qa/workunits/ceph-helpers.sh +++ b/qa/workunits/ceph-helpers.sh @@ -514,7 +514,7 @@ function run_osd() { mkdir -p $osd_data ceph-disk $ceph_disk_args \ - prepare $osd_data || return 1 + prepare --filestore $osd_data || return 1 activate_osd $dir $id "$@" } @@ -535,9 +535,7 @@ function run_osd_bluestore() { ceph-disk $ceph_disk_args \ prepare --bluestore $osd_data || return 1 - local ceph_osd_args - ceph_osd_args+=" --enable-experimental-unrecoverable-data-corrupting-features=bluestore" - activate_osd $dir $id $ceph_osd_args "$@" + activate_osd $dir $id "$@" } function test_run_osd() { @@ -655,7 +653,6 @@ function activate_osd() { ceph_disk_args+=" --prepend-to-path=" local ceph_args="$CEPH_ARGS" - ceph_args+=" --enable-experimental-unrecoverable-data-corrupting-features=bluestore" ceph_args+=" --osd-failsafe-full-ratio=.99" ceph_args+=" --osd-journal-size=100" ceph_args+=" --osd-scrub-load-threshold=2000" @@ -1020,7 +1017,6 @@ function objectstore_tool() { journal_args=" --journal-path $osd_data/journal" fi ceph-objectstore-tool \ - --enable-experimental-unrecoverable-data-corrupting-features=bluestore \ --data-path $osd_data \ $journal_args \ "$@" || return 1 diff --git a/src/ceph-disk/ceph_disk/main.py b/src/ceph-disk/ceph_disk/main.py index c4ff1313b063..9f24655135b8 100755 --- a/src/ceph-disk/ceph_disk/main.py +++ b/src/ceph-disk/ceph_disk/main.py @@ -1941,7 +1941,9 @@ class Prepare(object): formatter_class=argparse.RawDescriptionHelpFormatter, description=textwrap.fill(textwrap.dedent("""\ If the --bluestore argument is given, a bluestore objectstore - will be used instead of the legacy filestore objectstore. + will be created. If --filestore is provided, a legacy FileStore + objectstore will be created. If neither is specified, we default + to BlueStore. When an entire device is prepared for bluestore, two partitions are created. The first partition is for metadata, @@ -2039,9 +2041,16 @@ class PrepareBluestore(Prepare): parser = argparse.ArgumentParser(add_help=False) parser.add_argument( '--bluestore', - action='store_true', default=None, + dest='bluestore', + action='store_true', default=True, help='bluestore objectstore', ) + parser.add_argument( + '--filestore', + dest='bluestore', + action='store_false', + help='filestore objectstore', + ) return parser @staticmethod @@ -2949,6 +2958,11 @@ class PrepareFilestoreData(PrepareData): self.set_data_partition() self.populate_data_path_device(*to_prepare_list) + def populate_data_path(self, path, *to_prepare_list): + super(PrepareFilestoreData, self).populate_data_path(path, + *to_prepare_list) + write_one_line(path, 'type', 'filestore') + class PrepareBluestoreData(PrepareData): @@ -3034,7 +3048,7 @@ def mkfs( '--setgroup', get_ceph_group(), ], ) - else: + elif osd_type == 'filestore': ceph_osd_mkfs( [ 'ceph-osd', @@ -3051,6 +3065,8 @@ def mkfs( '--setgroup', get_ceph_group(), ], ) + else: + raise Error('unrecognized objectstore type %s' % osd_type) def auth_key( diff --git a/src/ceph-disk/tests/ceph-disk.sh b/src/ceph-disk/tests/ceph-disk.sh index ae216bc102de..793016c30f67 100755 --- a/src/ceph-disk/tests/ceph-disk.sh +++ b/src/ceph-disk/tests/ceph-disk.sh @@ -173,7 +173,7 @@ function test_mark_init() { $mkdir -p $osd_data ${CEPH_DISK} $CEPH_DISK_ARGS \ - prepare --osd-uuid $osd_uuid $osd_data || return 1 + prepare --filestore --osd-uuid $osd_uuid $osd_data || return 1 ${CEPH_DISK} $CEPH_DISK_ARGS \ --verbose \ @@ -221,7 +221,7 @@ function test_activate_dir_magic() { mkdir -p $osd_data/fsid CEPH_ARGS="--fsid $uuid" \ - ${CEPH_DISK} $CEPH_DISK_ARGS prepare $osd_data > $dir/out 2>&1 + ${CEPH_DISK} $CEPH_DISK_ARGS prepare --filestore $osd_data > $dir/out 2>&1 grep --quiet 'Is a directory' $dir/out || return 1 ! [ -f $osd_data/magic ] || return 1 rmdir $osd_data/fsid @@ -229,7 +229,7 @@ function test_activate_dir_magic() { echo successfully prepare the OSD CEPH_ARGS="--fsid $uuid" \ - ${CEPH_DISK} $CEPH_DISK_ARGS prepare $osd_data 2>&1 | tee $dir/out + ${CEPH_DISK} $CEPH_DISK_ARGS prepare --filestore $osd_data 2>&1 | tee $dir/out grep --quiet 'Preparing osd data dir' $dir/out || return 1 grep --quiet $uuid $osd_data/ceph_fsid || return 1 [ -f $osd_data/magic ] || return 1 @@ -237,7 +237,7 @@ function test_activate_dir_magic() { echo will not override an existing OSD CEPH_ARGS="--fsid $($uuidgen)" \ - ${CEPH_DISK} $CEPH_DISK_ARGS prepare $osd_data 2>&1 | tee $dir/out + ${CEPH_DISK} $CEPH_DISK_ARGS prepare --filestore $osd_data 2>&1 | tee $dir/out grep --quiet 'Data dir .* already exists' $dir/out || return 1 grep --quiet $uuid $osd_data/ceph_fsid || return 1 } @@ -272,7 +272,7 @@ function test_activate() { fi ${CEPH_DISK} $CEPH_DISK_ARGS \ - prepare --osd-uuid $osd_uuid $to_prepare || return 1 + prepare --filestore --osd-uuid $osd_uuid $to_prepare || return 1 $timeoutcmd ${CEPH_DISK} $CEPH_DISK_ARGS \ activate \ @@ -308,7 +308,7 @@ function test_activate_dir_bluestore() { ${CEPH_DISK} $CEPH_DISK_ARGS \ prepare --bluestore --block-file --osd-uuid $osd_uuid $to_prepare || return 1 - CEPH_ARGS=" --osd-objectstore=bluestore --bluestore-fsck-on-mount=true --enable_experimental_unrecoverable_data_corrupting_features=* --bluestore-block-db-size=67108864 --bluestore-block-wal-size=134217728 --bluestore-block-size=10737418240 $CEPH_ARGS" \ + CEPH_ARGS=" --osd-objectstore=bluestore --bluestore-fsck-on-mount=true --bluestore-block-db-size=67108864 --bluestore-block-wal-size=134217728 --bluestore-block-size=10737418240 $CEPH_ARGS" \ $timeout $TIMEOUT ${CEPH_DISK} $CEPH_DISK_ARGS \ activate \ --mark-init=none \ @@ -376,7 +376,7 @@ function test_crush_device_class() { $mkdir -p $osd_data ${CEPH_DISK} $CEPH_DISK_ARGS \ - prepare --osd-uuid $osd_uuid \ + prepare --filestore --osd-uuid $osd_uuid \ --crush-device-class CRUSH_CLASS \ $osd_data || return 1 test -f $osd_data/crush_device_class || return 1 diff --git a/src/ceph-disk/tests/test_prepare.py b/src/ceph-disk/tests/test_prepare.py index 6ab8ca49a403..28713640a6ad 100644 --- a/src/ceph-disk/tests/test_prepare.py +++ b/src/ceph-disk/tests/test_prepare.py @@ -45,7 +45,7 @@ class Base(object): class TestPrepare(Base): - def test_init_dir(self): + def test_init_filestore_dir(self): parser = argparse.ArgumentParser('ceph-disk') subparsers = parser.add_subparsers() main.Prepare.set_subparser(subparsers) @@ -55,6 +55,7 @@ class TestPrepare(Base): args = parser.parse_args([ 'prepare', data, + '--filestore', ]) def set_type(self): @@ -72,7 +73,7 @@ class TestPrepare(Base): @mock.patch('stat.S_ISBLK') @mock.patch('ceph_disk.main.is_partition') - def test_init_dev(self, m_is_partition, m_s_isblk): + def test_init_filestore_dev(self, m_is_partition, m_s_isblk): m_s_isblk.return_value = True parser = argparse.ArgumentParser('ceph-disk') @@ -85,6 +86,7 @@ class TestPrepare(Base): args = parser.parse_args([ 'prepare', data, + '--filestore', ]) prepare = main.Prepare.factory(args) assert isinstance(prepare.data, main.PrepareData) @@ -92,6 +94,29 @@ class TestPrepare(Base): assert isinstance(prepare.journal, main.PrepareJournal) assert prepare.journal.is_device() + def test_init_default_dir(self): + parser = argparse.ArgumentParser('ceph-disk') + subparsers = parser.add_subparsers() + main.Prepare.set_subparser(subparsers) + + data = tempfile.mkdtemp() + main.setup_statedir(data) + args = parser.parse_args([ + 'prepare', + data, + ]) + + def set_type(self): + self.type = self.FILE + with mock.patch.multiple(main.PrepareData, + set_type=set_type): + prepare = main.Prepare.factory(args) + assert isinstance(prepare.data, main.PrepareBluestoreData) + assert prepare.data.is_file() + prepare.prepare() + assert os.path.exists(os.path.join(data, 'fsid')) + shutil.rmtree(data) + def test_set_subparser(self): parser = argparse.ArgumentParser('ceph-disk') subparsers = parser.add_subparsers() diff --git a/src/test/osd/osd-dup.sh b/src/test/osd/osd-dup.sh index 9957fda03712..bf48a39ea527 100755 --- a/src/test/osd/osd-dup.sh +++ b/src/test/osd/osd-dup.sh @@ -11,7 +11,6 @@ function run() { export CEPH_ARGS CEPH_ARGS+="--fsid=$(uuidgen) --auth-supported=none " CEPH_ARGS+="--mon-host=$CEPH_MON " - CEPH_ARGS+="--enable-experimental-unrecoverable-data-corrupting-features bluestore " # avoid running out of fds in rados bench CEPH_ARGS+="--filestore_wbthrottle_xfs_ios_hard_limit=900 " CEPH_ARGS+="--filestore_wbthrottle_btrfs_ios_hard_limit=900 " @@ -61,7 +60,7 @@ function TEST_filestore_to_bluestore() { --op dup || return 1 CEPH_ARGS=$O - run_osd $dir 0 || return 1 + run_osd_bluestore $dir 0 || return 1 while ! ceph osd stat | grep '3 up' ; do sleep 1 ; done ceph osd metadata 0 | grep bluestore || return 1 diff --git a/src/test/osd/osd-scrub-repair.sh b/src/test/osd/osd-scrub-repair.sh index ef81ac124b19..eb2bef526e39 100755 --- a/src/test/osd/osd-scrub-repair.sh +++ b/src/test/osd/osd-scrub-repair.sh @@ -407,17 +407,17 @@ function list_missing_erasure_coded() { done id=${osds0[0]} - ceph-objectstore-tool --data-path $dir/$id --enable-experimental-unrecoverable-data-corrupting-features=bluestore \ + ceph-objectstore-tool --data-path $dir/$id \ MOBJ0 remove || return 1 id=${osds0[1]} - ceph-objectstore-tool --data-path $dir/$id --enable-experimental-unrecoverable-data-corrupting-features=bluestore \ + ceph-objectstore-tool --data-path $dir/$id \ MOBJ0 remove || return 1 id=${osds1[1]} - ceph-objectstore-tool --data-path $dir/$id --enable-experimental-unrecoverable-data-corrupting-features=bluestore \ + ceph-objectstore-tool --data-path $dir/$id \ MOBJ1 remove || return 1 id=${osds1[2]} - ceph-objectstore-tool --data-path $dir/$id --enable-experimental-unrecoverable-data-corrupting-features=bluestore \ + ceph-objectstore-tool --data-path $dir/$id \ MOBJ1 remove || return 1 for id in $(seq 0 2) ; do