Skip to content

Commit

Permalink
fix main_capacity_quota_ check (#3349) (#3425)
Browse files Browse the repository at this point in the history
  • Loading branch information
ti-chi-bot authored Dec 20, 2021
1 parent f178659 commit 5277bb2
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 14 deletions.
33 changes: 19 additions & 14 deletions dbms/src/Storages/PathCapacityMetrics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,21 @@ extern const Metric StoreSizeUsed;

namespace DB
{
inline size_t safeGetQuota(const std::vector<size_t> & quotas, size_t idx)
{
return idx < quotas.size() ? quotas[idx] : 0;
}

inline size_t safeGetQuota(const std::vector<size_t> & quotas, size_t idx) { return idx < quotas.size() ? quotas[idx] : 0; }

PathCapacityMetrics::PathCapacityMetrics( //
const size_t capacity_quota_, // will be ignored if `main_capacity_quota` is not empty
const Strings & main_paths_, const std::vector<size_t> main_capacity_quota_, //
const Strings & latest_paths_, const std::vector<size_t> latest_capacity_quota_)
: capacity_quota(capacity_quota_), log(&Poco::Logger::get("PathCapacityMetrics"))
PathCapacityMetrics::PathCapacityMetrics(
const size_t capacity_quota_, // will be ignored if `main_capacity_quota` is not empty
const Strings & main_paths_,
const std::vector<size_t> main_capacity_quota_,
const Strings & latest_paths_,
const std::vector<size_t> latest_capacity_quota_)
: capacity_quota(capacity_quota_)
, log(&Poco::Logger::get("PathCapacityMetrics"))
{
if (main_capacity_quota_.empty())
if (!main_capacity_quota_.empty())
{
// The `capacity_quota_` is left for backward compatibility.
// If `main_capacity_quota_` is not empty, use the capacity for each path instead of global capacity.
Expand Down Expand Up @@ -130,10 +135,10 @@ FsStats PathCapacityMetrics::getFsStats() const
// Default threshold "schedule.low-space-ratio" in PD is 0.8, log warning message if avail ratio is low.
if (avail_rate <= 0.2)
LOG_WARNING(log,
"Available space is only " << DB::toString(avail_rate * 100.0, 2)
<< "% of capacity size. Avail size: " << formatReadableSizeWithBinarySuffix(total_stat.avail_size)
<< ", used size: " << formatReadableSizeWithBinarySuffix(total_stat.used_size)
<< ", capacity size: " << formatReadableSizeWithBinarySuffix(total_stat.capacity_size));
"Available space is only " << DB::toString(avail_rate * 100.0, 2)
<< "% of capacity size. Avail size: " << formatReadableSizeWithBinarySuffix(total_stat.avail_size)
<< ", used size: " << formatReadableSizeWithBinarySuffix(total_stat.used_size)
<< ", capacity size: " << formatReadableSizeWithBinarySuffix(total_stat.capacity_size));
total_stat.ok = 1;

CurrentMetrics::set(CurrentMetrics::StoreSizeCapacity, total_stat.capacity_size);
Expand Down Expand Up @@ -219,8 +224,8 @@ FsStats PathCapacityMetrics::CapacityInfo::getStats(Poco::Logger * log) const
avail = capacity - res.used_size;
else if (log)
LOG_WARNING(log,
"No available space for path: " << path << ", capacity: " << formatReadableSizeWithBinarySuffix(capacity) //
<< ", used: " << formatReadableSizeWithBinarySuffix(used_bytes));
"No available space for path: " << path << ", capacity: " << formatReadableSizeWithBinarySuffix(capacity) //
<< ", used: " << formatReadableSizeWithBinarySuffix(used_bytes));

const uint64_t disk_free_bytes = vfs.f_bavail * vfs.f_frsize;
if (avail > disk_free_bytes)
Expand Down
34 changes: 34 additions & 0 deletions dbms/src/Storages/tests/gtest_path_pool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,39 @@ try
}
}
CATCH

static void createIfNotExist(const String & path)
{
if (Poco::File file(path); !file.exists())
file.createDirectories();
}

TEST(PathCapcatity, FsStats)
try
{
std::string main_data_path = TiFlashTestEnv::getTemporaryPath() + "/main";
createIfNotExist(main_data_path);

std::string latest_data_path = TiFlashTestEnv::getTemporaryPath() + "/lastest";
createIfNotExist(latest_data_path);

size_t global_capacity_quota = 10;
size_t capacity = 100;
{
PathCapacityMetrics path_capacity(global_capacity_quota, {main_data_path}, {capacity}, {latest_data_path}, {capacity});

FsStats fs_stats = path_capacity.getFsStats();
EXPECT_EQ(fs_stats.capacity_size, 2 * capacity); // summing the capacity of main and latest path
}

{
PathCapacityMetrics path_capacity(global_capacity_quota, {main_data_path}, {}, {latest_data_path}, {});

FsStats fs_stats = path_capacity.getFsStats();
EXPECT_EQ(fs_stats.capacity_size, global_capacity_quota); // Use `global_capacity_quota` when `main_capacity_quota_` is empty
}
}
CATCH

} // namespace tests
} // namespace DB

0 comments on commit 5277bb2

Please sign in to comment.