goto reply;
}
- if (expected_num_objects > 0 &&
- cct->_conf->osd_objectstore == "filestore" &&
- cct->_conf->filestore_merge_threshold > 0) {
+ set<int32_t> 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;
}
}