public class AsynchronousBlockReader extends AsynchronousFileIOChannel<MemorySegment,org.apache.flink.runtime.io.disk.iomanager.ReadRequest> implements BlockChannelReader<MemorySegment>
MemorySegmentin an asynchronous fashion. That is, a read request is not processed by the thread that issues it, but by an asynchronous reader thread. Once the read request is done, the asynchronous reader adds the full MemorySegment to a return queue where it can be popped by the worker thread, once it needs the data. The return queue is in this case a
LinkedBlockingQueue, such that the working thread blocks until the request has been served, if the request is still pending when the it requires the data.
Typical pre-fetching reads are done by issuing the read requests early and popping the return queue once the data is actually needed.
The reader has no notion whether the size of the memory segments is actually the size of the blocks on disk, or even whether the file was written in blocks of the same size, or in blocks at all. Ensuring that the writing and reading is consistent with each other (same blocks sizes) is up to the programmer.
closed, closeLock, exception, requestQueue, requestsNotReturned, resultHandler
fileChannel, id, LOG
|Modifier||Constructor and Description|
Creates a new block channel reader for the given channel.
|Modifier and Type||Method and Description|
Gets the next memory segment that has been filled with data by the reader.
Gets the queue in which the full memory segments are queued after the asynchronous read is complete.
Issues a read request, which will asynchronously fill the given segment with the next block in the underlying file channel.
addRequest, checkErroneous, close, closeAndDelete, handleProcessedBuffer, isClosed, registerAllRequestsProcessedListener
deleteChannel, getChannelID, getNioFileChannel, getSize
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
close, closeAndDelete, deleteChannel, getChannelID, getNioFileChannel, getSize, isClosed
protected AsynchronousBlockReader(FileIOChannel.ID channelID, RequestQueue<org.apache.flink.runtime.io.disk.iomanager.ReadRequest> requestQueue, LinkedBlockingQueue<MemorySegment> returnSegments) throws IOException
channelID- The ID of the channel to read.
requestQueue- The request queue of the asynchronous reader thread, to which the I/O requests are added.
returnSegments- The return queue, to which the full Memory Segments are added.
IOException- Thrown, if the underlying file channel could not be opened.
public void readBlock(MemorySegment segment) throws IOException
segment- The segment to read the block into.
IOException- Thrown, when the reader encounters an I/O error. Due to the asynchronous nature of the reader, the exception thrown here may have been caused by an earlier read request.
public void seekToPosition(long position) throws IOException
public MemorySegment getNextReturnedBlock() throws IOException
WARNING: If this method is invoked without any segment ever returning (for example,
readBlock(MemorySegment) method has not been invoked appropriately), the
method may block forever.
IOException- Thrown, if an I/O error occurs in the reader while waiting for the request to return.
public LinkedBlockingQueue<MemorySegment> getReturnQueue()
Copyright © 2014–2022 The Apache Software Foundation. All rights reserved.