]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Create pg_split test
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Mon, 29 Nov 2010 20:56:23 +0000 (12:56 -0800)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Mon, 29 Nov 2010 22:12:43 +0000 (14:12 -0800)
Signed-off-by: Colin McCabe <colinm@hq.newdream.net>
src/mon/OSDMonitor.cc
src/test/test_split.sh [new file with mode: 0755]

index 9230d0a8f5278ceba65ab7cac01b63f2c6c92392..36df5c10c1948fe6019bbf41e1893186e9002557 100644 (file)
@@ -1484,7 +1484,6 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
            return true;
          }
        }
-
       }
       else if (m->cmd[2] == "create" && m->cmd.size() >= 4) {
         int ret = prepare_new_pool(m->cmd[3]);
@@ -1568,6 +1567,43 @@ bool OSDMonitor::prepare_command(MMonCommand *m)
          }
        }
       }
+      else if (m->cmd[2] == "get") {
+       if (m->cmd.size() != 5) {
+         err = -EINVAL;
+         ss << "usage: osd pool get <poolname> <field>";
+         goto out;
+       }
+       int pool = osdmap.lookup_pg_pool_name(m->cmd[3].c_str());
+       if (pool < 0) {
+         ss << "unrecognized pool '" << m->cmd[3] << "'";
+         err = -ENOENT;
+         goto out;
+       }
+
+       const pg_pool_t *p = osdmap.get_pg_pool(pool);
+       if (m->cmd[4] == "pg_num") {
+         ss << "PG_NUM: " << p->get_pg_num();
+         err = 0;
+         goto out;
+       }
+       if (m->cmd[4] == "pgp_num") {
+         ss << "PGP_NUM: " << p->get_pgp_num();
+         err = 0;
+         goto out;
+       }
+       if (m->cmd[4] == "lpg_num") {
+         ss << "LPG_NUM: " << p->get_lpg_num();
+         err = 0;
+         goto out;
+       }
+       if (m->cmd[4] == "lpgp_num") {
+         ss << "LPPG_NUM: " << p->get_lpgp_num();
+         err = 0;
+         goto out;
+       }
+       ss << "don't know how to get pool field " << m->cmd[4];
+       goto out;
+      }
     }
     else {
       ss << "unknown command " << m->cmd[1];
diff --git a/src/test/test_split.sh b/src/test/test_split.sh
new file mode 100755 (executable)
index 0000000..d8db764
--- /dev/null
@@ -0,0 +1,57 @@
+#!/bin/bash -x
+
+#
+# Add some objects to the data PGs, and then test splitting those PGs
+#
+
+# Includes
+source "`dirname $0`/test_common.sh"
+
+# Constants
+my_write_objects() {
+        write_objects $1 $2 10 1000000
+}
+
+setup() {
+        export CEPH_NUM_OSD=$1
+
+        # Start ceph
+        ./stop.sh
+
+        ./vstart.sh -d -n
+}
+
+get_pgp_num() {
+        ./ceph osd pool get data pgp_num > $TEMPDIR/pgp_num
+        [ $? -eq 0 ] || die "failed to get pgp_num"
+        PGP_NUM=`grep PGP_NUM $TEMPDIR/pgp_num | sed 's/.*PGP_NUM:\([ 0123456789]*\).*$/\1/'`
+}
+
+split1_impl() {
+        # Write lots and lots of objects
+        my_write_objects 1 2
+
+        get_pgp_num
+        echo "\$PGP_NUM=$PGP_NUM"
+
+        # Double the number of PGs
+        PGP_NUM=$((PGP_NUM*2))
+        echo "doubling PGP_NUM to $PGP_NUM..."
+        ./ceph osd pool set data pgp_num $PGP_NUM
+
+        sleep 30
+
+        # success
+        return 0
+}
+
+split1() {
+        setup 2
+        split1_impl
+}
+
+run() {
+        split1 || die "test failed"
+}
+
+$@