From 3bc26f773de5c8e1a024f76c28e73b080aa6aef1 Mon Sep 17 00:00:00 2001 From: Xinyi Zou Date: Sun, 13 Nov 2022 17:15:29 +0800 Subject: [PATCH] [hotfix](memtracker) Fix expired `DCHECK(_limit != -1);` and segment_meta_mem_tracker inelegant end (#14223) --- be/src/olap/rowset/segment_v2/segment.cpp | 9 ++++++--- be/src/olap/storage_engine.cpp | 3 ++- be/src/olap/storage_engine.h | 4 ++-- be/src/runtime/memory/mem_tracker_limiter.cpp | 1 - 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/be/src/olap/rowset/segment_v2/segment.cpp b/be/src/olap/rowset/segment_v2/segment.cpp index baec276993..1cf38339c8 100644 --- a/be/src/olap/rowset/segment_v2/segment.cpp +++ b/be/src/olap/rowset/segment_v2/segment.cpp @@ -79,7 +79,8 @@ Segment::Segment(uint32_t segment_id, RowsetId rowset_id, TabletSchemaSPtr table Segment::~Segment() { #ifndef BE_TEST - StorageEngine::instance()->segment_meta_mem_tracker()->release(_meta_mem_usage); + if (StorageEngine::instance()) + StorageEngine::instance()->segment_meta_mem_tracker()->release(_meta_mem_usage); #endif } @@ -149,7 +150,8 @@ Status Segment::_parse_footer() { _file_reader->path().native(), file_size, 12 + footer_length); } _meta_mem_usage += footer_length; - StorageEngine::instance()->segment_meta_mem_tracker()->consume(footer_length); + if (StorageEngine::instance()) + StorageEngine::instance()->segment_meta_mem_tracker()->consume(footer_length); std::string footer_buf; footer_buf.resize(footer_length); @@ -214,7 +216,8 @@ Status Segment::load_index() { DCHECK(footer.has_short_key_page_footer()); _meta_mem_usage += body.get_size(); - StorageEngine::instance()->segment_meta_mem_tracker()->consume(body.get_size()); + if (StorageEngine::instance()) + StorageEngine::instance()->segment_meta_mem_tracker()->consume(body.get_size()); _sk_index_decoder.reset(new ShortKeyIndexDecoder); return _sk_index_decoder->parse(body, footer.short_key_page_footer()); } diff --git a/be/src/olap/storage_engine.cpp b/be/src/olap/storage_engine.cpp index bd1095a1db..01a44f2ad4 100644 --- a/be/src/olap/storage_engine.cpp +++ b/be/src/olap/storage_engine.cpp @@ -108,7 +108,7 @@ StorageEngine::StorageEngine(const EngineOptions& options) _is_all_cluster_id_exist(true), _mem_tracker(std::make_shared("StorageEngine")), _segcompaction_mem_tracker(std::make_shared("SegCompaction")), - _segment_meta_mem_tracker(std::make_unique("SegmentMeta")), + _segment_meta_mem_tracker(std::make_shared("SegmentMeta")), _stop_background_threads_latch(1), _tablet_manager(new TabletManager(config::tablet_map_shard_size)), _txn_manager(new TxnManager(config::txn_map_shard_size, config::txn_shard_size)), @@ -146,6 +146,7 @@ StorageEngine::~StorageEngine() { if (_tablet_meta_checkpoint_thread_pool) { _tablet_meta_checkpoint_thread_pool->shutdown(); } + _s_instance = nullptr; } void StorageEngine::load_data_dirs(const std::vector& data_dirs) { diff --git a/be/src/olap/storage_engine.h b/be/src/olap/storage_engine.h index 20069b6b40..6de80ead25 100644 --- a/be/src/olap/storage_engine.h +++ b/be/src/olap/storage_engine.h @@ -179,7 +179,7 @@ public: Status get_compaction_status_json(std::string* result); - MemTracker* segment_meta_mem_tracker() { return _segment_meta_mem_tracker.get(); } + std::shared_ptr segment_meta_mem_tracker() { return _segment_meta_mem_tracker; } std::shared_ptr segcompaction_mem_tracker() { return _segcompaction_mem_tracker; } // check cumulative compaction config @@ -329,7 +329,7 @@ private: std::shared_ptr _segcompaction_mem_tracker; // This mem tracker is only for tracking memory use by segment meta data such as footer or index page. // The memory consumed by querying is tracked in segment iterator. - std::unique_ptr _segment_meta_mem_tracker; + std::shared_ptr _segment_meta_mem_tracker; CountDownLatch _stop_background_threads_latch; scoped_refptr _unused_rowset_monitor_thread; diff --git a/be/src/runtime/memory/mem_tracker_limiter.cpp b/be/src/runtime/memory/mem_tracker_limiter.cpp index e2ec8bf028..40afce874e 100644 --- a/be/src/runtime/memory/mem_tracker_limiter.cpp +++ b/be/src/runtime/memory/mem_tracker_limiter.cpp @@ -207,7 +207,6 @@ void MemTrackerLimiter::print_log_process_usage(const std::string& msg) { std::string MemTrackerLimiter::mem_limit_exceeded(const std::string& msg, const std::string& limit_exceeded_errmsg) { - DCHECK(_limit != -1); STOP_CHECK_THREAD_MEM_TRACKER_LIMIT(); std::string detail = fmt::format( "Memory limit exceeded:, {}>, executing msg:<{}>. backend {} "