From: Dan Mick Date: Sat, 19 Jan 2013 02:30:03 +0000 (-0800) Subject: ceph: reject negative weights at ceph osd reweight X-Git-Tag: v0.57~157^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=aea898db2b56878b50f09dcbbf52347f4cc5c754;p=ceph.git ceph: reject negative weights at ceph osd reweight Check the integer (fixed-point) value to avoid any worries about floating-point rounding. Add tests for reweight < 0. Fixes: #3872 Signed-off-by: Dan Mick Reviewed-by: Sage Weil --- diff --git a/qa/workunits/cephtool/test.sh b/qa/workunits/cephtool/test.sh index 1c9b48a5d9f2..42442c83e1c5 100755 --- a/qa/workunits/cephtool/test.sh +++ b/qa/workunits/cephtool/test.sh @@ -16,6 +16,9 @@ ceph tell osd.0 version ! ceph tell osd.9999 version ! ceph tell osd.foo version +ceph osd reweight 0 0.9 +! ceph osd reweight 0 -1 +ceph osd reweight 0 1 for id in `ceph osd ls` ; do ceph tell osd.$id version diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index c21a014a33d2..2b51ebc8858a 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2478,6 +2478,11 @@ bool OSDMonitor::prepare_command(MMonCommand *m) } else { float w = strtof(m->cmd[3].c_str(), 0); long ww = (int)((float)CEPH_OSD_IN*w); + if (ww < 0L) { + ss << "weight must be > 0"; + err = -EINVAL; + goto out; + } if (osdmap.exists(osd)) { pending_inc.new_weight[osd] = ww; ss << "reweighted osd." << osd << " to " << w << " (" << ios::hex << ww << ios::dec << ")";