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,

Reply via email to