]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
qa/standalone/osd/pg-split-merge.sh: reproduce pg merge problem with empty pgs
authorSage Weil <sage@redhat.com>
Mon, 11 Mar 2019 22:10:28 +0000 (17:10 -0500)
committerSage Weil <sage@redhat.com>
Mon, 11 Mar 2019 22:10:28 +0000 (17:10 -0500)
This reproduces http://tracker.ceph.com/issues/38655

Signed-off-by: Sage Weil <sage@redhat.com>
qa/standalone/osd/pg-split-merge.sh

index 11d1c4387439510912b13998be4a096d2aee88cd..97583da048b69d0f053413f34934dbec7ccae3d9 100755 (executable)
@@ -16,6 +16,63 @@ function run() {
     done
 }
 
+function TEST_a_merge_empty() {
+    local dir=$1
+
+    setup $dir || return 1
+    run_mon $dir a --osd_pool_default_size=3 || return 1
+    run_mgr $dir x || return 1
+    run_osd $dir 0 || return 1
+    run_osd $dir 1 || return 1
+    run_osd $dir 2 || return 1
+
+    ceph osd pool create foo 2 || return 1
+    ceph osd pool set foo pgp_num 1 || return 1
+
+    wait_for_clean || return 1
+
+    # note: we need 1.0 to have the same or more objects than 1.1
+    #  1.1
+    rados -p foo put foo1 /etc/passwd
+    rados -p foo put foo2 /etc/passwd
+    rados -p foo put foo3 /etc/passwd
+    rados -p foo put foo4 /etc/passwd
+    #  1.0
+    rados -p foo put foo5 /etc/passwd
+    rados -p foo put foo6 /etc/passwd
+    rados -p foo put foo8 /etc/passwd
+    rados -p foo put foo10 /etc/passwd
+    rados -p foo put foo11 /etc/passwd
+    rados -p foo put foo12 /etc/passwd
+    rados -p foo put foo16 /etc/passwd
+
+    wait_for_clean || return 1
+
+    ceph tell osd.1 config set osd_debug_no_purge_strays true
+    ceph osd pool set foo size 2 || return 1
+    wait_for_clean || return 1
+
+    kill_daemons $dir TERM osd.2 || return 1
+    ceph-objectstore-tool --data-path $dir/2 --op remove --pgid 1.1 --force || return 1
+    activate_osd $dir 2 || return 1
+
+    wait_for_clean || return 1
+
+    # now 1.0 is there but 1.1 is not
+    ceph tell osd.2 config set osd_debug_no_acting_change true
+    ceph osd out 0 1
+    ceph osd pool set foo pg_num 1
+    sleep 5
+    ceph tell osd.2 config set osd_debug_no_acting_change false
+    ceph osd in 0 1
+    ceph osd pool set foo size 3
+
+    wait_for_clean || return 1
+    ceph pg scrub 1.0
+    sleep 5
+    ceph -s | grep inconsistent || return 1
+}
+
 function TEST_import_after_merge_and_gap() {
     local dir=$1