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]

Reply via email to