From efd9de4983c44cb31dccdd046b352a45c29e467b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 3 Aug 2018 12:20:48 -0500 Subject: [PATCH] mon/OSDMonitor: remove ambiguous type case for 'osd pool set' value This was there for compatibility with very old monitors. Modern mons are always taking a JSON string (which may in turn contain a string, int, or float). Signed-off-by: Sage Weil --- src/mon/OSDMonitor.cc | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index da684505fb880..3eb2bf424edcc 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -6672,17 +6672,12 @@ int OSDMonitor::prepare_command_pool_set(const cmdmap_t& cmdmap, int64_t n = 0; double f = 0; int64_t uf = 0; // micro-f - if (!cmd_getval(cct, cmdmap, "val", val)) { - // wasn't a string; maybe an older mon forwarded json with an int? - if (!cmd_getval(cct, cmdmap, "val", n)) - return -EINVAL; // no value! - } else { - // we got a string. see if it contains an int. - n = strict_strtoll(val.c_str(), 10, &interr); - // or a float - f = strict_strtod(val.c_str(), &floaterr); - uf = llrintl(f * (double)1000000.0); - } + cmd_getval(cct, cmdmap, "val", val); + + // parse string as both int and float; different fields use different types. + n = strict_strtoll(val.c_str(), 10, &interr); + f = strict_strtod(val.c_str(), &floaterr); + uf = llrintl(f * (double)1000000.0); if (!p.is_tier() && (var == "hit_set_type" || var == "hit_set_period" || -- 2.39.5