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: v15.2.5~30^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c0d5985f60813fb73cb1cda281b0a1e5ea54a03a;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) --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 0f940bf6a836..e62d518b9c1a 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -12589,22 +12589,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(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; } }