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 <dan.mick@inktank.com>
Reviewed-by: Sage Weil <sage.weil@inktank.com>
! 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
} 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 << ")";