From: Colin Patrick McCabe Date: Mon, 29 Nov 2010 20:56:23 +0000 (-0800) Subject: osd: Create pg_split test X-Git-Tag: v0.24~104 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=851918134bf67b6b1aada0dfd33c085f81a44b8d;p=ceph.git osd: Create pg_split test Signed-off-by: Colin McCabe --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 9230d0a8f527..36df5c10c194 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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 "; + 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 index 000000000000..d8db7649d73e --- /dev/null +++ b/src/test/test_split.sh @@ -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" +} + +$@