diff --git a/be/src/common/config.cpp b/be/src/common/config.cpp index 2badc8ca97f4b5..2b2b8cdf4aad73 100644 --- a/be/src/common/config.cpp +++ b/be/src/common/config.cpp @@ -1960,6 +1960,8 @@ Status set_fuzzy_configs() { // if have set enable_fuzzy_mode=true in be.conf, will fuzzy those field and values fuzzy_field_and_value["disable_storage_page_cache"] = ((distribution(*generator) % 2) == 0) ? "true" : "false"; + fuzzy_field_and_value["disable_segment_cache"] = + ((distribution(*generator) % 2) == 0) ? "true" : "false"; fuzzy_field_and_value["enable_system_metrics"] = ((distribution(*generator) % 2) == 0) ? "true" : "false"; fuzzy_field_and_value["enable_set_in_bitmap_value"] = diff --git a/be/src/exec/rowid_fetcher.cpp b/be/src/exec/rowid_fetcher.cpp index bcad6ea4d9863a..b8f00e4d16cef0 100644 --- a/be/src/exec/rowid_fetcher.cpp +++ b/be/src/exec/rowid_fetcher.cpp @@ -534,15 +534,21 @@ Status RowIdStorageReader::read_by_rowids(const PMultiGetRequestV2& request, } } - if (first_file_mapping->type == FileMappingType::INTERNAL) { - RETURN_IF_ERROR(read_batch_doris_format_row( - request_block_desc, id_file_map, slots, tquery_id, result_blocks[i], - stats, &acquire_tablet_ms, &acquire_rowsets_ms, &acquire_segments_ms, - &lookup_row_data_ms)); - } else { - RETURN_IF_ERROR(read_batch_external_row( - request_block_desc, id_file_map, slots, first_file_mapping, tquery_id, - result_blocks[i], &external_init_reader_ms, &external_get_block_ms)); + try { + if (first_file_mapping->type == FileMappingType::INTERNAL) { + RETURN_IF_ERROR(read_batch_doris_format_row( + request_block_desc, id_file_map, slots, tquery_id, result_blocks[i], + stats, &acquire_tablet_ms, &acquire_rowsets_ms, + &acquire_segments_ms, &lookup_row_data_ms)); + } else { + RETURN_IF_ERROR(read_batch_external_row( + request_block_desc, id_file_map, slots, first_file_mapping, + tquery_id, result_blocks[i], &external_init_reader_ms, + &external_get_block_ms)); + } + } catch (const Exception& e) { + return Status::Error(e.code(), "Row id fetch failed because {}", + e.what()); } // after read the block, shrink char type block diff --git a/be/src/olap/rowset/segment_v2/segment.cpp b/be/src/olap/rowset/segment_v2/segment.cpp index e5994cb66d62e5..a007a2b302fa71 100644 --- a/be/src/olap/rowset/segment_v2/segment.cpp +++ b/be/src/olap/rowset/segment_v2/segment.cpp @@ -1142,11 +1142,16 @@ Status Segment::seek_and_read_by_rowid(const TabletSchema& schema, SlotDescripto .io_ctx = io::IOContext {.reader_type = ReaderType::READER_QUERY, .file_cache_stats = &stats.file_cache_stats}, }; + std::vector single_row_loc {row_id}; if (!slot->column_paths().empty()) { vectorized::PathInDataPtr path = std::make_shared( schema.column_by_uid(slot->col_unique_id()).name_lower_case(), slot->column_paths()); + + // here need create column readers to make sure column reader is created before seek_and_read_by_rowid + // if segment cache miss, column reader will be created to make sure the variant column result not coredump + RETURN_IF_ERROR(_create_column_readers_once(&stats)); auto storage_type = get_data_type_of(ColumnIdentifier {.unique_id = slot->col_unique_id(), .path = path, .is_nullable = slot->is_nullable()},