return true;
}
}
-
}
else if (m->cmd[2] == "create" && m->cmd.size() >= 4) {
int ret = prepare_new_pool(m->cmd[3]);
}
}
}
+ 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];
--- /dev/null
+#!/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"
+}
+
+$@