From: Adam Kupczyk Date: Wed, 15 Dec 2021 11:04:13 +0000 (+0000) Subject: os/bluestore/ceph-bluestore-tool: Fix bluefs-import command X-Git-Tag: v16.2.11~91^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a63beb3c561f6bbc073eb8845254d73e06aed477;p=ceph.git os/bluestore/ceph-bluestore-tool: Fix bluefs-import command Modify bluefs-import command so it can properly initialize allocators. Without allocators initialized, importing file to bluefs did overwrite some random data, including first block on device. Signed-off-by: Adam Kupczyk (cherry picked from commit b00a475fb9b1a3b911f362e428af5c63c25ef5af) --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 168cad20924d..191d4a622783 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -5968,6 +5968,11 @@ int BlueStore::close_db_environment() return 0; } +/* gets access to bluefs supporting RocksDB */ +BlueFS* BlueStore::get_bluefs() { + return bluefs; +} + int BlueStore::_prepare_db_environment(bool create, bool read_only, std::string* _fn, std::string* _kv_backend) { diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 90308186c8fc..58a718da89af 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -2654,6 +2654,7 @@ public: int open_db_environment(KeyValueDB **pdb, bool to_repair); int close_db_environment(); + BlueFS* get_bluefs(); int write_meta(const std::string& key, const std::string& value) override; int read_meta(const std::string& key, std::string *value) override; diff --git a/src/os/bluestore/bluestore_tool.cc b/src/os/bluestore/bluestore_tool.cc index 43cef737b192..1d0bdb391626 100644 --- a/src/os/bluestore/bluestore_tool.cc +++ b/src/os/bluestore/bluestore_tool.cc @@ -244,8 +244,14 @@ static void bluefs_import( cerr << "open " << input_file.c_str() << " failed: " << cpp_strerror(r) << std::endl; exit(EXIT_FAILURE); } - - std::unique_ptr bs{open_bluefs_readonly(cct, path, devs)}; + BlueStore bluestore(cct, path); + KeyValueDB *db_ptr; + r = bluestore.open_db_environment(&db_ptr, false); + if (r < 0) { + cerr << "error preparing db environment: " << cpp_strerror(r) << std::endl; + exit(EXIT_FAILURE); + } + BlueFS* bs = bluestore.get_bluefs(); BlueFS::FileWriter *h; fs::path file_path(dest_file); @@ -265,7 +271,7 @@ static void bluefs_import( f.close(); bs->fsync(h); bs->close_writer(h); - bs->umount(); + bluestore.close_db_environment(); return; }