]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-disk: add --filestore argument, default to --bluestore 15437/head
authorSage Weil <sage@redhat.com>
Wed, 19 Apr 2017 13:31:57 +0000 (09:31 -0400)
committerLoic Dachary <ldachary@redhat.com>
Tue, 6 Jun 2017 17:45:24 +0000 (19:45 +0200)
Signed-off-by: Sage Weil <sage@redhat.com>
Signed-off-by: Loic Dachary <loic@dachary.org>
qa/workunits/ceph-disk/ceph-disk-no-lockbox
qa/workunits/ceph-disk/ceph-disk-test.py
qa/workunits/ceph-helpers.sh
src/ceph-disk/ceph_disk/main.py
src/ceph-disk/tests/ceph-disk.sh
src/ceph-disk/tests/test_prepare.py
src/test/osd/osd-dup.sh
src/test/osd/osd-scrub-repair.sh

index aa730200edca33d54acfd115182d043852f99b14..b9c1c6c39da081b9bffeb7282834f7bcb500ab23 100755 (executable)
@@ -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):
 
index 6452dc6877f15ce83a7a6b51dbc86ff2429f8711..b80e1da897128e1e5628dd822030f1a79faa9287 100644 (file)
@@ -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(
index d8f69604145d5eb459f51008c73083abe3b0b7e2..bc682cab1ce4f420ac67088dfea10bafc766e68e 100755 (executable)
@@ -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
index c4ff1313b0639c5c4b29044ee4e99802772b6c04..9f24655135b86f7ea67f57fc9a2f4dc81fbf6151 100755 (executable)
@@ -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(
index ae216bc102de7777176cb1682fd8a3fe640d44aa..793016c30f67e0b461fbbfe3eec7693b437abc1f 100755 (executable)
@@ -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
index 6ab8ca49a4034fd00a008983119c1754b7fb8a13..28713640a6adbf0d8400cdb11279febc4f439363 100644 (file)
@@ -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()
index 9957fda03712dbe4bda3074df3053e457af37060..bf48a39ea52772c6386af0ba315d64b5c4272297 100755 (executable)
@@ -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
index ef81ac124b19f0be1700a39484f2c3f4a9cb7609..eb2bef526e39c5574bba1447809bcccd71219a8d 100755 (executable)
@@ -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