From: wangyunqing Date: Thu, 16 Jul 2020 07:06:53 +0000 (+0800) Subject: mon: fix the 'Error ERANGE' message when conf "osd_objectstore" is filestore X-Git-Tag: v14.2.12~33^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F37474%2Fhead;p=ceph.git 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 --- 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; } }