From 1715f58eb5164adbf77cdcac89a9c8327b81f3f7 Mon Sep 17 00:00:00 2001 From: Yukang-Lian Date: Wed, 31 Jan 2024 15:20:39 +0800 Subject: [PATCH] 3 --- be/src/http/action/http_stream.cpp | 6 ++++-- be/src/http/action/stream_load.cpp | 6 ++++-- be/src/olap/wal/wal_dirs_info.cpp | 16 ++++++++++++++++ be/src/olap/wal/wal_dirs_info.h | 2 ++ be/src/olap/wal/wal_manager.cpp | 4 ++++ be/src/olap/wal/wal_manager.h | 1 + 6 files changed, 31 insertions(+), 4 deletions(-) diff --git a/be/src/http/action/http_stream.cpp b/be/src/http/action/http_stream.cpp index 9930bc8bb609e4..f16d1fc7ea6ce7 100644 --- a/be/src/http/action/http_stream.cpp +++ b/be/src/http/action/http_stream.cpp @@ -407,8 +407,10 @@ Status HttpStreamAction::_handle_group_commit(HttpRequest* req, : req->header(HttpHeaders::CONTENT_LENGTH)) << " Bytes) exceeds the WAL (Write-Ahead Log) limit (" << max_available_size << " Bytes). "; - return Status::Error( - "There is no space for group commit async wal."); + std::stringstream ss; + ss << "There is no space for group commit async WAL. WAL dir info: " + << ExecEnv::GetInstance()->wal_mgr()->get_wal_dirs_info_string(); + return Status::Error(ss.str()); } } } diff --git a/be/src/http/action/stream_load.cpp b/be/src/http/action/stream_load.cpp index 4ad17fc0087c4a..104c784bb7339c 100644 --- a/be/src/http/action/stream_load.cpp +++ b/be/src/http/action/stream_load.cpp @@ -727,8 +727,10 @@ Status StreamLoadAction::_handle_group_commit(HttpRequest* req, : req->header(HttpHeaders::CONTENT_LENGTH)) << " Bytes) exceeds the WAL (Write-Ahead Log) limit (" << max_available_size << " Bytes). "; - return Status::Error( - "There is no space for group commit async wal."); + std::stringstream ss; + ss << "There is no space for group commit async WAL. WAL dir info: " + << ExecEnv::GetInstance()->wal_mgr()->get_wal_dirs_info_string(); + return Status::Error(ss.str()); } } } diff --git a/be/src/olap/wal/wal_dirs_info.cpp b/be/src/olap/wal/wal_dirs_info.cpp index e451146106c198..0800942d9b0002 100644 --- a/be/src/olap/wal/wal_dirs_info.cpp +++ b/be/src/olap/wal/wal_dirs_info.cpp @@ -17,6 +17,8 @@ #include "olap/wal/wal_dirs_info.h" +#include + #include "common/config.h" #include "common/status.h" #include "io/fs/local_file_system.h" @@ -105,6 +107,12 @@ void WalDirInfo::update_wal_dir_pre_allocated(size_t increase_pre_allocated, set_pre_allocated(increase_pre_allocated, decrease_pre_allocated); } +std::string WalDirInfo::get_wal_dir_info_string() { + return "[" + _wal_dir + ": limit " + std::to_string(_limit) + " Bytes, used " + + std::to_string(_used) + " Bytes, pre allocated " + std::to_string(_pre_allocated) + + " Bytes, available " + std::to_string(available()) + "Bytes.]\n"; +} + Status WalDirsInfo::add(const std::string& wal_dir, size_t limit, size_t used, size_t pre_allocated) { for (const auto& it : _wal_dirs_info_vec) { @@ -155,6 +163,14 @@ size_t WalDirsInfo::get_max_available_size() { ->available(); } +std::string WalDirsInfo::get_wal_dirs_info_string() { + std::string wal_dirs_info_string; + for (const auto& wal_dir_info : _wal_dirs_info_vec) { + wal_dirs_info_string += wal_dir_info->get_wal_dir_info_string(); + } + return wal_dirs_info_string; +} + Status WalDirsInfo::update_wal_dir_limit(const std::string& wal_dir, size_t limit) { for (const auto& wal_dir_info : _wal_dirs_info_vec) { LOG(INFO) << "wal_dir_info:" << wal_dir_info->get_wal_dir(); diff --git a/be/src/olap/wal/wal_dirs_info.h b/be/src/olap/wal/wal_dirs_info.h index 6eeb75cdb86273..cfd34733007799 100644 --- a/be/src/olap/wal/wal_dirs_info.h +++ b/be/src/olap/wal/wal_dirs_info.h @@ -49,6 +49,7 @@ class WalDirInfo { Status update_wal_dir_limit(size_t limit = -1); Status update_wal_dir_used(size_t used = -1); void update_wal_dir_pre_allocated(size_t increase_pre_allocated, size_t decrease_pre_allocated); + std::string get_wal_dir_info_string(); private: std::string _wal_dir; @@ -75,6 +76,7 @@ class WalDirsInfo { size_t decrease_pre_allocated); Status get_wal_dir_available_size(const std::string& wal_dir, size_t* available_bytes); Status get_wal_dir_info(const std::string& wal_dir, std::shared_ptr& wal_dir_info); + std::string get_wal_dirs_info_string(); private: std::vector> _wal_dirs_info_vec; diff --git a/be/src/olap/wal/wal_manager.cpp b/be/src/olap/wal/wal_manager.cpp index 45a9b58ff2dd3e..6d59c6df6864ef 100644 --- a/be/src/olap/wal/wal_manager.cpp +++ b/be/src/olap/wal/wal_manager.cpp @@ -381,6 +381,10 @@ size_t WalManager::get_max_available_size() { return _wal_dirs_info->get_max_available_size(); } +std::string WalManager::get_wal_dirs_info_string() { + return _wal_dirs_info->get_wal_dirs_info_string(); +} + Status WalManager::update_wal_dir_limit(const std::string& wal_dir, size_t limit) { return _wal_dirs_info->update_wal_dir_limit(wal_dir, limit); } diff --git a/be/src/olap/wal/wal_manager.h b/be/src/olap/wal/wal_manager.h index 44fdef2e6c0dcf..dfa2859cbe313e 100644 --- a/be/src/olap/wal/wal_manager.h +++ b/be/src/olap/wal/wal_manager.h @@ -61,6 +61,7 @@ class WalManager { size_t decrease_pre_allocated); Status get_wal_dir_available_size(const std::string& wal_dir, size_t* available_bytes); size_t get_max_available_size(); + std::string get_wal_dirs_info_string(); // replay wal Status create_wal_path(int64_t db_id, int64_t table_id, int64_t wal_id,