@@ -37,21 +37,33 @@ class RowIdConversion {
3737 ~RowIdConversion () { RELEASE_THREAD_MEM_TRACKER (_seg_rowid_map_mem_used); }
3838
3939 // resize segment rowid map to its rows num
40- void init_segment_map (const RowsetId& src_rowset_id, const std::vector<uint32_t >& num_rows) {
41- size_t delta_std_pair_cap = 0 ;
40+ Status init_segment_map (const RowsetId& src_rowset_id, const std::vector<uint32_t >& num_rows) {
4241 for (size_t i = 0 ; i < num_rows.size (); i++) {
42+ constexpr size_t RESERVED_MEMORY = 10 * 1024 * 1024 ; // 10M
43+ if (doris::GlobalMemoryArbitrator::is_exceed_hard_mem_limit (RESERVED_MEMORY)) {
44+ return Status::MemoryLimitExceeded (fmt::format (
45+ " RowIdConversion init_segment_map failed, memory exceed limit, {}, "
46+ " consuming "
47+ " tracker:<{}>, peak used {}, current used {}." ,
48+ doris::GlobalMemoryArbitrator::process_limit_exceeded_errmsg_str (),
49+ doris::thread_context ()->thread_mem_tracker ()->label (),
50+ doris::thread_context ()->thread_mem_tracker ()->peak_consumption (),
51+ doris::thread_context ()->thread_mem_tracker ()->consumption ()));
52+ }
53+
4354 uint32_t id = _segments_rowid_map.size ();
4455 _segment_to_id_map.emplace (std::pair<RowsetId, uint32_t > {src_rowset_id, i}, id);
4556 _id_to_segment_map.emplace_back (src_rowset_id, i);
4657 std::vector<std::pair<uint32_t , uint32_t >> vec (
4758 num_rows[i], std::pair<uint32_t , uint32_t >(UINT32_MAX, UINT32_MAX));
48- delta_std_pair_cap += vec.capacity ();
59+
60+ // NOTE: manually count _segments_rowid_map's memory here, because _segments_rowid_map could be used by indexCompaction.
61+ // indexCompaction is a thridparty code, it's too complex to modify it.
62+ // refer compact_column.
63+ track_mem_usage (vec.capacity ());
4964 _segments_rowid_map.emplace_back (std::move (vec));
5065 }
51- // NOTE: manually count _segments_rowid_map's memory here, because _segments_rowid_map could be used by indexCompaction.
52- // indexCompaction is a thridparty code, it's too complex to modify it.
53- // refer compact_column.
54- track_mem_usage (delta_std_pair_cap);
66+ return Status::OK ();
5567 }
5668
5769 // set dst rowset id
@@ -124,9 +136,7 @@ class RowIdConversion {
124136 size_t new_size =
125137 _std_pair_cap * sizeof (std::pair<uint32_t , uint32_t >) +
126138 _segments_rowid_map.capacity () * sizeof (std::vector<std::pair<uint32_t , uint32_t >>);
127-
128- RELEASE_THREAD_MEM_TRACKER (_seg_rowid_map_mem_used);
129- CONSUME_THREAD_MEM_TRACKER (new_size);
139+ CONSUME_THREAD_MEM_TRACKER (new_size - _seg_rowid_map_mem_used);
130140 _seg_rowid_map_mem_used = new_size;
131141 }
132142
0 commit comments