Class ProducerMergedPartitionFileReader
java.lang.Object
org.apache.flink.runtime.io.network.partition.hybrid.tiered.file.ProducerMergedPartitionFileReader
- All Implemented Interfaces:
PartitionFileReader
The implementation of
PartitionFileReader with producer-merge mode. In this mode, the
shuffle data is written in the producer side, the consumer side need to read multiple producers
to get its partition data.
Note that one partition file may contain the data of multiple subpartitions.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classThe implementation ofPartitionFileReader.ReadProgressmainly includes current reading offset, end of read offset, etc.Nested classes/interfaces inherited from interface org.apache.flink.runtime.io.network.partition.hybrid.tiered.file.PartitionFileReader
PartitionFileReader.ReadBufferResult, PartitionFileReader.ReadProgress -
Method Summary
Modifier and TypeMethodDescriptionlonggetPriority(TieredStoragePartitionId partitionId, TieredStorageSubpartitionId subpartitionId, int segmentId, int bufferIndex, PartitionFileReader.ReadProgress readProgress) Get the priority for reading a particular buffer from the partitioned file.readBuffer(TieredStoragePartitionId partitionId, TieredStorageSubpartitionId subpartitionId, int segmentId, int bufferIndex, org.apache.flink.core.memory.MemorySegment memorySegment, BufferRecycler recycler, PartitionFileReader.ReadProgress readProgress, CompositeBuffer partialBuffer) Read a buffer from the partition file.voidrelease()Release thePartitionFileReader.
-
Method Details
-
readBuffer
public PartitionFileReader.ReadBufferResult readBuffer(TieredStoragePartitionId partitionId, TieredStorageSubpartitionId subpartitionId, int segmentId, int bufferIndex, org.apache.flink.core.memory.MemorySegment memorySegment, BufferRecycler recycler, @Nullable PartitionFileReader.ReadProgress readProgress, @Nullable CompositeBuffer partialBuffer) throws IOException Description copied from interface:PartitionFileReaderRead a buffer from the partition file.- Specified by:
readBufferin interfacePartitionFileReader- Parameters:
partitionId- the partition id of the buffersubpartitionId- the subpartition id of the buffersegmentId- the segment id of the bufferbufferIndex- the index of buffermemorySegment- the empty buffer to store the read bufferrecycler- the buffer recyclerreadProgress- the current read progress. The progress comes from the previous ReadBufferResult. Note that the read progress should be implemented and provided by Flink, and it should be directly tied to the file format. The field can be null if the current file reader has no the read progresspartialBuffer- the previous partial buffer. The partial buffer is not null only when the last read has a partial buffer, it will construct a full buffer during the read process.- Returns:
- null if there is no data otherwise return a read buffer result.
- Throws:
IOException- if an error happens.
-
getPriority
public long getPriority(TieredStoragePartitionId partitionId, TieredStorageSubpartitionId subpartitionId, int segmentId, int bufferIndex, @Nullable PartitionFileReader.ReadProgress readProgress) throws IOException Description copied from interface:PartitionFileReaderGet the priority for reading a particular buffer from the partitioned file. The priority is defined as, it is suggested to read buffers with higher priority (smaller value) in prior to buffers with lower priority (larger value).Depending on the partition file implementation, following the suggestions should typically result in better performance and efficiency. This can be achieved by e.g. choosing preloaded data over others, optimizing the order of disk access to be more sequential, etc.
Note: Priorities are suggestions rather than a requirements. The caller can still read data in whichever order it wants.
- Specified by:
getPriorityin interfacePartitionFileReader- Parameters:
partitionId- the partition id of the buffersubpartitionId- the subpartition id of the buffersegmentId- the segment id of the bufferbufferIndex- the index of bufferreadProgress- the current read progress. The progress comes from the previous ReadBufferResult. Note that the read progress should be implemented and provided by Flink, and it should be directly tied to the file format. The field can be null if the current file reader has no the read progress- Returns:
- the priority of the
PartitionFileReader. - Throws:
IOException- if an error happens.
-
release
public void release()Description copied from interface:PartitionFileReaderRelease thePartitionFileReader.- Specified by:
releasein interfacePartitionFileReader
-