@NotThreadSafe public class SortMergeResultPartition extends ResultPartition
SortMergeResultPartition appends records and events to DataBuffer and after the
DataBuffer is full, all data in the DataBuffer will be copied and spilled to a
PartitionedFile in subpartition index order sequentially. Large records that can not be
appended to an empty DataBuffer will be spilled to the result PartitionedFile
separately.AvailabilityProvider.AvailabilityHelperbufferCompressor, bufferPool, LOG, numBuffersOut, numBytesOut, numBytesProduced, numSubpartitions, partitionId, partitionManager, partitionTypeAVAILABLE| Constructor and Description |
|---|
SortMergeResultPartition(String owningTaskName,
int partitionIndex,
ResultPartitionID partitionId,
ResultPartitionType partitionType,
int numSubpartitions,
int numTargetKeyGroups,
BatchShuffleReadBufferPool readBufferPool,
Executor readIOExecutor,
ResultPartitionManager partitionManager,
String resultFileBasePath,
BufferCompressor bufferCompressor,
org.apache.flink.util.function.SupplierWithException<BufferPool,IOException> bufferPoolFactory) |
| Modifier and Type | Method and Description |
|---|---|
void |
broadcastEvent(AbstractEvent event,
boolean isPriorityEvent)
Writes the given
AbstractEvent to all channels. |
void |
broadcastRecord(ByteBuffer record)
Writes the given serialized record to all subpartitions.
|
void |
close()
Closes the partition writer which releases the allocated resource, for example the buffer
pool.
|
ResultSubpartitionView |
createSubpartitionView(int subpartitionIndex,
BufferAvailabilityListener availabilityListener)
Returns a reader for the subpartition with the given index.
|
void |
emitRecord(ByteBuffer record,
int targetSubpartition)
Writes the given serialized record to the target subpartition.
|
void |
finish()
Finishes the result partition.
|
void |
flush(int subpartitionIndex)
Manually trigger the consumption of data from the given subpartitions.
|
void |
flushAll()
Manually trigger the consumption of data from all subpartitions.
|
CompletableFuture<?> |
getAvailableFuture() |
int |
getNumberOfQueuedBuffers()
Returns the total number of queued buffers of all subpartitions.
|
int |
getNumberOfQueuedBuffers(int targetSubpartition)
Returns the number of queued buffers of the given target subpartition.
|
long |
getSizeOfQueuedBuffersUnsafe()
Returns the total size in bytes of queued buffers of all subpartitions.
|
void |
notifyEndOfData(StopMode mode)
Notifies the downstream tasks that this
ResultPartitionWriter have emitted all the
user records. |
protected void |
releaseInternal()
Releases all produced data including both those stored in memory and persisted on disk.
|
void |
setup()
Registers a buffer pool with this result partition.
|
canBeCompressed, checkInProduceState, fail, getAllDataProcessedFuture, getBufferPool, getFailureCause, getNumberOfSubpartitions, getNumTargetKeyGroups, getOwningTaskName, getPartitionId, getPartitionIndex, getPartitionManager, getPartitionType, isFinished, isReleased, onSubpartitionAllDataProcessed, release, release, setMetricGroup, toStringclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitand, isApproximatelyAvailable, isAvailable, orpublic SortMergeResultPartition(String owningTaskName, int partitionIndex, ResultPartitionID partitionId, ResultPartitionType partitionType, int numSubpartitions, int numTargetKeyGroups, BatchShuffleReadBufferPool readBufferPool, Executor readIOExecutor, ResultPartitionManager partitionManager, String resultFileBasePath, @Nullable BufferCompressor bufferCompressor, org.apache.flink.util.function.SupplierWithException<BufferPool,IOException> bufferPoolFactory)
public void setup()
throws IOException
ResultPartitionThere is one pool for each result partition, which is shared by all its sub partitions.
The pool is registered with the partition *after* it as been constructed in order to
conform to the life-cycle of task registrations in the TaskExecutor.
setup in interface ResultPartitionWritersetup in class ResultPartitionIOExceptionprotected void releaseInternal()
ResultPartitionreleaseInternal in class ResultPartitionpublic void emitRecord(ByteBuffer record, int targetSubpartition) throws IOException
ResultPartitionWriterIOExceptionpublic void broadcastRecord(ByteBuffer record) throws IOException
ResultPartitionWriterIOExceptionpublic void broadcastEvent(AbstractEvent event, boolean isPriorityEvent) throws IOException
ResultPartitionWriterAbstractEvent to all channels.IOExceptionpublic void notifyEndOfData(StopMode mode) throws IOException
ResultPartitionWriterResultPartitionWriter have emitted all the
user records.notifyEndOfData in interface ResultPartitionWriternotifyEndOfData in class ResultPartitionmode - tells if we should flush all records or not (it is false in case of
stop-with-savepoint (--no-drain))IOExceptionpublic void finish()
throws IOException
ResultPartitionAfter this operation, it is not possible to add further data to the result partition.
For BLOCKING results, this will trigger the deployment of consuming tasks.
finish in interface ResultPartitionWriterfinish in class ResultPartitionIOExceptionpublic void close()
ResultPartitionWriterclose in interface AutoCloseableclose in interface ResultPartitionWriterclose in class ResultPartitionpublic ResultSubpartitionView createSubpartitionView(int subpartitionIndex, BufferAvailabilityListener availabilityListener) throws IOException
ResultPartitionWriterIOExceptionpublic void flushAll()
ResultPartitionWriterpublic void flush(int subpartitionIndex)
ResultPartitionWriterpublic CompletableFuture<?> getAvailableFuture()
getAvailableFuture in interface AvailabilityProvidergetAvailableFuture in class ResultPartitionpublic int getNumberOfQueuedBuffers()
ResultPartitiongetNumberOfQueuedBuffers in class ResultPartitionpublic long getSizeOfQueuedBuffersUnsafe()
ResultPartitiongetSizeOfQueuedBuffersUnsafe in class ResultPartitionpublic int getNumberOfQueuedBuffers(int targetSubpartition)
ResultPartitiongetNumberOfQueuedBuffers in class ResultPartitionCopyright © 2014–2022 The Apache Software Foundation. All rights reserved.