From: Sage Weil Date: Mon, 23 Dec 2013 19:30:13 +0000 (-0800) Subject: mon/OSDMonitor: add 'osd primary-affinity ...' command X-Git-Tag: v0.78~173^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1cc8c258b9dedf9ba5f6b71804a7e3239c145282;p=ceph.git mon/OSDMonitor: add 'osd primary-affinity ...' command Signed-off-by: Sage Weil --- diff --git a/qa/workunits/cephtool/test.sh b/qa/workunits/cephtool/test.sh index f53b0c031b9c..259e3706ab66 100755 --- a/qa/workunits/cephtool/test.sh +++ b/qa/workunits/cephtool/test.sh @@ -361,6 +361,10 @@ ceph osd reweight 0 0.9 expect_false ceph osd reweight 0 -1 ceph osd reweight 0 1 +ceph osd primary-affinity osd.0 .9 +expect_false ceph osd primary-affinity osd.0 -2 +ceph osd primary-affinity osd.0 1 + for s in pg_num pgp_num size min_size crash_replay_interval crush_ruleset; do ceph osd pool get data $s done diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index 4ae59858c10d..7a52646a91eb 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -471,6 +471,11 @@ COMMAND("osd reweight " \ "name=id,type=CephInt,range=0 " \ "type=CephFloat,name=weight,range=0.0|1.0", \ "reweight osd to 0.0 < < 1.0", "osd", "rw", "cli,rest") +COMMAND("osd primary-affinity " \ + "name=id,type=CephOsdName " \ + "type=CephFloat,name=weight,range=0.0|1.0", \ + "adjust osd primary-affinity from 0.0 <= <= 1.0", \ + "osd", "rw", "cli,rest") COMMAND("osd lost " \ "name=id,type=CephInt,range=0 " \ "name=sure,type=CephChoices,strings=--yes-i-really-mean-it,req=false", \ diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index a3ff89abedcb..8d162add6ca7 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -3949,6 +3949,28 @@ bool OSDMonitor::prepare_command(MMonCommand *m) get_last_committed() + 1)); return true; } + } else if (prefix == "osd primary-affinity") { + int64_t id; + if (!cmd_getval(g_ceph_context, cmdmap, "id", id)) { + ss << "invalid osd id"; + err = -EINVAL; + goto reply; + } + double w; + cmd_getval(g_ceph_context, cmdmap, "weight", w); + long ww = (int)((double)CEPH_OSD_MAX_PRIMARY_AFFINITY*w); + if (ww < 0L) { + ss << "weight must be >= 0"; + err = -EINVAL; + goto reply; + } + if (osdmap.exists(id)) { + pending_inc.new_primary_affinity[id] = ww; + ss << "set osd." << id << " primary-affinity to " << w << " (" << ios::hex << ww << ios::dec << ")"; + getline(ss, rs); + wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs, get_last_committed())); + return true; + } } else if (prefix == "osd reweight") { int64_t id; cmd_getval(g_ceph_context, cmdmap, "id", id); @@ -3956,7 +3978,7 @@ bool OSDMonitor::prepare_command(MMonCommand *m) cmd_getval(g_ceph_context, cmdmap, "weight", w); long ww = (int)((double)CEPH_OSD_IN*w); if (ww < 0L) { - ss << "weight must be > 0"; + ss << "weight must be >= 0"; err = -EINVAL; goto reply; }