From 94a91f54fe30a4dd113fbc1b02bc3f3d52c82a92 Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Fri, 19 Feb 2021 14:23:00 +0300 Subject: [PATCH] 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 --- src/os/bluestore/bluestore_tool.cc | 35 +++++++++++++++++++----------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/os/bluestore/bluestore_tool.cc b/src/os/bluestore/bluestore_tool.cc index e3470385b8ba6..d7bfaa12cf9aa 100644 --- a/src/os/bluestore/bluestore_tool.cc +++ b/src/os/bluestore/bluestore_tool.cc @@ -767,6 +767,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; @@ -780,24 +781,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, @@ -810,8 +819,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; -- 2.39.5