${UNITTEST_CXX_FLAGS})
target_link_libraries(ceph_test_msgr os global ${BLKID_LIBRARIES} ${CMAKE_DL_LIBS} ${UNITTEST_LIBS})
-# ceph_test_mon_workloadgen
-add_executable(ceph_test_mon_workloadgen
- mon/test_mon_workloadgen.cc
- )
-target_link_libraries(ceph_test_mon_workloadgen
- os
- osdc
- global
- ${EXTRALIBS}
- ${CMAKE_DL_LIBS}
- )
-
-#test_mon_msg
-add_executable(ceph_test_mon_msg mon/test-mon-msg.cc)
-set_target_properties(ceph_test_mon_msg PROPERTIES COMPILE_FLAGS
- ${UNITTEST_CXX_FLAGS})
-target_link_libraries(ceph_test_mon_msg os osdc global ${UNITTEST_LIBS})
-
#ceph_perf_local
add_executable(ceph_perf_local
perf_local.cc
ceph-osd
ceph-dencoder
ceph-objectstore-tool
+ ceph-monstore-tool
osdmaptool
rbd
radosgw-admin)
add_ceph_unittest(unittest_mds_sessionfilter ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittest_mds_sessionfilter)
target_link_libraries(unittest_mds_sessionfilter mds osdc common global ${BLKID_LIBRARIES})
-#mon directory
-add_ceph_test(misc.sh ${CMAKE_SOURCE_DIR}/src/test/mon/misc.sh)
-add_ceph_test(mkfs.sh ${CMAKE_SOURCE_DIR}/src/test/mon/mkfs.sh)
-add_ceph_test(mon-handle-forward.sh ${CMAKE_SOURCE_DIR}/src/test/mon/mon-handle-forward.sh)
-add_ceph_test(mon-ping.sh ${CMAKE_SOURCE_DIR}/src/test/mon/mon-ping.sh)
-add_ceph_test(mon-scrub.sh ${CMAKE_SOURCE_DIR}/src/test/mon/mon-scrub.sh)
-add_ceph_test(osd-crush.sh ${CMAKE_SOURCE_DIR}/src/test/mon/osd-crush.sh)
-add_ceph_test(osd-erasure-code-profile.sh ${CMAKE_SOURCE_DIR}/src/test/mon/osd-erasure-code-profile.sh)
-add_ceph_test(osd-pool-create.sh ${CMAKE_SOURCE_DIR}/src/test/mon/osd-pool-create.sh)
-
-# unittest_mon_moncap
-add_executable(unittest_mon_moncap EXCLUDE_FROM_ALL
- mon/moncap.cc
- )
-add_ceph_unittest(unittest_mon_moncap ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittest_mon_moncap)
-target_link_libraries(unittest_mon_moncap mon global)
-
-# unittest_mon_pgmap
-add_executable(unittest_mon_pgmap EXCLUDE_FROM_ALL
- mon/PGMap.cc
- )
-add_ceph_unittest(unittest_mon_pgmap ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittest_mon_pgmap)
-target_link_libraries(unittest_mon_pgmap mon global)
+add_subdirectory(mon)
#objectstore directory
--- /dev/null
+# ceph_test_mon_workloadgen
+add_executable(ceph_test_mon_workloadgen
+ test_mon_workloadgen.cc
+ )
+target_link_libraries(ceph_test_mon_workloadgen
+ os
+ osdc
+ global
+ ${EXTRALIBS}
+ ${CMAKE_DL_LIBS}
+ )
+
+# ceph_test_mon_msg
+add_executable(ceph_test_mon_msg
+ test-mon-msg.cc
+ )
+target_link_libraries(ceph_test_mon_msg os osdc global ${UNITTEST_LIBS})
+set_target_properties(ceph_test_mon_msg PROPERTIES COMPILE_FLAGS
+ ${UNITTEST_CXX_FLAGS})
+
+#scripts
+add_ceph_test(misc.sh ${CMAKE_CURRENT_SOURCE_DIR}/misc.sh)
+add_ceph_test(mkfs.sh ${CMAKE_CURRENT_SOURCE_DIR}/mkfs.sh)
+add_ceph_test(mon-created-time.sh ${CMAKE_CURRENT_SOURCE_DIR}/mon-created-time.sh)
+add_ceph_test(mon-handle-forward.sh ${CMAKE_CURRENT_SOURCE_DIR}/mon-handle-forward.sh)
+add_ceph_test(mon-ping.sh ${CMAKE_CURRENT_SOURCE_DIR}/mon-ping.sh)
+add_ceph_test(mon-scrub.sh ${CMAKE_CURRENT_SOURCE_DIR}/mon-scrub.sh)
+add_ceph_test(osd-crush.sh ${CMAKE_CURRENT_SOURCE_DIR}/osd-crush.sh)
+add_ceph_test(osd-erasure-code-profile.sh ${CMAKE_CURRENT_SOURCE_DIR}/osd-erasure-code-profile.sh)
+add_ceph_test(osd-pool-create.sh ${CMAKE_CURRENT_SOURCE_DIR}/osd-pool-create.sh)
+
+# unittest_mon_moncap
+add_executable(unittest_mon_moncap EXCLUDE_FROM_ALL
+ moncap.cc
+ )
+add_ceph_unittest(unittest_mon_moncap ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittest_mon_moncap)
+target_link_libraries(unittest_mon_moncap mon global)
+
+# unittest_mon_pgmap
+add_executable(unittest_mon_pgmap EXCLUDE_FROM_ALL
+ PGMap.cc
+ )
+add_ceph_unittest(unittest_mon_pgmap ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittest_mon_pgmap)
+target_link_libraries(unittest_mon_pgmap mon global)
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library Public License for more details.
#
-source ../qa/workunits/ceph-helpers.sh
+source $CEPH_ROOT/qa/workunits/ceph-helpers.sh
function run() {
local dir=$1
function mon_mkfs() {
local fsid=$(uuidgen)
- ./ceph-mon \
+ ceph-mon \
--id $MON_ID \
--fsid $fsid \
- --erasure-code-dir=.libs \
- --compression-dir=.libs \
+ --erasure-code-dir=$CEPH_LIB \
+ --compression-dir=$CEPH_LIB \
--mkfs \
--mon-data=$MON_DIR \
--mon-initial-members=$MON_ID \
}
function mon_run() {
- ./ceph-mon \
+ ceph-mon \
--id $MON_ID \
--chdir= \
--mon-osd-full-ratio=.99 \
--mon-data-avail-crit=1 \
- --erasure-code-dir=.libs \
- --compression-dir=.libs \
+ --erasure-code-dir=$CEPH_LIB \
+ --compression-dir=$CEPH_LIB \
--mon-data=$MON_DIR \
--log-file=$MON_DIR/log \
--mon-cluster-log-file=$MON_DIR/log \
function auth_none() {
mon_mkfs --auth-supported=none
- ./ceph-mon \
+ ceph-mon \
--id $MON_ID \
--mon-osd-full-ratio=.99 \
--mon-data-avail-crit=1 \
- --erasure-code-dir=.libs \
- --compression-dir=.libs \
+ --erasure-code-dir=$CEPH_LIB \
+ --compression-dir=$CEPH_LIB \
--mon-data=$MON_DIR \
--extract-monmap $MON_DIR/monmap
mon_run --auth-supported=none
- timeout $TIMEOUT ./ceph --mon-host $CEPH_MON mon stat || return 1
+ timeout $TIMEOUT ceph --mon-host $CEPH_MON mon stat || return 1
}
function auth_cephx_keyring() {
mon_run
- timeout $TIMEOUT ./ceph \
+ timeout $TIMEOUT ceph \
--name mon. \
--keyring $MON_DIR/keyring \
--mon-host $CEPH_MON mon stat || return 1
return 1
fi
- local key=$(./ceph-authtool --gen-print-key)
+ local key=$(ceph-authtool --gen-print-key)
if mon_mkfs --key='corrupted key' ; then
return 1
mon_run
- timeout $TIMEOUT ./ceph \
+ timeout $TIMEOUT ceph \
--name mon. \
--keyring $MON_DIR/keyring \
--mon-host $CEPH_MON mon stat || return 1
local toodeep=$MON_DIR/toodeep
# fail if recursive directory creation is needed
- ./ceph-mon \
+ ceph-mon \
--id $MON_ID \
--mon-osd-full-ratio=.99 \
--mon-data-avail-crit=1 \
- --erasure-code-dir=.libs \
- --compression-dir=.libs \
+ --compression-dir=$CEPH_LIB \
+ --erasure-code-dir=$CEPH_LIB \
--mkfs \
--mon-data=$toodeep 2>&1 | tee $DIR/makedir.log
grep 'toodeep.*No such file' $DIR/makedir.log > /dev/null
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library Public License for more details.
#
-source ../qa/workunits/ceph-helpers.sh
+source $CEPH_ROOT/qa/workunits/ceph-helpers.sh
function run() {
local dir=$1
run_mon $dir a || return 1
- ./ceph mon dump || return 1
+ ceph mon dump || return 1
- if test "$(./ceph mon dump 2>/dev/null | sed -n '/created/p' | awk '{print $NF}')"x = ""x ; then
+ if test "$(ceph mon dump 2>/dev/null | sed -n '/created/p' | awk '{print $NF}')"x = ""x ; then
return 1
fi
- if test "$(./ceph mon dump 2>/dev/null | sed -n '/created/p' | awk '{print $NF}')"x = "0.000000"x ; then
+ if test "$(ceph mon dump 2>/dev/null | sed -n '/created/p' | awk '{print $NF}')"x = "0.000000"x ; then
return 1
fi
}
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library Public License for more details.
#
-source ../qa/workunits/ceph-helpers.sh
+source $CEPH_ROOT/qa/workunits/ceph-helpers.sh
function run() {
local dir=$1
run_mon $dir b --public-addr $MONB || return 1
)
- timeout 360 ./ceph --mon-host $MONA mon stat || return 1
+ timeout 360 ceph --mon-host $MONA mon stat || return 1
# check that MONB is indeed a peon
- ./ceph --admin-daemon $dir/ceph-mon.b.asok mon_status |
+ ceph --admin-daemon $dir/ceph-mon.b.asok mon_status |
grep '"peon"' || return 1
# when the leader ( MONA ) is used, there is no message forwarding
- ./ceph --mon-host $MONA osd pool create POOL1 12
- CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
+ ceph --mon-host $MONA osd pool create POOL1 12
+ CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
grep 'mon_command(.*"POOL1"' $dir/a/mon.a.log
- CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-mon.b.asok log flush || return 1
+ CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.b.asok log flush || return 1
grep 'mon_command(.*"POOL1"' $dir/mon.b.log && return 1
# when the peon ( MONB ) is used, the message is forwarded to the leader
- ./ceph --mon-host $MONB osd pool create POOL2 12
- CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-mon.b.asok log flush || return 1
+ ceph --mon-host $MONB osd pool create POOL2 12
+ CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.b.asok log flush || return 1
grep 'forward_request.*mon_command(.*"POOL2"' $dir/mon.b.log
- CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
+ CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
grep ' forward(mon_command(.*"POOL2"' $dir/mon.a.log
# forwarded messages must retain features from the original connection
features=$(sed -n -e 's|.*127.0.0.1:0.*accept features \([0-9][0-9]*\)|\1|p' < \
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library Public License for more details.
#
-source ../qa/workunits/ceph-helpers.sh
+source $CEPH_ROOT/qa/workunits/ceph-helpers.sh
function run() {
local dir=$1
run_mon $dir a || return 1
- ./ceph ping mon.a || return 1
+ ceph ping mon.a || return 1
}
main mon-ping "$@"
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library Public License for more details.
#
-source ../qa/workunits/ceph-helpers.sh
+source $CEPH_ROOT/qa/workunits/ceph-helpers.sh
function run() {
local dir=$1
run_mon $dir a || return 1
- ./ceph mon scrub || return 1
+ ceph mon scrub || return 1
}
main mon-scrub "$@"
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library Public License for more details.
#
-source ../qa/workunits/ceph-helpers.sh
+source $CEPH_ROOT/qa/workunits/ceph-helpers.sh
function run() {
local dir=$1
run_mon $dir a || return 1
- ./ceph --format xml osd crush rule dump replicated_ruleset | \
+ ceph --format xml osd crush rule dump replicated_ruleset | \
egrep '<op>take</op><item>[^<]+</item><item_name>default</item_name>' | \
grep '<op>choose_firstn</op><num>0</num><type>osd</type>' || return 1
local ruleset=ruleset0
local root=host1
- ./ceph osd crush add-bucket $root host
+ ceph osd crush add-bucket $root host
local failure_domain=osd
- ./ceph osd crush rule create-simple $ruleset $root $failure_domain || return 1
- ./ceph osd crush rule create-simple $ruleset $root $failure_domain 2>&1 | \
+ ceph osd crush rule create-simple $ruleset $root $failure_domain || return 1
+ ceph osd crush rule create-simple $ruleset $root $failure_domain 2>&1 | \
grep "$ruleset already exists" || return 1
- ./ceph --format xml osd crush rule dump $ruleset | \
+ ceph --format xml osd crush rule dump $ruleset | \
egrep '<op>take</op><item>[^<]+</item><item_name>'$root'</item_name>' | \
grep '<op>choose_firstn</op><num>0</num><type>'$failure_domain'</type>' || return 1
- ./ceph osd crush rule rm $ruleset || return 1
+ ceph osd crush rule rm $ruleset || return 1
}
function TEST_crush_rule_dump() {
run_mon $dir a || return 1
local ruleset=ruleset1
- ./ceph osd crush rule create-erasure $ruleset || return 1
+ ceph osd crush rule create-erasure $ruleset || return 1
local expected
expected="<rule_name>$ruleset</rule_name>"
- ./ceph --format xml osd crush rule dump $ruleset | grep $expected || return 1
+ ceph --format xml osd crush rule dump $ruleset | grep $expected || return 1
expected='"rule_name": "'$ruleset'"'
- ./ceph osd crush rule dump | grep "$expected" || return 1
- ! ./ceph osd crush rule dump non_existent_ruleset || return 1
- ./ceph osd crush rule rm $ruleset || return 1
+ ceph osd crush rule dump | grep "$expected" || return 1
+ ! ceph osd crush rule dump non_existent_ruleset || return 1
+ ceph osd crush rule rm $ruleset || return 1
}
function TEST_crush_rule_rm() {
run_mon $dir a || return 1
- ./ceph osd crush rule create-erasure $ruleset default || return 1
- ./ceph osd crush rule ls | grep $ruleset || return 1
- ./ceph osd crush rule rm $ruleset || return 1
- ! ./ceph osd crush rule ls | grep $ruleset || return 1
+ ceph osd crush rule create-erasure $ruleset default || return 1
+ ceph osd crush rule ls | grep $ruleset || return 1
+ ceph osd crush rule rm $ruleset || return 1
+ ! ceph osd crush rule ls | grep $ruleset || return 1
}
function TEST_crush_rule_create_erasure() {
#
# create a new ruleset with the default profile, implicitly
#
- ./ceph osd crush rule create-erasure $ruleset || return 1
- ./ceph osd crush rule create-erasure $ruleset 2>&1 | \
+ ceph osd crush rule create-erasure $ruleset || return 1
+ ceph osd crush rule create-erasure $ruleset 2>&1 | \
grep "$ruleset already exists" || return 1
- ./ceph --format xml osd crush rule dump $ruleset | \
+ ceph --format xml osd crush rule dump $ruleset | \
egrep '<op>take</op><item>[^<]+</item><item_name>default</item_name>' | \
grep '<op>chooseleaf_indep</op><num>0</num><type>host</type>' || return 1
- ./ceph osd crush rule rm $ruleset || return 1
- ! ./ceph osd crush rule ls | grep $ruleset || return 1
+ ceph osd crush rule rm $ruleset || return 1
+ ! ceph osd crush rule ls | grep $ruleset || return 1
#
# create a new ruleset with the default profile, explicitly
#
- ./ceph osd crush rule create-erasure $ruleset default || return 1
- ./ceph osd crush rule ls | grep $ruleset || return 1
- ./ceph osd crush rule rm $ruleset || return 1
- ! ./ceph osd crush rule ls | grep $ruleset || return 1
+ ceph osd crush rule create-erasure $ruleset default || return 1
+ ceph osd crush rule ls | grep $ruleset || return 1
+ ceph osd crush rule rm $ruleset || return 1
+ ! ceph osd crush rule ls | grep $ruleset || return 1
#
# create a new ruleset and the default profile, implicitly
#
- ./ceph osd erasure-code-profile rm default || return 1
- ! ./ceph osd erasure-code-profile ls | grep default || return 1
- ./ceph osd crush rule create-erasure $ruleset || return 1
- CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
+ ceph osd erasure-code-profile rm default || return 1
+ ! ceph osd erasure-code-profile ls | grep default || return 1
+ ceph osd crush rule create-erasure $ruleset || return 1
+ CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
grep 'profile set default' $dir/mon.a.log || return 1
- ./ceph osd erasure-code-profile ls | grep default || return 1
- ./ceph osd crush rule rm $ruleset || return 1
- ! ./ceph osd crush rule ls | grep $ruleset || return 1
+ ceph osd erasure-code-profile ls | grep default || return 1
+ ceph osd crush rule rm $ruleset || return 1
+ ! ceph osd crush rule ls | grep $ruleset || return 1
#
# verify that if the crushmap contains a bugous ruleset,
# it will prevent the creation of a pool.
ceph tell mon.\* injectargs --crushtool "false"
expect_failure $dir "Error EINVAL" \
- ./ceph osd pool create mypool 1 1 erasure || return 1
+ ceph osd pool create mypool 1 1 erasure || return 1
}
function check_ruleset_id_match_rule_id() {
local rule_name=$1
- rule_id=`./ceph osd crush rule dump $rule_name | grep "\"rule_id\":" | awk -F ":|," '{print int($2)}'`
- ruleset_id=`./ceph osd crush rule dump $rule_name | grep "\"ruleset\":"| awk -F ":|," '{print int($2)}'`
+ rule_id=`ceph osd crush rule dump $rule_name | grep "\"rule_id\":" | awk -F ":|," '{print int($2)}'`
+ ruleset_id=`ceph osd crush rule dump $rule_name | grep "\"ruleset\":"| awk -F ":|," '{print int($2)}'`
test $ruleset_id = $rule_id || return 1
}
function generate_manipulated_rules() {
local dir=$1
- ./ceph osd crush add-bucket $root host
- ./ceph osd crush rule create-simple test_rule1 $root osd firstn || return 1
- ./ceph osd crush rule create-simple test_rule2 $root osd firstn || return 1
- ./ceph osd getcrushmap -o $dir/original_map
- ./crushtool -d $dir/original_map -o $dir/decoded_original_map
+ ceph osd crush add-bucket $root host
+ ceph osd crush rule create-simple test_rule1 $root osd firstn || return 1
+ ceph osd crush rule create-simple test_rule2 $root osd firstn || return 1
+ ceph osd getcrushmap -o $dir/original_map
+ crushtool -d $dir/original_map -o $dir/decoded_original_map
#manipulate the rulesets , to make the rule_id != ruleset_id
sed -i 's/ruleset 0/ruleset 3/' $dir/decoded_original_map
sed -i 's/ruleset 2/ruleset 0/' $dir/decoded_original_map
sed -i 's/ruleset 1/ruleset 2/' $dir/decoded_original_map
- ./crushtool -c $dir/decoded_original_map -o $dir/new_map
- ./ceph osd setcrushmap -i $dir/new_map
+ crushtool -c $dir/decoded_original_map -o $dir/new_map
+ ceph osd setcrushmap -i $dir/new_map
- ./ceph osd crush rule dump
+ ceph osd crush rule dump
}
function TEST_crush_ruleset_match_rule_when_creating() {
generate_manipulated_rules $dir
- ./ceph osd crush rule create-simple special_rule_simple $root osd firstn || return 1
+ ceph osd crush rule create-simple special_rule_simple $root osd firstn || return 1
- ./ceph osd crush rule dump
+ ceph osd crush rule dump
#show special_rule_simple has same rule_id and ruleset_id
check_ruleset_id_match_rule_id special_rule_simple || return 1
}
local root=host1
- ./ceph osd crush add-bucket $root host
- ./ceph osd crush rule create-simple test_rule1 $root osd firstn || return 1
- ./ceph osd crush rule create-simple test_rule2 $root osd firstn || return 1
- ./ceph osd getcrushmap > $dir/crushmap || return 1
- ./crushtool --decompile $dir/crushmap > $dir/crushmap.txt || return 1
+ ceph osd crush add-bucket $root host
+ ceph osd crush rule create-simple test_rule1 $root osd firstn || return 1
+ ceph osd crush rule create-simple test_rule2 $root osd firstn || return 1
+ ceph osd getcrushmap > $dir/crushmap || return 1
+ crushtool --decompile $dir/crushmap > $dir/crushmap.txt || return 1
for i in $(seq 3 255)
do
cat <<EOF
}
EOF
done >> $dir/crushmap.txt
- ./crushtool --compile $dir/crushmap.txt -o $dir/crushmap || return 1
- ./ceph osd setcrushmap -i $dir/crushmap || return 1
- ./ceph osd crush rule create-simple test_rule_nospace $root osd firstn 2>&1 | grep "Error ENOSPC" || return 1
+ crushtool --compile $dir/crushmap.txt -o $dir/crushmap || return 1
+ ceph osd setcrushmap -i $dir/crushmap || return 1
+ ceph osd crush rule create-simple test_rule_nospace $root osd firstn 2>&1 | grep "Error ENOSPC" || return 1
}
run_mon $dir a || return 1
- ./ceph osd crush add-bucket host1 host
- ! ./ceph osd tree | grep host2 || return 1
- ./ceph osd crush rename-bucket host1 host2 || return 1
- ./ceph osd tree | grep host2 || return 1
- ./ceph osd crush rename-bucket host1 host2 || return 1 # idempotency
- ./ceph osd crush rename-bucket nonexistent something 2>&1 | grep "Error ENOENT" || return 1
+ ceph osd crush add-bucket host1 host
+ ! ceph osd tree | grep host2 || return 1
+ ceph osd crush rename-bucket host1 host2 || return 1
+ ceph osd tree | grep host2 || return 1
+ ceph osd crush rename-bucket host1 host2 || return 1 # idempotency
+ ceph osd crush rename-bucket nonexistent something 2>&1 | grep "Error ENOENT" || return 1
}
function TEST_crush_reject_empty() {
local empty_map=$dir/empty_map
:> $empty_map.txt
- ./crushtool -c $empty_map.txt -o $empty_map.map || return 1
+ crushtool -c $empty_map.txt -o $empty_map.map || return 1
expect_failure $dir "Error EINVAL" \
- ./ceph osd setcrushmap -i $empty_map.map || return 1
+ ceph osd setcrushmap -i $empty_map.map || return 1
}
function TEST_crush_tree() {
local dir=$1
run_mon $dir a || return 1
- ./ceph osd crush tree --format=xml | \
- $XMLSTARLET val -e -r test/mon/osd-crush-tree.rng - || return 1
+ ceph osd crush tree --format=xml | \
+ $XMLSTARLET val -e -r $CEPH_ROOT/src/test/mon/osd-crush-tree.rng - || return 1
}
# NB: disable me if i am too time consuming
local empty_map=$dir/empty_map
:> $empty_map.txt
- ./crushtool -c $empty_map.txt -o $empty_map.map || return 1
+ crushtool -c $empty_map.txt -o $empty_map.map || return 1
local crushtool_path_old=`ceph-conf --show-config-value crushtool`
ceph tell mon.\* injectargs --crushtool "true"
# vain, after mon.a is offline
kill_daemons $dir || return 1
# rewrite the monstore with the good crush map,
- ./tools/ceph-monstore-update-crush.sh --rewrite $dir/a || return 1
+ $CEPH_ROOT/src/tools/ceph-monstore-update-crush.sh --rewrite $dir/a || return 1
run_mon $dir a --public-addr $MONA || return 1
run_mon $dir b --public-addr $MONB || return 1
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library Public License for more details.
#
-source ../qa/workunits/ceph-helpers.sh
+source $CEPH_ROOT/qa/workunits/ceph-helpers.sh
function run() {
local dir=$1
#
# no key=value pairs : use the default configuration
#
- ./ceph osd erasure-code-profile set $profile 2>&1 || return 1
- ./ceph osd erasure-code-profile get $profile | \
+ ceph osd erasure-code-profile set $profile 2>&1 || return 1
+ ceph osd erasure-code-profile get $profile | \
grep plugin=jerasure || return 1
- ./ceph osd erasure-code-profile rm $profile
+ ceph osd erasure-code-profile rm $profile
#
# key=value pairs override the default
#
- ./ceph osd erasure-code-profile set $profile \
+ ceph osd erasure-code-profile set $profile \
key=value plugin=example || return 1
- ./ceph osd erasure-code-profile get $profile | \
+ ceph osd erasure-code-profile get $profile | \
grep -e key=value -e plugin=example || return 1
#
# --force is required to override an existing profile
#
- ! ./ceph osd erasure-code-profile set $profile > $dir/out 2>&1 || return 1
+ ! ceph osd erasure-code-profile set $profile > $dir/out 2>&1 || return 1
grep 'will not override' $dir/out || return 1
- ./ceph osd erasure-code-profile set $profile key=other --force || return 1
- ./ceph osd erasure-code-profile get $profile | \
+ ceph osd erasure-code-profile set $profile key=other --force || return 1
+ ceph osd erasure-code-profile get $profile | \
grep key=other || return 1
- ./ceph osd erasure-code-profile rm $profile # cleanup
+ ceph osd erasure-code-profile rm $profile # cleanup
}
function TEST_ls() {
run_mon $dir a || return 1
local profile=myprofile
- ! ./ceph osd erasure-code-profile ls | grep $profile || return 1
- ./ceph osd erasure-code-profile set $profile 2>&1 || return 1
- ./ceph osd erasure-code-profile ls | grep $profile || return 1
- ./ceph --format xml osd erasure-code-profile ls | \
+ ! ceph osd erasure-code-profile ls | grep $profile || return 1
+ ceph osd erasure-code-profile set $profile 2>&1 || return 1
+ ceph osd erasure-code-profile ls | grep $profile || return 1
+ ceph --format xml osd erasure-code-profile ls | \
grep "<profile>$profile</profile>" || return 1
- ./ceph osd erasure-code-profile rm $profile # cleanup
+ ceph osd erasure-code-profile rm $profile # cleanup
}
function TEST_rm() {
run_mon $dir a || return 1
local profile=myprofile
- ./ceph osd erasure-code-profile set $profile 2>&1 || return 1
- ./ceph osd erasure-code-profile ls | grep $profile || return 1
- ./ceph osd erasure-code-profile rm $profile || return 1
- ! ./ceph osd erasure-code-profile ls | grep $profile || return 1
- ./ceph osd erasure-code-profile rm WRONG 2>&1 | \
+ ceph osd erasure-code-profile set $profile 2>&1 || return 1
+ ceph osd erasure-code-profile ls | grep $profile || return 1
+ ceph osd erasure-code-profile rm $profile || return 1
+ ! ceph osd erasure-code-profile ls | grep $profile || return 1
+ ceph osd erasure-code-profile rm WRONG 2>&1 | \
grep "WRONG does not exist" || return 1
- ./ceph osd erasure-code-profile set $profile || return 1
- ./ceph osd pool create poolname 12 12 erasure $profile || return 1
- ! ./ceph osd erasure-code-profile rm $profile > $dir/out 2>&1 || return 1
+ ceph osd erasure-code-profile set $profile || return 1
+ ceph osd pool create poolname 12 12 erasure $profile || return 1
+ ! ceph osd erasure-code-profile rm $profile > $dir/out 2>&1 || return 1
grep "poolname.*using.*$profile" $dir/out || return 1
- ./ceph osd pool delete poolname poolname --yes-i-really-really-mean-it || return 1
- ./ceph osd erasure-code-profile rm $profile || return 1
+ ceph osd pool delete poolname poolname --yes-i-really-really-mean-it || return 1
+ ceph osd erasure-code-profile rm $profile || return 1
- ./ceph osd erasure-code-profile rm $profile # cleanup
+ ceph osd erasure-code-profile rm $profile # cleanup
}
function TEST_get() {
run_mon $dir a || return 1
local default_profile=default
- ./ceph osd erasure-code-profile get $default_profile | \
+ ceph osd erasure-code-profile get $default_profile | \
grep plugin=jerasure || return 1
- ./ceph --format xml osd erasure-code-profile get $default_profile | \
+ ceph --format xml osd erasure-code-profile get $default_profile | \
grep '<plugin>jerasure</plugin>' || return 1
- ! ./ceph osd erasure-code-profile get WRONG > $dir/out 2>&1 || return 1
+ ! ceph osd erasure-code-profile get WRONG > $dir/out 2>&1 || return 1
grep -q "unknown erasure code profile 'WRONG'" $dir/out || return 1
}
# ceph osd erasure-code-profile set: verify that it is idempotent,
# as if it was using the same code path.
#
- ./ceph osd erasure-code-profile set default k=2 m=1 2>&1 || return 1
+ ceph osd erasure-code-profile set default k=2 m=1 2>&1 || return 1
local profile
#
# Because plugin=jerasure is the default, it uses a slightly
# implicitly.
#
profile=profileidempotent1
- ! ./ceph osd erasure-code-profile ls | grep $profile || return 1
- ./ceph osd erasure-code-profile set $profile k=2 ruleset-failure-domain=osd 2>&1 || return 1
- ./ceph osd erasure-code-profile ls | grep $profile || return 1
- ./ceph osd erasure-code-profile set $profile k=2 ruleset-failure-domain=osd 2>&1 || return 1
- ./ceph osd erasure-code-profile rm $profile # cleanup
+ ! ceph osd erasure-code-profile ls | grep $profile || return 1
+ ceph osd erasure-code-profile set $profile k=2 ruleset-failure-domain=osd 2>&1 || return 1
+ ceph osd erasure-code-profile ls | grep $profile || return 1
+ ceph osd erasure-code-profile set $profile k=2 ruleset-failure-domain=osd 2>&1 || return 1
+ ceph osd erasure-code-profile rm $profile # cleanup
#
# In the general case the profile is exactly what is on
#
profile=profileidempotent2
- ! ./ceph osd erasure-code-profile ls | grep $profile || return 1
- ./ceph osd erasure-code-profile set $profile plugin=lrc k=4 m=2 l=3 ruleset-failure-domain=osd 2>&1 || return 1
- ./ceph osd erasure-code-profile ls | grep $profile || return 1
- ./ceph osd erasure-code-profile set $profile plugin=lrc k=4 m=2 l=3 ruleset-failure-domain=osd 2>&1 || return 1
- ./ceph osd erasure-code-profile rm $profile # cleanup
+ ! ceph osd erasure-code-profile ls | grep $profile || return 1
+ ceph osd erasure-code-profile set $profile plugin=lrc k=4 m=2 l=3 ruleset-failure-domain=osd 2>&1 || return 1
+ ceph osd erasure-code-profile ls | grep $profile || return 1
+ ceph osd erasure-code-profile set $profile plugin=lrc k=4 m=2 l=3 ruleset-failure-domain=osd 2>&1 || return 1
+ ceph osd erasure-code-profile rm $profile # cleanup
}
function TEST_format_invalid() {
# valid JSON but not of the expected type
run_mon $dir a \
--osd_pool_default_erasure-code-profile 1 || return 1
- ! ./ceph osd erasure-code-profile set $profile > $dir/out 2>&1 || return 1
+ ! ceph osd erasure-code-profile set $profile > $dir/out 2>&1 || return 1
cat $dir/out
grep 'must be a JSON object' $dir/out || return 1
}
expected='"plugin":"example"'
run_mon $dir a \
--osd_pool_default_erasure-code-profile "{$expected}" || return 1
- ./ceph --format json osd erasure-code-profile get default | \
+ ceph --format json osd erasure-code-profile get default | \
grep "$expected" || return 1
}
expected='"plugin":"example"'
run_mon $dir a \
--osd_pool_default_erasure-code-profile "plugin=example" || return 1
- ./ceph --format json osd erasure-code-profile get default | \
+ ceph --format json osd erasure-code-profile get default | \
grep "$expected" || return 1
}
run_mon $dir a || return 1
expect_failure $dir 'k must be a multiple of (k + m) / l' \
- ./ceph osd erasure-code-profile set $profile \
+ ceph osd erasure-code-profile set $profile \
plugin=lrc \
l=1 \
k=1 \
if erasure_code_plugin_exists isa ; then
expect_failure $dir 'k=1 must be >= 2' \
- ./ceph osd erasure-code-profile set $profile \
+ ceph osd erasure-code-profile set $profile \
plugin=isa \
k=1 \
m=1 || return 1
fi
expect_failure $dir 'k=1 must be >= 2' \
- ./ceph osd erasure-code-profile set $profile \
+ ceph osd erasure-code-profile set $profile \
plugin=jerasure \
k=1 \
m=1 || return 1
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library Public License for more details.
#
-source ../qa/workunits/ceph-helpers.sh
+source $CEPH_ROOT/qa/workunits/ceph-helpers.sh
function run() {
local dir=$1
local expected=66
run_mon $dir a \
--osd_pool_default_crush_replicated_ruleset $expected || return 1
- ./ceph osd pool get rbd crush_ruleset | grep 'ruleset: '$expected || return 1
- ./ceph osd crush rule dump replicated_ruleset | grep '"ruleset": '$expected || return 1
- CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
+ ceph osd pool get rbd crush_ruleset | grep 'ruleset: '$expected || return 1
+ ceph osd crush rule dump replicated_ruleset | grep '"ruleset": '$expected || return 1
+ CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
! grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
}
local expected=55
run_mon $dir a \
--osd_pool_default_crush_rule $expected || return 1
- ./ceph osd pool get rbd crush_ruleset | grep 'ruleset: '$expected || return 1
- ./ceph osd crush rule dump replicated_ruleset | grep '"ruleset": '$expected || return 1
- CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
+ ceph osd pool get rbd crush_ruleset | grep 'ruleset: '$expected || return 1
+ ceph osd crush rule dump replicated_ruleset | grep '"ruleset": '$expected || return 1
+ CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
}
run_mon $dir a \
--osd_pool_default_crush_rule $expected \
--osd_pool_default_crush_replicated_ruleset $unexpected || return 1
- ./ceph osd pool get rbd crush_ruleset | grep 'ruleset: '$expected || return 1
- ! ./ceph --format json osd dump | grep '"crush_ruleset":'$unexpected || return 1
- ./ceph osd crush rule dump replicated_ruleset | grep '"ruleset": '$expected || return 1
- CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
+ ceph osd pool get rbd crush_ruleset | grep 'ruleset: '$expected || return 1
+ ! ceph --format json osd dump | grep '"crush_ruleset":'$unexpected || return 1
+ ceph osd crush rule dump replicated_ruleset | grep '"ruleset": '$expected || return 1
+ CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
}
run_mon $dir a || return 1
local poolname=pool_erasure
local notaprofile=not-a-valid-erasure-code-profile
- ! ./ceph osd pool create $poolname 12 12 erasure $notaprofile || return 1
- ! ./ceph osd erasure-code-profile ls | grep $notaprofile || return 1
+ ! ceph osd pool create $poolname 12 12 erasure $notaprofile || return 1
+ ! ceph osd erasure-code-profile ls | grep $notaprofile || return 1
}
function TEST_erasure_crush_rule() {
# choose the crush ruleset used with an erasure coded pool
#
local crush_ruleset=myruleset
- ! ./ceph osd crush rule ls | grep $crush_ruleset || return 1
- ./ceph osd crush rule create-erasure $crush_ruleset
- ./ceph osd crush rule ls | grep $crush_ruleset
+ ! ceph osd crush rule ls | grep $crush_ruleset || return 1
+ ceph osd crush rule create-erasure $crush_ruleset
+ ceph osd crush rule ls | grep $crush_ruleset
local poolname
poolname=pool_erasure1
- ! ./ceph --format json osd dump | grep '"crush_ruleset":1' || return 1
- ./ceph osd pool create $poolname 12 12 erasure default $crush_ruleset
- ./ceph --format json osd dump | grep '"crush_ruleset":1' || return 1
+ ! ceph --format json osd dump | grep '"crush_ruleset":1' || return 1
+ ceph osd pool create $poolname 12 12 erasure default $crush_ruleset
+ ceph --format json osd dump | grep '"crush_ruleset":1' || return 1
#
# a crush ruleset by the name of the pool is implicitly created
#
poolname=pool_erasure2
- ./ceph osd erasure-code-profile set myprofile
- ./ceph osd pool create $poolname 12 12 erasure myprofile
- ./ceph osd crush rule ls | grep $poolname || return 1
+ ceph osd erasure-code-profile set myprofile
+ ceph osd pool create $poolname 12 12 erasure myprofile
+ ceph osd crush rule ls | grep $poolname || return 1
#
# a non existent crush ruleset given in argument is an error
# http://tracker.ceph.com/issues/9304
#
poolname=pool_erasure3
- ! ./ceph osd pool create $poolname 12 12 erasure myprofile INVALIDRULESET || return 1
+ ! ceph osd pool create $poolname 12 12 erasure myprofile INVALIDRULESET || return 1
}
function TEST_erasure_code_profile_default() {
local dir=$1
run_mon $dir a || return 1
- ./ceph osd erasure-code-profile rm default || return 1
- ! ./ceph osd erasure-code-profile ls | grep default || return 1
- ./ceph osd pool create $poolname 12 12 erasure default
- ./ceph osd erasure-code-profile ls | grep default || return 1
+ ceph osd erasure-code-profile rm default || return 1
+ ! ceph osd erasure-code-profile ls | grep default || return 1
+ ceph osd pool create $poolname 12 12 erasure default
+ ceph osd erasure-code-profile ls | grep default || return 1
}
function TEST_erasure_crush_stripe_width() {
local dir=$1
# the default stripe width is used to initialize the pool
run_mon $dir a --public-addr $CEPH_MON
- stripe_width=$(./ceph-conf --show-config-value osd_pool_erasure_code_stripe_width)
- ./ceph osd pool create pool_erasure 12 12 erasure
- ./ceph --format json osd dump | tee $dir/osd.json
+ stripe_width=$(ceph-conf --show-config-value osd_pool_erasure_code_stripe_width)
+ ceph osd pool create pool_erasure 12 12 erasure
+ ceph --format json osd dump | tee $dir/osd.json
grep '"stripe_width":'$stripe_width $dir/osd.json > /dev/null || return 1
}
run_mon $dir a \
--osd_pool_erasure_code_stripe_width $desired_stripe_width \
--osd_pool_default_erasure_code_profile "$profile" || return 1
- ./ceph osd pool create pool_erasure 12 12 erasure
- ./ceph osd dump | tee $dir/osd.json
+ ceph osd pool create pool_erasure 12 12 erasure
+ ceph osd dump | tee $dir/osd.json
grep "stripe_width $actual_stripe_width" $dir/osd.json > /dev/null || return 1
}
function TEST_erasure_code_pool() {
local dir=$1
run_mon $dir a || return 1
- ./ceph --format json osd dump > $dir/osd.json
+ ceph --format json osd dump > $dir/osd.json
local expected='"erasure_code_profile":"default"'
! grep "$expected" $dir/osd.json || return 1
- ./ceph osd pool create erasurecodes 12 12 erasure
- ./ceph --format json osd dump | tee $dir/osd.json
+ ceph osd pool create erasurecodes 12 12 erasure
+ ceph --format json osd dump | tee $dir/osd.json
grep "$expected" $dir/osd.json > /dev/null || return 1
- ./ceph osd pool create erasurecodes 12 12 erasure 2>&1 | \
+ ceph osd pool create erasurecodes 12 12 erasure 2>&1 | \
grep 'already exists' || return 1
- ./ceph osd pool create erasurecodes 12 12 2>&1 | \
+ ceph osd pool create erasurecodes 12 12 2>&1 | \
grep 'cannot change to type replicated' || return 1
}
run_mon $dir a
local ruleset=ruleset0
local root=host1
- ./ceph osd crush add-bucket $root host
+ ceph osd crush add-bucket $root host
local failure_domain=osd
local poolname=mypool
- ./ceph osd crush rule create-simple $ruleset $root $failure_domain || return 1
- ./ceph osd crush rule ls | grep $ruleset
- ./ceph osd pool create $poolname 12 12 replicated $ruleset 2>&1 | \
+ ceph osd crush rule create-simple $ruleset $root $failure_domain || return 1
+ ceph osd crush rule ls | grep $ruleset
+ ceph osd pool create $poolname 12 12 replicated $ruleset 2>&1 | \
grep "pool 'mypool' created" || return 1
- rule_id=`./ceph osd crush rule dump $ruleset | grep "rule_id" | awk -F[' ':,] '{print $4}'`
- ./ceph osd pool get $poolname crush_ruleset 2>&1 | \
+ rule_id=`ceph osd crush rule dump $ruleset | grep "rule_id" | awk -F[' ':,] '{print $4}'`
+ ceph osd pool get $poolname crush_ruleset 2>&1 | \
grep "crush_ruleset: $rule_id" || return 1
#non-existent crush ruleset
- ./ceph osd pool create newpool 12 12 replicated non-existent 2>&1 | \
+ ceph osd pool create newpool 12 12 replicated non-existent 2>&1 | \
grep "doesn't exist" || return 1
}
local dir=$1
run_mon $dir a || return 1
# change the default crush rule
- ./ceph tell mon.a injectargs -- \
+ ceph tell mon.a injectargs -- \
--osd_pool_default_crush_replicated_ruleset 66 || return 1
- ./ceph osd pool create mypool 12 12 replicated 2>&1 | \
+ ceph osd pool create mypool 12 12 replicated 2>&1 | \
grep "No suitable CRUSH ruleset exists" || return 1
- CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
+ CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
! grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
}
local dir=$1
run_mon $dir a || return 1
# change the default crush rule using deprecated option
- ./ceph tell mon.a injectargs -- \
+ ceph tell mon.a injectargs -- \
--osd_pool_default_crush_rule 55 || return 1
- ./ceph osd pool create mypool 12 12 replicated 2>&1 | \
+ ceph osd pool create mypool 12 12 replicated 2>&1 | \
grep "No suitable CRUSH ruleset exists" || return 1
- CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
+ CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
}
function TEST_replicated_pool_with_non_existent_default_ruleset_2() {
local dir=$1
run_mon $dir a || return 1
- ./ceph tell mon.a injectargs -- \
+ ceph tell mon.a injectargs -- \
--osd_pool_default_crush_rule 77 \
--osd_pool_default_crush_replicated_ruleset 33 || return 1
- ./ceph osd pool create mypool 12 12 replicated 2>&1 | \
+ ceph osd pool create mypool 12 12 replicated 2>&1 | \
grep "No suitable CRUSH ruleset exists" || return 1
- CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
+ CEPH_ARGS='' ceph --admin-daemon $dir/ceph-mon.a.asok log flush || return 1
grep "osd_pool_default_crush_rule is deprecated " $dir/mon.a.log || return 1
}
local dir=$1
run_mon $dir a || return 1
- ./ceph osd erasure-code-profile set LRCprofile \
+ ceph osd erasure-code-profile set LRCprofile \
plugin=lrc \
mapping=DD_ \
layers='[ [ "DDc", "" ] ]' || return 1
- ./ceph --format json osd dump > $dir/osd.json
+ ceph --format json osd dump > $dir/osd.json
local expected='"erasure_code_profile":"LRCprofile"'
local poolname=erasurecodes
! grep "$expected" $dir/osd.json || return 1
- ./ceph osd pool create $poolname 12 12 erasure LRCprofile
- ./ceph --format json osd dump | tee $dir/osd.json
+ ceph osd pool create $poolname 12 12 erasure LRCprofile
+ ceph --format json osd dump | tee $dir/osd.json
grep "$expected" $dir/osd.json > /dev/null || return 1
- ./ceph osd crush rule ls | grep $poolname || return 1
+ ceph osd crush rule ls | grep $poolname || return 1
}
function TEST_replicated_pool() {
local dir=$1
run_mon $dir a || return 1
- ./ceph osd pool create replicated 12 12 replicated replicated_ruleset 2>&1 | \
+ ceph osd pool create replicated 12 12 replicated replicated_ruleset 2>&1 | \
grep "pool 'replicated' created" || return 1
- ./ceph osd pool create replicated 12 12 replicated replicated_ruleset 2>&1 | \
+ ceph osd pool create replicated 12 12 replicated replicated_ruleset 2>&1 | \
grep 'already exists' || return 1
# default is replicated
- ./ceph osd pool create replicated1 12 12 2>&1 | \
+ ceph osd pool create replicated1 12 12 2>&1 | \
grep "pool 'replicated1' created" || return 1
# default is replicated, pgp_num = pg_num
- ./ceph osd pool create replicated2 12 2>&1 | \
+ ceph osd pool create replicated2 12 2>&1 | \
grep "pool 'replicated2' created" || return 1
- ./ceph osd pool create replicated 12 12 erasure 2>&1 | \
+ ceph osd pool create replicated 12 12 erasure 2>&1 | \
grep 'cannot change to type erasure' || return 1
}
function TEST_no_pool_delete() {
local dir=$1
run_mon $dir a || return 1
- ./ceph osd pool create foo 1 || return 1
- ./ceph tell mon.a injectargs -- --no-mon-allow-pool-delete || return 1
- ! ./ceph osd pool delete foo foo --yes-i-really-really-mean-it || return 1
- ./ceph tell mon.a injectargs -- --mon-allow-pool-delete || return 1
- ./ceph osd pool delete foo foo --yes-i-really-really-mean-it || return 1
+ ceph osd pool create foo 1 || return 1
+ ceph tell mon.a injectargs -- --no-mon-allow-pool-delete || return 1
+ ! ceph osd pool delete foo foo --yes-i-really-really-mean-it || return 1
+ ceph tell mon.a injectargs -- --mon-allow-pool-delete || return 1
+ ceph osd pool delete foo foo --yes-i-really-really-mean-it || return 1
}
function TEST_utf8_cli() {
# the fix for http://tracker.ceph.com/issues/7387. If it turns out
# to not be OK (when is the default encoding *not* UTF-8?), maybe
# the character '黄' can be replaced with the escape $'\xe9\xbb\x84'
- ./ceph osd pool create 黄 1024 2>&1 | \
+ ceph osd pool create 黄 1024 2>&1 | \
grep "pool '黄' created" || return 1
- ./ceph osd lspools 2>&1 | \
+ ceph osd lspools 2>&1 | \
grep "黄" || return 1
- ./ceph -f json-pretty osd dump | \
+ ceph -f json-pretty osd dump | \
python -c "import json; import sys; json.load(sys.stdin)" || return 1
- ./ceph osd pool delete 黄 黄 --yes-i-really-really-mean-it
+ ceph osd pool delete 黄 黄 --yes-i-really-really-mean-it
}
main osd-pool-create "$@"
local epoch=${3:+-v $3}
local osdmap=`mktemp`
- ceph-monstore-tool $store_path get osdmap -- \
+ $CEPH_BIN/ceph-monstore-tool $store_path get osdmap -- \
$epoch -o $osdmap > /dev/null || return
- echo $(osdmaptool --dump xml $osdmap 2> /dev/null | \
+ echo $($CEPH_BIN/osdmaptool --dump xml $osdmap 2> /dev/null | \
$XMLSTARLET sel -t -m "$query" -v .)
rm -f $osdmap
local crush=$4
local osdmap=`mktemp`
- ceph-monstore-tool $store_path get osdmap -- \
+ $CEPH_BIN/ceph-monstore-tool $store_path get osdmap -- \
-v $epoch -o $osdmap > /dev/null
- osdmaptool --export-crush $crush $osdmap &> /dev/null
+ $CEPH_BIN/osdmaptool --export-crush $crush $osdmap &> /dev/null
- if crushtool --test --check $max_osd -i $crush > /dev/null; then
+ if $CEPH_BIN/crushtool --test --check $max_osd -i $crush > /dev/null; then
good=true
else
good=false
if test $good_epoch -eq $last_osdmap_epoch; then
echo "and mon store has no faulty crush maps."
elif test $output; then
- crushtool --decompile $good_crush --outfn $output
+ $CEPH_BIN/crushtool --decompile $good_crush --outfn $output
elif test $rewrite; then
- ceph-monstore-tool $store_path rewrite-crush -- \
+ $CEPH_BIN/ceph-monstore-tool $store_path rewrite-crush -- \
--crush $good_crush \
--good-epoch $good_epoch
else
echo
- crushtool --decompile $good_crush
+ $CEPH_BIN/crushtool --decompile $good_crush
fi
rm -f $good_crush
}