From 0f2c7a7eeef3cbb7af014d7da32d91c9cd28ef94 Mon Sep 17 00:00:00 2001 From: Yukang-Lian Date: Thu, 30 Nov 2023 16:03:23 +0800 Subject: [PATCH] 8 --- be/src/olap/wal_manager.cpp | 16 +++++++++++- be/src/olap/wal_manager.h | 2 ++ be/test/olap/wal_manager_test.cpp | 42 ++++++++++++++----------------- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/be/src/olap/wal_manager.cpp b/be/src/olap/wal_manager.cpp index bad9f803150f54..b213df68bbf055 100644 --- a/be/src/olap/wal_manager.cpp +++ b/be/src/olap/wal_manager.cpp @@ -93,10 +93,24 @@ Status WalManager::init_wal_limit() { bool is_percent = true; int64_t wal_disk_limit = ParseUtil::parse_mem_spec(config::wal_max_disk_limit, -1, available_bytes, &is_percent); - if (wal_disk_limit < 0) { + if (wal_disk_limit < 0 || wal_disk_limit > available_bytes) { return Status::InternalError( "wal_max_disk_limit config is wrong, please check your config!"); } + WalManager::wal_limit = wal_disk_limit; + return Status::OK(); +} + +// Just used for ut. +Status WalManager::init_wal_limit(size_t available_bytes) { + bool is_percent = true; + int64_t wal_disk_limit = + ParseUtil::parse_mem_spec(config::wal_max_disk_limit, -1, available_bytes, &is_percent); + if (wal_disk_limit < 0 || wal_disk_limit > available_bytes) { + return Status::InternalError( + "wal_max_disk_limit config is wrong, please check your config!"); + } + WalManager::wal_limit = wal_disk_limit; return Status::OK(); } diff --git a/be/src/olap/wal_manager.h b/be/src/olap/wal_manager.h index 19305cf4983ca2..ae1bc551952d4e 100644 --- a/be/src/olap/wal_manager.h +++ b/be/src/olap/wal_manager.h @@ -74,6 +74,8 @@ class WalManager { void erase_wal_column_index(int64_t wal_id); Status get_wal_column_index(int64_t wal_id, std::vector& column_index); Status init_wal_limit(); + // Just used for ut. + Status init_wal_limit(size_t available_bytes); inline static size_t wal_limit; private: diff --git a/be/test/olap/wal_manager_test.cpp b/be/test/olap/wal_manager_test.cpp index 584c86e7eb25c0..d10bd8168b3f9e 100644 --- a/be/test/olap/wal_manager_test.cpp +++ b/be/test/olap/wal_manager_test.cpp @@ -129,90 +129,86 @@ TEST_F(WalManagerTest, TestDynamicWalSpaceLimt) { Status st = _env->wal_mgr()->init(); EXPECT_EQ(st, Status::OK()); - size_t available_bytes; - size_t disk_capacity_bytes; - // Get the root path available space. - static_cast(io::global_local_filesystem()->get_space_info("./", &disk_capacity_bytes, - - &available_bytes)); + // 1T + size_t available_bytes = 1099511627776; size_t wal_limit_bytes; WalManager::wal_limit = 0; config::wal_max_disk_limit = "0%"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::OK()); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::OK()); EXPECT_EQ(WalManager::wal_limit, 0); WalManager::wal_limit = 0; config::wal_max_disk_limit = "5%"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::OK()); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::OK()); wal_limit_bytes = available_bytes * 0.05; EXPECT_EQ(WalManager::wal_limit, wal_limit_bytes); WalManager::wal_limit = 0; config::wal_max_disk_limit = "50%"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::OK()); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::OK()); wal_limit_bytes = available_bytes * 0.5; EXPECT_EQ(WalManager::wal_limit, wal_limit_bytes); WalManager::wal_limit = 0; config::wal_max_disk_limit = "200%"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::InternalError("")); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::InternalError("")); EXPECT_EQ(WalManager::wal_limit, 0); WalManager::wal_limit = 0; config::wal_max_disk_limit = "-10%"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::InternalError("")); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::InternalError("")); EXPECT_EQ(WalManager::wal_limit, 0); WalManager::wal_limit = 0; config::wal_max_disk_limit = "0"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::OK()); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::OK()); EXPECT_EQ(WalManager::wal_limit, 0); // 1M WalManager::wal_limit = 0; config::wal_max_disk_limit = "1048576"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::OK()); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::OK()); EXPECT_EQ(WalManager::wal_limit, 1048576); // 1G WalManager::wal_limit = 0; config::wal_max_disk_limit = "1073741824"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::OK()); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::OK()); EXPECT_EQ(WalManager::wal_limit, 1073741824); // 100G WalManager::wal_limit = 0; - config::wal_max_disk_limit = "1073741824000"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::OK()); - EXPECT_EQ(WalManager::wal_limit, 1073741824000); + config::wal_max_disk_limit = "107374182400"; + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::OK()); + EXPECT_EQ(WalManager::wal_limit, 107374182400); // 1M WalManager::wal_limit = 0; config::wal_max_disk_limit = "1M"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::OK()); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::OK()); EXPECT_EQ(WalManager::wal_limit, 1048576); // 1G WalManager::wal_limit = 0; config::wal_max_disk_limit = "1G"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::OK()); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::OK()); EXPECT_EQ(WalManager::wal_limit, 1073741824); // 100G WalManager::wal_limit = 0; config::wal_max_disk_limit = "100G"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::OK()); - EXPECT_EQ(WalManager::wal_limit, 1073741824000); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::OK()); + EXPECT_EQ(WalManager::wal_limit, 107374182400); WalManager::wal_limit = 0; config::wal_max_disk_limit = "-1024"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::InternalError("")); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::InternalError("")); EXPECT_EQ(WalManager::wal_limit, 0); WalManager::wal_limit = 0; config::wal_max_disk_limit = "-1M"; - EXPECT_EQ(_env->wal_mgr()->init_wal_limit(), Status::InternalError("")); + EXPECT_EQ(_env->wal_mgr()->init_wal_limit(available_bytes), Status::InternalError("")); EXPECT_EQ(WalManager::wal_limit, 0); } } // namespace doris \ No newline at end of file