This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 99be9d6ad33 [fix](memlimiter) refresh memtracker before flush active
memtables (#28196)
99be9d6ad33 is described below
commit 99be9d6ad33e8602deaecec676307d976b0cfb34
Author: Kaijie Chen <[email protected]>
AuthorDate: Sat Dec 9 01:40:51 2023 +0800
[fix](memlimiter) refresh memtracker before flush active memtables (#28196)
Currently, _flush_active_memtables() is using stale memtracker data,
especially when some other thread has just it.
Refresh memtrackers before flush to avoid this problem.
---
be/src/olap/memtable_memory_limiter.cpp | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/be/src/olap/memtable_memory_limiter.cpp
b/be/src/olap/memtable_memory_limiter.cpp
index 1dc7aa7eac7..bceb33419a1 100644
--- a/be/src/olap/memtable_memory_limiter.cpp
+++ b/be/src/olap/memtable_memory_limiter.cpp
@@ -141,7 +141,12 @@ void MemTableMemoryLimiter::handle_memtable_flush() {
}
void MemTableMemoryLimiter::_flush_active_memtables(int64_t need_flush) {
- if (need_flush <= 0 || _active_writers.size() == 0) {
+ if (need_flush <= 0) {
+ return;
+ }
+
+ _refresh_mem_tracker();
+ if (_active_writers.size() == 0) {
return;
}
int64_t mem_flushed = 0;
@@ -202,9 +207,6 @@ void MemTableMemoryLimiter::refresh_mem_tracker() {
<< ", write: " <<
PrettyPrinter::print_bytes(_write_mem_usage)
<< ", flush: " <<
PrettyPrinter::print_bytes(_flush_mem_usage) << ")";
}
- if (!_hard_limit_reached()) {
- _hard_limit_end_cond.notify_all();
- }
}
void MemTableMemoryLimiter::_refresh_mem_tracker() {
@@ -234,6 +236,9 @@ void MemTableMemoryLimiter::_refresh_mem_tracker() {
g_memtable_load_memory.set_value(_mem_usage);
VLOG_DEBUG << "refreshed mem_tracker, num writers: " << _writers.size();
THREAD_MEM_TRACKER_TRANSFER_TO(_mem_usage - _mem_tracker->consumption(),
_mem_tracker.get());
+ if (!_hard_limit_reached()) {
+ _hard_limit_end_cond.notify_all();
+ }
}
} // namespace doris
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]