Skip to content

Commit 8091a1b

Browse files
authored
Merge branch 'master' into restore_binlog
2 parents 234e36c + 9c4c0b3 commit 8091a1b

File tree

58 files changed

+3411
-492
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+3411
-492
lines changed

be/src/cloud/cloud_tablet.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ Status CloudTablet::sync_if_not_running() {
220220
}
221221

222222
TabletSchemaSPtr CloudTablet::merged_tablet_schema() const {
223+
std::shared_lock rlock(_meta_lock);
223224
return _merged_tablet_schema;
224225
}
225226

be/src/io/cache/block_file_cache.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,15 +1093,16 @@ bool BlockFileCache::remove_if_ttl_file_unlock(const UInt128Wrapper& file_key, b
10931093
_key_to_time.find(file_key) != _key_to_time.end()) {
10941094
if (!remove_directly) {
10951095
for (auto& [_, cell] : _files[file_key]) {
1096-
if (cell.file_block->cache_type() == FileCacheType::TTL) {
1097-
Status st = cell.file_block->update_expiration_time(0);
1098-
if (!st.ok()) {
1099-
LOG_WARNING("Failed to update expiration time to 0").error(st);
1100-
}
1096+
if (cell.file_block->cache_type() != FileCacheType::TTL) {
1097+
continue;
1098+
}
1099+
Status st = cell.file_block->update_expiration_time(0);
1100+
if (!st.ok()) {
1101+
LOG_WARNING("Failed to update expiration time to 0").error(st);
11011102
}
11021103

11031104
if (cell.file_block->cache_type() == FileCacheType::NORMAL) continue;
1104-
auto st = cell.file_block->change_cache_type_between_ttl_and_others(
1105+
st = cell.file_block->change_cache_type_between_ttl_and_others(
11051106
FileCacheType::NORMAL);
11061107
if (st.ok()) {
11071108
if (cell.queue_iterator) {

be/src/olap/base_tablet.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,10 @@ class BaseTablet {
279279
int64_t limit);
280280

281281
// Return the merged schema of all rowsets
282-
virtual TabletSchemaSPtr merged_tablet_schema() const { return _max_version_schema; }
282+
virtual TabletSchemaSPtr merged_tablet_schema() const {
283+
std::shared_lock rlock(_meta_lock);
284+
return _max_version_schema;
285+
}
283286

284287
void traverse_rowsets(std::function<void(const RowsetSharedPtr&)> visitor,
285288
bool include_stale = false) {

be/src/olap/rowid_conversion.h

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

be/src/olap/rowset/beta_rowset_reader.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,8 @@ Status BetaRowsetReader::get_segment_iterators(RowsetReaderContext* read_context
239239
// init segment rowid map for rowid conversion
240240
std::vector<uint32_t> segment_num_rows;
241241
RETURN_IF_ERROR(get_segment_num_rows(&segment_num_rows));
242-
_read_context->rowid_conversion->init_segment_map(rowset()->rowset_id(), segment_num_rows);
242+
RETURN_IF_ERROR(_read_context->rowid_conversion->init_segment_map(rowset()->rowset_id(),
243+
segment_num_rows));
243244
}
244245

245246
auto [seg_start, seg_end] = _segment_offsets;

be/src/olap/rowset/segment_v2/segment_iterator.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2175,11 +2175,11 @@ Status SegmentIterator::_next_batch_internal(vectorized::Block* block) {
21752175
if (block->rows() == 0) {
21762176
vectorized::MutableColumnPtr col0 =
21772177
std::move(*block->get_by_position(0).column).mutate();
2178-
auto res_column = vectorized::ColumnString::create();
2179-
res_column->insert_data("", 0);
2180-
auto col_const = vectorized::ColumnConst::create(std::move(res_column),
2181-
selected_size);
2182-
block->replace_by_position(0, std::move(col_const));
2178+
auto tmp_indicator_col =
2179+
block->get_by_position(0)
2180+
.type->create_column_const_with_default_value(
2181+
selected_size);
2182+
block->replace_by_position(0, std::move(tmp_indicator_col));
21832183
_output_index_result_column_for_expr(_sel_rowid_idx.data(), selected_size,
21842184
block);
21852185
block->shrink_char_type_column_suffix_zero(_char_type_idx_no_0);

0 commit comments

Comments
 (0)