]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
tests: convert osd-scrub-repair to ceph_objectstore_tool 3033/head
authorLoic Dachary <ldachary@redhat.com>
Fri, 28 Nov 2014 15:57:27 +0000 (16:57 +0100)
committerLoic Dachary <ldachary@redhat.com>
Mon, 15 Dec 2014 10:22:23 +0000 (11:22 +0100)
http://tracker.ceph.com/issues/10201 Fixes: #10201

Signed-off-by: Loic Dachary <ldachary@redhat.com>
src/test/osd/osd-scrub-repair.sh

index 0d7c63c7ade3be074de72fd5f80839dd00275d93..8eb6d7c15b447583ae3cf1adb4bcb0947426b7cc 100755 (executable)
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU Library Public License for more details.
 #
-
-source test/mon/mon-test-helpers.sh
-source test/osd/osd-test-helpers.sh
+source test/ceph-helpers.sh
 
 function run() {
     local dir=$1
+    shift
 
     export CEPH_MON="127.0.0.1:7107"
     export CEPH_ARGS
     CEPH_ARGS+="--fsid=$(uuidgen) --auth-supported=none "
     CEPH_ARGS+="--mon-host=$CEPH_MON "
 
-    setup $dir || return 1
-    run_mon $dir a --public-addr $CEPH_MON || return 1
-    for id in $(seq 0 3) ; do
-        run_osd $dir $id || return 1
-    done
-    FUNCTIONS=${FUNCTIONS:-$(set | sed -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p')}
-    for TEST_function in $FUNCTIONS ; do
-        if ! $TEST_function $dir ; then
-            cat $dir/a/log
-            return 1
-        fi
+    local funcs=${@:-$(set | sed -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p')}
+    for func in $funcs ; do
+        $func $dir || return 1
     done
-    teardown $dir || return 1
 }
 
-function wait_for_repair() {
+function add_something() {
     local dir=$1
-    local primary=$2
-    local pg=$3
-    local -i tries=0
-    while [ $tries -lt 100 ] ; do
-        CEPH_ARGS='' ./ceph --admin-daemon $dir/ceph-osd.$primary.asok log flush || return 1
-        if grep --quiet "$pg repair ok" $dir/osd-$primary.log ; then
-            return 0
-        fi
-        let tries++
-        sleep 1
-    done
-    grep --quiet "$pg repair ok" $dir/osd-$primary.log || return 1
+    local poolname=$2
+
+    wait_for_clean || return 1
+
+    ceph osd set noscrub || return 1
+    ceph osd set nodeep-scrub || return 1
+
+    local payload=ABCDEF
+    echo $payload > $dir/ORIGINAL
+    rados --pool $poolname put SOMETHING $dir/ORIGINAL || return 1
 }
 
-function TEST_log_repair() {
+#
+# Corrupt one copy of a replicated pool
+#
+function TEST_corrupt_and_repair_replicated() {
     local dir=$1
     local poolname=rbd
-    local pg=$(get_pg $poolname SOMETHING)
-    local -a osds=($(get_osds $poolname SOMETHING))
-    local primary=${osds[$first]}
 
-    ./ceph pg repair $pg
-    wait_for_repair $dir $primary $pg 
-    grep --quiet "$pg repair starts" $dir/osd-$primary.log || return 1
+    setup $dir || return 1
+    run_mon $dir a --osd_pool_default_size=2 || return 1
+    run_osd $dir 0 || return 1
+    run_osd $dir 1 || return 1
+
+    add_something $dir $poolname
+    corrupt_and_repair_one $dir $poolname $(get_not_primary $poolname SOMETHING) || return 1
+    # Reproduces http://tracker.ceph.com/issues/8914
+    corrupt_and_repair_one $dir $poolname $(get_primary $poolname SOMETHING) || return 1
+
+    teardown $dir || return 1
 }
 
-# 
-# 1) add an object 
-# 2) remove the corresponding file from the primary OSD
-# 3) repair the PG
 #
-# Reproduces http://tracker.ceph.com/issues/8914
+# 1) add an object
+# 2) remove the corresponding file from a designated OSD
+# 3) repair the PG
+# 4) check that the file has been restored in the designated OSD
 #
-function TEST_bug_8914() {
+function corrupt_and_repair_one() {
     local dir=$1
-    local poolname=rbd
-    local payload=ABCDEF
+    local poolname=$2
+    local osd=$3
+
+    #
+    # 1) remove the corresponding file from the OSD
+    #
+    objectstore_tool $dir $osd SOMETHING remove || return 1
+    #
+    # 2) repair the PG
+    #
+    local pg=$(get_pg $poolname SOMETHING)
+    repair $pg
+    #
+    # 3) The file must be back
+    #
+    objectstore_tool $dir $osd SOMETHING list-attrs || return 1
+    rados --pool $poolname get SOMETHING $dir/COPY || return 1
+    diff $dir/ORIGINAL $dir/COPY || return 1
+}
+    wait_for_clean || return 1
 
-    ./ceph osd set noscrub || return 1
-    ./ceph osd set nodeep-scrub || return 1
+    ceph osd set noscrub || return 1
+    ceph osd set nodeep-scrub || return 1
 
+    local payload=ABCDEF
     echo $payload > $dir/ORIGINAL
     #
-    # 1) add an object 
+    # 1) add an object
     #
-    ./rados --pool $poolname put SOMETHING $dir/ORIGINAL || return 1
-    local -a osds=($(get_osds $poolname SOMETHING))
-    local file=$(find $dir/${osds[$first]} -name '*SOMETHING*')
-    local -i tries=0
-    while [ ! -f $file -a $tries -lt 100 ] ; do
-        let tries++
-        sleep 1
-    done
-    grep --quiet --recursive --text $payload $file || return 1
+    rados --pool $poolname put SOMETHING $dir/ORIGINAL || return 1
     #
-    # 2) remove the corresponding file from the primary OSD
+    # 2) remove the corresponding file from the OSD
     #
-    rm $file
+    objectstore_tool $dir $osd SOMETHING remove || return 1
     #
     # 3) repair the PG
     #
     local pg=$(get_pg $poolname SOMETHING)
-    ./ceph pg repair $pg
-    local -i tries=0
-    while [ ! -f $file -a $tries -lt 100 ] ; do
-        let tries++
-        sleep 1
-    done
+    repair $pg
     #
     # The file must be back
     #
-    test -f $file || return 1
+    objectstore_tool $dir $osd SOMETHING list-attrs || return 1
 }
 
-main osd-scrub-repair
+main osd-scrub-repair "$@"
 
 # Local Variables:
-# compile-command: "cd ../.. ; make -j4 && test/osd/osd-scrub-repair.sh"
+# compile-command: "cd ../.. ; make -j4 && \
+#    test/osd/osd-scrub-repair.sh # TEST_corrupt_and_repair_primary_replicated"
 # End: