From 35fec2fe2d091d3be8ef18b563930e9f7659e546 Mon Sep 17 00:00:00 2001 From: wangyunqing Date: Thu, 16 Jul 2020 15:06:53 +0800 Subject: [PATCH] mon: fix the 'Error ERANGE' message when conf "osd_objectstore" is filestore Fixes: https://tracker.ceph.com/issues/37532 Signed-off-by: wangyunqing (cherry picked from commit 4155a79f76b177ada79af746de4448773e07584a) Conflicts: src/mon/OSDMonitor.cc - in nautilus, "cmd_getval()" needs cct as first argument --- src/mon/OSDMonitor.cc | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index ff7052013815..601abc88b910 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -12185,22 +12185,38 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, goto reply; } - if (expected_num_objects > 0 && - cct->_conf->osd_objectstore == "filestore" && - cct->_conf->filestore_merge_threshold > 0) { + set osds; + osdmap.get_all_osds(osds); + bool has_filestore_osd = std::any_of(osds.begin(), osds.end(), [this](int osd) { + string type; + if (!get_osd_objectstore_type(osd, &type)) { + return type == "filestore"; + } else { + return false; + } + }); + + if (has_filestore_osd && + expected_num_objects > 0 && + cct->_conf->filestore_merge_threshold > 0) { ss << "'expected_num_objects' requires 'filestore_merge_threshold < 0'"; err = -EINVAL; goto reply; } - if (expected_num_objects == 0 && - cct->_conf->osd_objectstore == "filestore" && - cct->_conf->filestore_merge_threshold < 0) { + if (has_filestore_osd && + expected_num_objects == 0 && + cct->_conf->filestore_merge_threshold < 0) { int osds = osdmap.get_num_osds(); - if (osds && (pg_num >= 1024 || pg_num / osds >= 100)) { + bool sure = false; + cmd_getval(cct, cmdmap, "yes_i_really_mean_it", sure); + if (!sure && osds && (pg_num >= 1024 || pg_num / osds >= 100)) { ss << "For better initial performance on pools expected to store a " - << "large number of objects, consider supplying the " - << "expected_num_objects parameter when creating the pool.\n"; + << "large number of objects, consider supplying the " + << "expected_num_objects parameter when creating the pool." + << " Pass --yes-i-really-mean-it to ignore it"; + err = -EPERM; + goto reply; } } -- 2.47.3