]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Add ./ceph dump pg debug degraded_pgs_exist
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Mon, 22 Nov 2010 19:32:38 +0000 (11:32 -0800)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Tue, 30 Nov 2010 23:43:44 +0000 (15:43 -0800)
./ceph dump pg debug degraded_pgs_exist returns TRUE if some pgs are
degraded; false otherwise.

tests: move start_recovery into test_common.sh.
Create recovery1 test.

Signed-off-by: Colin McCabe <colinm@hq.newdream.net>
src/mon/PGMonitor.cc
src/test/test_common.sh
src/test/test_lost.sh
src/test/test_unfound.sh

index 52c8d92f32fd9a72430fbafdf288be41f5c3c1f9..0e6fc312eb8373d243a893541ceadafb3e4e7bc5 100644 (file)
@@ -754,6 +754,24 @@ bool PGMonitor::preprocess_command(MMonCommand *m)
 
        r = 0;
       }
+      else if (m->cmd[2] == "degraded_pgs_exist") {
+       bool degraded_pgs_exist = false;
+       hash_map<pg_t,pg_stat_t>::const_iterator end = pg_map.pg_stat.end();
+       for (hash_map<pg_t,pg_stat_t>::const_iterator s = pg_map.pg_stat.begin();
+            s != end; ++s)
+       {
+         if (s->second.num_objects_degraded > 0) {
+           degraded_pgs_exist = true;
+           break;
+         }
+       }
+       if (degraded_pgs_exist)
+         ss << "TRUE";
+       else
+         ss << "FALSE";
+
+       r = 0;
+      }
     }
   }
 
index 75a0770b88091a08d2feda1d9634548d5cde5b92..143140999d83aa50ccbe0d272df7931f0d3f87c7 100755 (executable)
@@ -118,6 +118,7 @@ poll_cmd() {
 
 dump_osd_store() {
         set +x
+        echo "dumping osd store..."
         find ./dev/osd* -type f | grep obj | grep head$ | while read file; do
                 echo $file
                 head -c 10 $file
@@ -125,4 +126,13 @@ dump_osd_store() {
         done
 }
 
+start_recovery() {
+        CEPH_NUM_OSD=$1
+        osd=0
+        while [ $osd -lt $CEPH_NUM_OSD ]; do
+                ./ceph osd tell $osd injectargs 'osd recovery delay start = 0'
+                osd=$((osd+1))
+        done
+}
+
 init
index baba361435bff425faaa736c2fa8476ec5e2672e..6279dcc797735e5848c8edeaae887c8864a8cf47 100755 (executable)
@@ -1,48 +1,36 @@
 #!/bin/bash -x
 
 #
-# Simple test of recovery logic
+# Test the lost object logic
 #
 
 # Includes
-dir=`dirname $0`
-source $dir/test_common.sh
-setup_tempdir
-cd $dir/..
-
-# Constants
-MAX_OBJS=50
-OBJ_SIZE=1000000
-
-write_objects() {
-        start_ver=$1
-        stop_ver=$2
-        for v in `seq $start_ver $stop_ver`; do
-                chr=`perl -e "print chr(48+$v)"`
-                head -c $OBJ_SIZE /dev/zero  | tr '\0' "$chr" > $TEMPDIR/ver$v
-                for i in `seq -w 1 $MAX_OBJS`; do
-                        ./rados -p data put obj$i $TEMPDIR/ver$v || die "radostool failed"
-                done
-        done
+source "`dirname $0`/test_common.sh"
+
+# Functions
+my_write_objects() {
+        write_objects $1 $2 10 1000000
 }
 
 setup() {
+        export CEPH_NUM_OSD=$1
+
         # Start ceph
         ./stop.sh
 
         # set recovery start to a really long time to ensure that we don't start recovery
-        CEPH_NUM_OSD=2 ./vstart.sh -d -n -o 'osd recovery delay start = 10000' || die "vstart failed"
+        ./vstart.sh -d -n -o 'osd recovery delay start = 10000' || die "vstart failed"
 }
 
-do_test() {
+recovery1_impl() {
         # Write lots and lots of objects
-        write_objects 1 2
+        my_write_objects 1 1
 
         # Take down osd1
         stop_osd 1
 
         # Continue writing a lot of objects
-        write_objects 3 4
+        my_write_objects 2 2
 
         # Bring up osd1
         restart_osd 1
@@ -55,13 +43,26 @@ do_test() {
         # Objects should be lost.
         stop_osd 0
 
-        # Now we should be in LOST_REVERT
+       poll_cmd "./ceph pg debug degraded_pgs_exist" TRUE 3 120
+        [ $? -eq 1 ] || die "Failed to see degraded PGs."
+       poll_cmd "./ceph pg debug unfound_objects_exist" TRUE 3 120
+        [ $? -eq 1 ] || die "Failed to see unfound objects."
+        echo "Got unfound objects."
+
+        # Turn on recovery and wait for it to complete.
+       poll_cmd "./ceph pg debug unfound_objects_exist" FALSE 3 120
+        [ $? -eq 1 ] || die "Failed to recover unfound objects."
+       poll_cmd "./ceph pg debug degraded_pgs_exist" FALSE 3 120
+        [ $? -eq 1 ] || die "Recovery never finished."
 }
 
-run() {
-        setup
+recovery1() {
+        setup 2
+        recovery1_impl
+}
 
-        do_test
+run() {
+        recovery1 || die "test failed"
 }
 
 $@
index 6d772d3ac219d436167cd914ed2967bdd164ccae..ff359cba62642cf6d86d9ed5014de8131e593782 100755 (executable)
@@ -7,7 +7,7 @@
 # Includes
 source "`dirname $0`/test_common.sh"
 
-# Constants
+# Functions
 my_write_objects() {
         write_objects $1 $2 10 1000000
 }
@@ -22,15 +22,6 @@ setup() {
         ./vstart.sh -d -n -o 'osd recovery delay start = 10000' || die "vstart failed"
 }
 
-start_recovery() {
-        CEPH_NUM_OSD=$1
-        osd=0
-        while [ $osd -lt $CEPH_NUM_OSD ]; do
-                ./ceph osd tell $osd injectargs 'osd recovery delay start = 0'
-                osd=$((osd+1))
-        done
-}
-
 osd_resurrection_1_impl() {
         # Write lots and lots of objects
         my_write_objects 1 2