From: Joao Eduardo Luis Date: Fri, 11 Oct 2013 00:43:48 +0000 (-0700) Subject: mon: OSDMonitor: allow (un)setting 'hashpspool' flag via 'osd pool set' X-Git-Tag: v0.67.8~48^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5667566313b69dca011e897b2fa752356ad8901b;p=ceph.git mon: OSDMonitor: allow (un)setting 'hashpspool' flag via 'osd pool set' Signed-off-by: Joao Eduardo Luis Reviewed-by: Sage Weil (cherry picked from commit 1c2886964a0c005545abab0cf8feae7e06ac02a8) Conflicts: src/mon/MonCommands.h src/mon/OSDMonitor.cc mon: ceph hashpspool false clears the flag instead of toggling it. Signed-off-by: Loic Dachary Reviewed-by: Christophe Courtaut Reviewed-by: Sage Weil (cherry picked from commit 589e2fa485b94244c79079f249428d4d545fca18 Replace some of the infrastructure required by this command that was not present in Dumpling with single-use code. Signed-off-by: Greg Farnum --- diff --git a/qa/workunits/cephtool/test.sh b/qa/workunits/cephtool/test.sh index 659589e530d..b832f53126d 100755 --- a/qa/workunits/cephtool/test.sh +++ b/qa/workunits/cephtool/test.sh @@ -294,6 +294,9 @@ ceph osd pool set data size 3 ceph osd pool get data size | grep 'size: 3' ceph osd pool set data size 2 +ceph osd pool set data hashpspool 1 +ceph osd pool set data hashpspool 0 + ceph osd pool get rbd crush_ruleset | grep 'crush_ruleset: 2' ceph osd thrash 10 diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index 39f36504000..f42a67c637e 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -497,7 +497,7 @@ COMMAND("osd pool get " \ "get pool parameter ", "osd", "r", "cli,rest") COMMAND("osd pool set " \ "name=pool,type=CephPoolname " \ - "name=var,type=CephChoices,strings=size|min_size|crash_replay_interval|pg_num|pgp_num|crush_ruleset " \ + "name=var,type=CephChoices,strings=size|min_size|crash_replay_interval|pg_num|pgp_num|crush_ruleset|hashpspool " \ "name=val,type=CephInt", \ "set pool parameter to ", "osd", "rw", "cli,rest") // 'val' is a CephString because it can include a unit. Perhaps diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 740d82682c8..51c38520c4d 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -3635,7 +3635,24 @@ done: ss << "crush ruleset " << n << " does not exist"; err = -ENOENT; } - } + } else if (var == "hashpspool") { + pg_pool_t new_pool = *p; + if (pending_inc.new_pools.count(pool)) + new_pool = pending_inc.new_pools[pool]; + if (n == 1) { + new_pool.flags |= pg_pool_t::FLAG_HASHPSPOOL; + ss << "set"; + } else if (n == 0) { + new_pool.flags &= ~pg_pool_t::FLAG_HASHPSPOOL; + ss << "unset"; + } else { + ss << "expecting value 1 or 0"; + err = -EINVAL; + } + pending_inc.new_pools[pool] = new_pool; + ss << " pool " << pool << " flag hashpspool"; + } + pending_inc.new_pools[pool].last_change = pending_inc.epoch; getline(ss, rs); wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs, get_last_committed()));