MCPcopy Create free account
hub / github.com/ByConity/ByConity / CompactDataReader

Method CompactDataReader

src/Storages/MergeTree/MergeTreeReaderCompact.cpp:48–113  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

46}
47
48MergeTreeReaderCompact::CompactDataReader::CompactDataReader(
49 const MergeTreeData::DataPartPtr & data_part,
50 UncompressedCache * uncompressed_cache,
51 MarkCache * mark_cache,
52 const MergeTreeReaderSettings & settings,
53 const ColumnPositions & column_positions_,
54 const MarkRanges & all_mark_ranges,
55 const ReadBufferFromFileBase::ProfileCallback & profile_callback_,
56 clockid_t clock_type_)
57 : marks_loader(
58 data_part->volume->getDisk(),
59 mark_cache,
60 data_part->index_granularity_info.getMarksFilePath(data_part->getFullRelativePath() + MergeTreeDataPartCompact::DATA_FILE_NAME),
61 MergeTreeDataPartCompact::DATA_FILE_NAME,
62 data_part->getMarksCount(),
63 data_part->index_granularity_info,
64 settings.save_marks_in_cache,
65 data_part->getFileOffsetOrZero(data_part->index_granularity_info.getMarksFilePath(MergeTreeDataPartCompact::DATA_FILE_NAME)),
66 data_part->getFileSizeOrZero(data_part->index_granularity_info.getMarksFilePath(MergeTreeDataPartCompact::DATA_FILE_NAME)),
67 settings,
68 std::dynamic_pointer_cast<const MergeTreeDataPartCompact>(data_part)->getColumnsWithoutByteMapColSize())
69{
70 // Do not use max_read_buffer_size, but try to lower buffer size with maximal size of granule to avoid reading much data.
71 auto buffer_size = getReadBufferSize(data_part, marks_loader, column_positions_, all_mark_ranges);
72 ReadSettings data_read_settings = settings.read_settings;
73 if (!buffer_size)
74 data_read_settings.adjustBufferSize(buffer_size);
75 data_read_settings.estimated_size = 0;
76
77 const String full_data_path = data_part->getFullRelativePath() + MergeTreeDataPartCompact::DATA_FILE_NAME_WITH_EXTENSION;
78 if (uncompressed_cache)
79 {
80 auto buffer = std::make_unique<CachedCompressedReadBuffer>(
81 fullPath(data_part->volume->getDisk(), full_data_path),
82 [&, full_data_path, data_read_settings]() {
83 return data_part->volume->getDisk()->readFile(
84 full_data_path, data_read_settings);
85 },
86 uncompressed_cache,
87 /* allow_different_codecs = */ true);
88
89 if (profile_callback_)
90 buffer->setProfileCallback(profile_callback_, clock_type_);
91
92 if (!settings.checksum_on_read)
93 buffer->disableChecksumming();
94
95 cached_buffer = std::move(buffer);
96 data_buffer = cached_buffer.get();
97 }
98 else
99 {
100 auto buffer = std::make_unique<CompressedReadBufferFromFile>(
101 data_part->volume->getDisk()->readFile(full_data_path, data_read_settings),
102 /* allow_different_codecs = */ true);
103
104 if (profile_callback_)
105 buffer->setProfileCallback(profile_callback_, clock_type_);

Callers

nothing calls this directly

Calls 13

fullPathFunction · 0.85
getMarksFilePathMethod · 0.80
getFileOffsetOrZeroMethod · 0.80
getFileSizeOrZeroMethod · 0.80
adjustBufferSizeMethod · 0.80
getDiskMethod · 0.45
getFullRelativePathMethod · 0.45
getMarksCountMethod · 0.45
readFileMethod · 0.45
setProfileCallbackMethod · 0.45
disableChecksummingMethod · 0.45

Tested by

no test coverage detected