This is an automated email from the ASF dual-hosted git repository. achennaka pushed a commit to branch branch-1.18.x in repository https://gitbox.apache.org/repos/asf/kudu.git
commit e41e383f0e7a48d82f459974e564da214ef6714e Author: Alexey Serbin <[email protected]> AuthorDate: Thu Oct 3 16:28:29 2024 -0700 [fs] fix fs_manager-test on macOS Before this patch, some of the FsManagerTestBase.TestBaseOperations scenarios would crash with fatal error like below: F20241003 10:52:21.062906 1722713 data_dirs.cc:290] Check failed: "file" == opts_.dir_type (file vs. logr) This is a follow-up to 4da8b20070a7c0070a1829dfd50fdc78cad88b6a. I also updated BlockManagerOptions to use the benefits of C++17. Change-Id: I9d7101a9ab16a009978f5abfd71dd68490a251f0 Reviewed-on: http://gerrit.cloudera.org:8080/21885 Tested-by: Marton Greber <[email protected]> Reviewed-by: Marton Greber <[email protected]> Reviewed-by: Abhishek Chennaka <[email protected]> (cherry picked from commit 587046b32289851d4b7e8c60067b34d7f81a561b) Reviewed-on: http://gerrit.cloudera.org:8080/21891 Tested-by: Abhishek Chennaka <[email protected]> --- src/kudu/fs/block_manager.cc | 17 +++++++++++++++-- src/kudu/fs/block_manager.h | 17 +++-------------- src/kudu/fs/fs_manager-test.cc | 20 ++++++++++++-------- src/kudu/fs/fs_manager.cc | 5 ++--- 4 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/kudu/fs/block_manager.cc b/src/kudu/fs/block_manager.cc index 4efeb0a1a..b84efa60a 100644 --- a/src/kudu/fs/block_manager.cc +++ b/src/kudu/fs/block_manager.cc @@ -17,6 +17,9 @@ #include "kudu/fs/block_manager.h" +#include <set> +#include <string> + #include <gflags/gflags.h> #include "kudu/gutil/macros.h" @@ -46,8 +49,18 @@ TAG_FLAG(block_manager_preflush_control, experimental); namespace kudu { namespace fs { -BlockManagerOptions::BlockManagerOptions() - : read_only(false) {} +const std::set<std::string>& BlockManager::block_manager_types() { + static const std::set<std::string> kAvailableTypes = { + "file", +#if defined(__linux__) + "log", +#if !defined(NO_ROCKSDB) + "logr", +#endif +#endif + }; + return kAvailableTypes; +} } // namespace fs } // namespace kudu diff --git a/src/kudu/fs/block_manager.h b/src/kudu/fs/block_manager.h index 79cb9268e..3ca81ee7b 100644 --- a/src/kudu/fs/block_manager.h +++ b/src/kudu/fs/block_manager.h @@ -17,6 +17,7 @@ #pragma once +#include <atomic> #include <cstddef> #include <cstdint> #include <memory> @@ -178,8 +179,6 @@ struct CreateBlockOptions { // Block manager creation options. struct BlockManagerOptions { - BlockManagerOptions(); - // The entity under which all metrics should be grouped. If NULL, metrics // will not be produced. // @@ -191,7 +190,7 @@ struct BlockManagerOptions { std::shared_ptr<MemTracker> parent_mem_tracker; // Whether the block manager should only allow reading. Defaults to false. - bool read_only; + bool read_only = false; }; // Utilities for Kudu block lifecycle management. All methods are @@ -199,17 +198,7 @@ struct BlockManagerOptions { class BlockManager : public RefCountedThreadSafe<BlockManager> { public: // Lists the available block manager types. - static std::set<std::string> block_manager_types() { -#if defined(__linux__) -#if defined(NO_ROCKSDB) - return { "file", "log" }; -#else - return { "file", "log", "logr" }; -#endif -#else - return { "file" }; -#endif - } + static const std::set<std::string>& block_manager_types(); virtual ~BlockManager() = default; diff --git a/src/kudu/fs/fs_manager-test.cc b/src/kudu/fs/fs_manager-test.cc index 75e26d917..b3c0cba71 100644 --- a/src/kudu/fs/fs_manager-test.cc +++ b/src/kudu/fs/fs_manager-test.cc @@ -231,16 +231,20 @@ INSTANTIATE_TEST_SUITE_P(BlockManagerTypes, FsManagerTestBase, // ::testing::ValuesIn(BlockManager::block_manager_types()), // ::testing::ValuesIn(kEncryptionType)) ::testing::Values( - make_tuple("file", kEncryptionType[0]), - make_tuple("file", kEncryptionType[1]), - make_tuple("file", kEncryptionType[2]), +#if defined(__linux__) + make_tuple("log", kEncryptionType[0]), + make_tuple("log", kEncryptionType[1]), + make_tuple("log", kEncryptionType[2]), #if !defined(NO_ROCKSDB) - make_tuple("logr", kEncryptionType[0]), - make_tuple("logr", kEncryptionType[1]), + make_tuple("logr", kEncryptionType[0]), + make_tuple("logr", kEncryptionType[1]), #endif - make_tuple("log", kEncryptionType[0]), - make_tuple("log", kEncryptionType[1]), - make_tuple("log", kEncryptionType[2]))); +#endif + make_tuple("file", kEncryptionType[0]), + make_tuple("file", kEncryptionType[1]), + make_tuple("file", kEncryptionType[2]) + ) +); TEST_P(FsManagerTestBase, TestBaseOperations) { fs_manager()->DumpFileSystemTree(std::cout, tenant_id()); diff --git a/src/kudu/fs/fs_manager.cc b/src/kudu/fs/fs_manager.cc index fdf3e582b..3f1edca82 100644 --- a/src/kudu/fs/fs_manager.cc +++ b/src/kudu/fs/fs_manager.cc @@ -804,9 +804,8 @@ void FsManager::UpdateMetadataFormatAndStampUnlock(InstanceMetadataPB* metadata) metadata->set_format_stamp(Substitute("Formatted at $0 on $1", time_str, hostname)); } -bool FsManager::IsLogType(const std::string& block_manager_type) { - return block_manager_type != "file" - && ContainsKey(BlockManager::block_manager_types(), block_manager_type); +bool FsManager::IsLogType(const string& block_manager_type) { + return block_manager_type == "log" || block_manager_type == "logr"; } Status FsManager::AddTenantMetadata(const string& tenant_name,
