From: Igor Fedotov Date: Fri, 19 Feb 2021 11:23:00 +0000 (+0300) Subject: tools/ceph-bluestore-tool: be more legible before requesting additional params X-Git-Tag: v14.2.22~15^2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=6a37fad6d7a102148e181b09d198e9843a7286cf;p=ceph.git tools/ceph-bluestore-tool: be more legible before requesting additional params Request DB/WAL size specification when relevant devices are created only. Signed-off-by: Igor Fedotov (cherry picked from commit 94a91f54fe30a4dd113fbc1b02bc3f3d52c82a92) --- diff --git a/src/os/bluestore/bluestore_tool.cc b/src/os/bluestore/bluestore_tool.cc index fc33289bf98ee..a7300255154fd 100644 --- a/src/os/bluestore/bluestore_tool.cc +++ b/src/os/bluestore/bluestore_tool.cc @@ -675,6 +675,7 @@ int main(int argc, char **argv) parse_devices(cct.get(), devs, &cur_devs_map, &has_db, &has_wal); + const char* rlpath = nullptr; if (has_db && has_wal) { cerr << "can't allocate new device, both WAL and DB exist" << std::endl; @@ -688,24 +689,32 @@ int main(int argc, char **argv) << std::endl; exit(EXIT_FAILURE); } else if(!dev_target.empty() && - realpath(dev_target.c_str(), target_path) == nullptr) { + (rlpath = realpath(dev_target.c_str(), target_path)) == nullptr) { cerr << "failed to retrieve absolute path for " << dev_target << ": " << cpp_strerror(errno) << std::endl; exit(EXIT_FAILURE); } - // Create either DB or WAL volume - int r = EXIT_FAILURE; - if (need_db && cct->_conf->bluestore_block_db_size == 0) { - cerr << "DB size isn't specified, " - "please set Ceph bluestore-block-db-size config parameter " - << std::endl; - } else if (!need_db && cct->_conf->bluestore_block_wal_size == 0) { - cerr << "WAL size isn't specified, " - "please set Ceph bluestore-block-wal-size config parameter " - << std::endl; - } else { + // Attach either DB or WAL volume, create if needed + struct stat st; + int r = ::stat(rlpath, &st); + // check if we need additional size specification + if (r == ENOENT || (r == 0 && S_ISREG(st.st_mode) && st.st_size == 0)) { + r = 0; + if (need_db && cct->_conf->bluestore_block_db_size == 0) { + cerr << "Might need DB size specification, " + "please set Ceph bluestore-block-db-size config parameter " + << std::endl; + r = EXIT_FAILURE; + } else if (!need_db && cct->_conf->bluestore_block_wal_size == 0) { + cerr << "Might need WAL size specification, " + "please set Ceph bluestore-block-wal-size config parameter " + << std::endl; + r = EXIT_FAILURE; + } + } + if (r == 0) { BlueStore bluestore(cct.get(), path); r = bluestore.add_new_bluefs_device( need_db ? BlueFS::BDEV_NEWDB : BlueFS::BDEV_NEWWAL, @@ -718,8 +727,8 @@ int main(int argc, char **argv) << cpp_strerror(r) << std::endl; } - return r; } + return r; } else if (action == "bluefs-bdev-migrate") { map cur_devs_map; set src_dev_ids;