diff --git a/be/src/common/config.cpp b/be/src/common/config.cpp index 659324813a7d38..fa8e5e92722f44 100644 --- a/be/src/common/config.cpp +++ b/be/src/common/config.cpp @@ -1812,6 +1812,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/olap/rowset/segment_v2/segment.cpp b/be/src/olap/rowset/segment_v2/segment.cpp index 1f98eafd6fcf4c..c7be3456d13ea2 100644 --- a/be/src/olap/rowset/segment_v2/segment.cpp +++ b/be/src/olap/rowset/segment_v2/segment.cpp @@ -898,6 +898,10 @@ Status Segment::seek_and_read_by_rowid(const TabletSchema& schema, SlotDescripto 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()}, diff --git a/be/src/service/internal_service.cpp b/be/src/service/internal_service.cpp index 7156439c2ad448..acbaecddcbdda6 100644 --- a/be/src/service/internal_service.cpp +++ b/be/src/service/internal_service.cpp @@ -2191,9 +2191,13 @@ Status PInternalServiceImpl::_multi_get(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