From 5667566313b69dca011e897b2fa752356ad8901b Mon Sep 17 00:00:00 2001 From: Joao Eduardo Luis Date: Thu, 10 Oct 2013 17:43:48 -0700 Subject: [PATCH] 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 --- qa/workunits/cephtool/test.sh | 3 +++ src/mon/MonCommands.h | 2 +- src/mon/OSDMonitor.cc | 19 ++++++++++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/qa/workunits/cephtool/test.sh b/qa/workunits/cephtool/test.sh index 659589e530dcb..b832f53126d92 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 39f365040008a..f42a67c637e53 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 740d82682c85c..51c38520c4d5d 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())); -- 2.39.5