diff --git a/be/src/common/config.cpp b/be/src/common/config.cpp index 52a7b420c55cf9..c1bd15a0cb3f4f 100644 --- a/be/src/common/config.cpp +++ b/be/src/common/config.cpp @@ -1975,6 +1975,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 b26ad63d71b34b..d6c47201dadf0a 100644 --- a/be/src/exec/rowid_fetcher.cpp +++ b/be/src/exec/rowid_fetcher.cpp @@ -442,9 +442,13 @@ Status RowIdStorageReader::read_by_rowids(const PMultiGetRequest& request, iterator_map[iterator_key].segment = segment; } segment = iterator_item.segment; - RETURN_IF_ERROR(segment->seek_and_read_by_rowid(full_read_schema, desc.slots()[x], - row_id, column, stats, - iterator_item.iterator)); + try { + RETURN_IF_ERROR(segment->seek_and_read_by_rowid(full_read_schema, desc.slots()[x], + row_id, column, stats, + iterator_item.iterator)); + } catch (const Exception& e) { + return Status::Error(e.code(), "Row id fetch failed because {}", e.what()); + } } } // serialize block if not empty diff --git a/be/src/olap/rowset/segment_v2/segment.cpp b/be/src/olap/rowset/segment_v2/segment.cpp index 70bfad778b5116..afdd9eaebf031c 100644 --- a/be/src/olap/rowset/segment_v2/segment.cpp +++ b/be/src/olap/rowset/segment_v2/segment.cpp @@ -948,6 +948,10 @@ Status Segment::seek_and_read_by_rowid(const TabletSchema& schema, SlotDescripto TabletColumn column = TabletColumn::create_materialized_variant_column( schema.column_by_uid(slot->col_unique_id()).name_lower_case(), slot->column_paths(), slot->col_unique_id(), slot->type().max_subcolumns_count()); + // 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(column, false); vectorized::MutableColumnPtr file_storage_column = storage_type->create_column(); DCHECK(storage_type != nullptr);