This is an automated email from the ASF dual-hosted git repository.
alexey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git
The following commit(s) were added to refs/heads/master by this push:
new 587046b32 [fs] fix fs_manager-test on macOS
587046b32 is described below
commit 587046b32289851d4b7e8c60067b34d7f81a561b
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]>
---
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,