]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: add 'osd primary-affinity ...' command
authorSage Weil <sage@inktank.com>
Mon, 23 Dec 2013 19:30:13 +0000 (11:30 -0800)
committerSage Weil <sage@inktank.com>
Wed, 12 Feb 2014 21:38:12 +0000 (13:38 -0800)
Signed-off-by: Sage Weil <sage@inktank.com>
qa/workunits/cephtool/test.sh
src/mon/MonCommands.h
src/mon/OSDMonitor.cc

index f53b0c031b9c06f6685ec227870a5e0d84e534b5..259e3706ab66c7a40f64ecf7c24d1a185b5fb0b9 100755 (executable)
@@ -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
index 4ae59858c10d7ba5ce73abeda80774c56edd7bba..7a52646a91ebea767a8d92f5f95593f0c49b3ac9 100644 (file)
@@ -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 < <weight> < 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 <= <weight> <= 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", \
index a3ff89abedcbbdd585ec0d56576586730361cb52..8d162add6ca75420443f2d251c158e0fedd7c4eb 100644 (file)
@@ -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;
     }