Skip to content

Commit

Permalink
8
Browse files Browse the repository at this point in the history
  • Loading branch information
Yukang-Lian committed Nov 30, 2023
1 parent cfc638f commit 0f2c7a7
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 24 deletions.
16 changes: 15 additions & 1 deletion be/src/olap/wal_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand Down
2 changes: 2 additions & 0 deletions be/src/olap/wal_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<size_t>& 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:
Expand Down
42 changes: 19 additions & 23 deletions be/test/olap/wal_manager_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<void>(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

0 comments on commit 0f2c7a7

Please sign in to comment.