auth service required = cephx
auth client required = cephx
osd journal size = {n}
- filestore xattr use omap = true
osd pool default size = {n} # Write an object n times.
osd pool default min size = {n} # Allow writing n copy in a degraded state.
osd pool default pg num = {n}
auth service required = cephx
auth client required = cephx
osd journal size = 1024
- filestore xattr use omap = true
osd pool default size = 2
osd pool default min size = 1
osd pool default pg num = 333
the ``filestore max inline xattr size`` or ``filestore max inline
xattrs`` threshold are reached.
-``filestore xattr use omap``
-
-:Description: Use object map for XATTRS. Set to ``true`` for ``ext4`` file systems.
-:Type: Boolean
-:Required: No
-:Default: ``false``
-
``filestore max inline xattr size``
relatively large limit (64 KB) that most deployments won't encounter, but the
``ext4`` is too small to be usable.
-You should always add the following line to the ``[osd]`` section of your
-``ceph.conf`` file for ``ext4`` filesystems; you can optionally use
-it for ``btrfs`` and ``XFS``.::
-
- filestore xattr use omap = true
-
Filesystem Background Info
==========================
[osd]
osd journal size = 1000
- #The following assumes ext4 filesystem.
- filestore xattr use omap = true
-
-
# For ceph-deploy, you can control what type of file system
# is created via these options.
host = {hostname}
[mds.a]
- host = {hostname}
\ No newline at end of file
+ host = {hostname}
+++ /dev/null
-#!/bin/bash
-#
-# Copyright (C) 2013 Cloudwatt <libre.licensing@cloudwatt.com>
-#
-# Author: Loic Dachary <loic@dachary.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Library Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Library Public License for more details.
-#
-set -e
-
-export PATH=/sbin:$PATH
-
-: ${VERBOSE:=false}
-: ${EXT4:=$(which mkfs.ext4)}
-: ${EXT3:=$(which mkfs.ext3)}
-: ${XFS:=$(which mkfs.xfs)}
-: ${BTRFS:=$(which mkfs.btrfs)}
-: ${CEPH_TEST_FILESTORE:=ceph_test_objectstore}
-: ${FILE_SYSTEMS:=EXT4} # EXT3 XFS BTRFS
-: ${DEBUG:=}
-
-function EXT4_test() {
- local dir="$1"
-
- if [ -z "$EXT4" ] ; then
- echo "mkfs command for ext4 is missing. On Debian GNU/Linux try apt-get install e2fsprogs" >&2
- return 1
- fi
-
- local disk="$dir/disk.img"
-
- truncate --size=1G $disk || return 1
- mkfs.ext4 -q -F $disk || return 2
- mkdir -p $dir/mountpoint || return 3
- MOUNTPOINT=$dir/mountpoint DISK=$disk sudo -E $CEPH_TEST_FILESTORE --gtest_filter=EXT4StoreTest.* $DEBUG || return 4
-}
-
-function main() {
- local dir=$(mktemp --directory)
-
- trap "sudo umount $dir/mountpoint || true ; rm -fr $dir" EXIT QUIT INT
-
- for fs in $FILE_SYSTEMS ; do
- ${fs}_test $dir || return 2
- done
-}
-
-if [ "$1" = TEST ]
-then
- set -x
- set -o functrace
- PS4='${BASH_SOURCE[0]}:$LINENO: ${FUNCNAME[0]}: '
-
- DEBUG='--log-to-stderr=true --debug-filestore=20'
-
- function run_test() {
- dir=/tmp/filestore
- rm -fr $dir
- mkdir $dir
- EXT4_test $dir || return 1
-
- FILE_SYSTEMS=EXT4
- main || return 2
- }
-
- run_test
-else
- main
-fi
-# Local Variables:
-# compile-command: "CEPH_TEST_FILESTORE=../../../src/ceph_test_objectstore filestore.sh TEST"
-# End:
#endif
-
-//
-// support tests for qa/workunits/filestore/filestore.sh
-//
-TEST(EXT4StoreTest, _detect_fs) {
- if (::getenv("DISK") == NULL || ::getenv("MOUNTPOINT") == NULL) {
- cerr << "SKIP because DISK and MOUNTPOINT environment variables are not set. It is meant to run from qa/workunits/filestore/filestore.sh " << std::endl;
- return;
- }
- const string disk(::getenv("DISK"));
- EXPECT_LT((unsigned)0, disk.size());
- const string mnt(::getenv("MOUNTPOINT"));
- EXPECT_LT((unsigned)0, mnt.size());
- ::umount(mnt.c_str());
-
- const string dir("store_test_temp_dir");
- const string journal("store_test_temp_journal");
-
- //
- // without user_xattr, ext4 fails
- //
- {
- g_ceph_context->_conf->set_val("filestore_xattr_use_omap", "true");
- EXPECT_EQ(::system((string("mount -o loop,nouser_xattr ") + disk + " " + mnt).c_str()), 0);
- EXPECT_EQ(::chdir(mnt.c_str()), 0);
- EXPECT_EQ(::mkdir(dir.c_str(), 0755), 0);
- FileStore store(dir, journal);
- EXPECT_EQ(store._detect_fs(), -ENOTSUP);
- EXPECT_EQ(::chdir(".."), 0);
- EXPECT_EQ(::umount(mnt.c_str()), 0);
- }
- //
- // mounted with user_xattr, ext4 fails if filestore_xattr_use_omap is false
- //
- {
- g_ceph_context->_conf->set_val("filestore_xattr_use_omap", "false");
- EXPECT_EQ(::system((string("mount -o loop,user_xattr ") + disk + " " + mnt).c_str()), 0);
- EXPECT_EQ(::chdir(mnt.c_str()), 0);
- FileStore store(dir, journal);
- EXPECT_EQ(store._detect_fs(), -ENOTSUP);
- EXPECT_EQ(::chdir(".."), 0);
- EXPECT_EQ(::umount(mnt.c_str()), 0);
- }
- //
- // mounted with user_xattr, ext4 succeeds if filestore_xattr_use_omap is true
- //
- {
- g_ceph_context->_conf->set_val("filestore_xattr_use_omap", "true");
- EXPECT_EQ(::system((string("mount -o loop,user_xattr ") + disk + " " + mnt).c_str()), 0);
- EXPECT_EQ(::chdir(mnt.c_str()), 0);
- FileStore store(dir, journal);
- EXPECT_EQ(store._detect_fs(), 0);
- EXPECT_EQ(::chdir(".."), 0);
- EXPECT_EQ(::umount(mnt.c_str()), 0);
- }
-}
-
-
int main(int argc, char **argv) {
vector<const char*> args;
argv_to_vec(argc, (const char **)argv, args);
global_init(0, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
- if (args[0] == string("omap")) {
- std::cerr << "using omap xattrs" << std::endl;
- g_ceph_context->_conf->set_val("filestore_xattr_use_omap", "true");
- } else {
- std::cerr << "not using omap xattrs" << std::endl;
- g_ceph_context->_conf->set_val("filestore_xattr_use_omap", "false");
- }
- g_ceph_context->_conf->apply_changes(NULL);
std::cerr << "args: " << args << std::endl;
if (args.size() < 3) {