]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test: add test for pg list_missing on EC pool 6298/head
authorGuang Yang <yguang@yahoo-inc.com>
Mon, 19 Oct 2015 20:45:36 +0000 (20:45 +0000)
committerGuang Yang <yguang@yahoo-inc.com>
Tue, 20 Oct 2015 15:30:41 +0000 (15:30 +0000)
Signed-off-by: Guang Yang <yguang@yahoo-inc.com>
src/test/osd/osd-scrub-repair.sh

index 13fac7c2a8ee471049a8c21d56620b873b3214ed..90561dea0f21d33fef0bbc128e5dcddc9786844c 100755 (executable)
@@ -34,6 +34,7 @@ function run() {
 function add_something() {
     local dir=$1
     local poolname=$2
+    local obj=${3:-SOMETHING}
 
     wait_for_clean || return 1
 
@@ -42,7 +43,7 @@ function add_something() {
 
     local payload=ABCDEF
     echo $payload > $dir/ORIGINAL
-    rados --pool $poolname put SOMETHING $dir/ORIGINAL || return 1
+    rados --pool $poolname put $obj $dir/ORIGINAL || return 1
 }
 
 #
@@ -232,6 +233,56 @@ function TEST_unfound_erasure_coded() {
     teardown $dir || return 1
 }
 
+#
+# list_missing for EC pool
+#
+function TEST_list_missing_erasure_coded() {
+    local dir=$1
+    local poolname=ecpool
+    local profile=myprofile
+
+    setup $dir || return 1
+    run_mon $dir a || return 1
+    for id in $(seq 0 2) ; do
+        run_osd $dir $id || return 1
+    done
+    wait_for_clean || return 1
+
+    ceph osd erasure-code-profile set $profile \
+        k=2 m=1 ruleset-failure-domain=osd || return 1
+    ceph osd pool create $poolname 1 1 erasure $profile \
+        || return 1
+    wait_for_clean || return 1
+
+    # Put an object and remove the two shards (including primary)
+    add_something $dir $poolname OBJ0 || return 1
+    local -a osds=($(get_osds $poolname OBJ0))
+    objectstore_tool $dir ${osds[0]} OBJ0 remove || return 1
+    objectstore_tool $dir ${osds[1]} OBJ0 remove || return 1
+
+    # Put another object and remove two shards (excluding primary)
+    add_something $dir $poolname OBJ1 || return 1
+    local -a osds=($(get_osds $poolname OBJ1))
+    objectstore_tool $dir ${osds[1]} OBJ1 remove || return 1
+    objectstore_tool $dir ${osds[2]} OBJ1 remove || return 1
+
+    # Get get - both objects should in the same PG
+    local pg=$(get_pg $poolname OBJ0)
+
+    # Repair the PG, which triggers the recovering,
+    # and should mark the object as unfound
+    ceph pg repair $pg
+    
+    for i in $(seq 0 120) ; do
+        [ $i -lt 60 ] || return 1
+        matches=$(ceph pg $pg list_missing | egrep "OBJ0|OBJ1" | wc -l)
+        [ $matches -eq 2 ] && break
+    done
+
+    teardown $dir || return 1
+}
+
+
 main osd-scrub-repair "$@"
 
 # Local Variables: