Package org.apache.druid.frame.channel
Class ReadableConcatFrameChannel
- java.lang.Object
-
- org.apache.druid.frame.channel.ReadableConcatFrameChannel
-
- All Implemented Interfaces:
Closeable
,AutoCloseable
,ReadableFrameChannel
public class ReadableConcatFrameChannel extends Object implements ReadableFrameChannel
Channel that concatenates a sequence of other channels that are provided by an iterator. The iterator is walked just-in-time, meaning thatIterator.next()
is not called until the channel is actually ready to be used. The first channel is pulled from the iterator immediately upon construction.
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
canRead()
Returns whether this channel has a frame or error condition currently available.void
close()
Releases any resources associated with this readable channel.boolean
isFinished()
Returns whether this channel is finished.static ReadableConcatFrameChannel
open(Iterator<ReadableFrameChannel> channelIterator)
Creates a new concatenated channel.Frame
read()
Returns the next available frame from this channel.com.google.common.util.concurrent.ListenableFuture<?>
readabilityFuture()
Returns a future that will resolve when eitherReadableFrameChannel.isFinished()
orReadableFrameChannel.canRead()
would return true.
-
-
-
Method Detail
-
open
public static ReadableConcatFrameChannel open(Iterator<ReadableFrameChannel> channelIterator)
Creates a new concatenated channel. The first channel is pulled from the provided iterator immediately. Other channels are pulled on-demand, when they are ready to be used.
-
isFinished
public boolean isFinished()
Description copied from interface:ReadableFrameChannel
Returns whether this channel is finished. Finished channels will not generate any further frames or errors. Generally, once you discover that a channel is finished, you should callReadableFrameChannel.close()
and then discard it. Note that it is possible for a channel to be unfinished and also have no available frames or errors. This happens when it is not in a ready-for-reading state. SeeReadableFrameChannel.readabilityFuture()
for details.- Specified by:
isFinished
in interfaceReadableFrameChannel
-
canRead
public boolean canRead()
Description copied from interface:ReadableFrameChannel
Returns whether this channel has a frame or error condition currently available. If this method returns true, then you can callReadableFrameChannel.read()
to retrieve the frame or error. Note that it is possible for a channel to be unfinished and also have no available frames or errors. This happens when it is not in a ready-for-reading state. SeeReadableFrameChannel.readabilityFuture()
for details.- Specified by:
canRead
in interfaceReadableFrameChannel
-
read
public Frame read()
Description copied from interface:ReadableFrameChannel
Returns the next available frame from this channel. Before calling this method, you should checkReadableFrameChannel.canRead()
to ensure there is a frame or error available.- Specified by:
read
in interfaceReadableFrameChannel
-
readabilityFuture
public com.google.common.util.concurrent.ListenableFuture<?> readabilityFuture()
Description copied from interface:ReadableFrameChannel
Returns a future that will resolve when eitherReadableFrameChannel.isFinished()
orReadableFrameChannel.canRead()
would return true. The future will never resolve to an exception. If something exceptional has happened, the exception can be retrieved fromReadableFrameChannel.read()
.- Specified by:
readabilityFuture
in interfaceReadableFrameChannel
-
close
public void close()
Description copied from interface:ReadableFrameChannel
Releases any resources associated with this readable channel. After calling this, you should not call any other methods on the channel.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceReadableFrameChannel
-
-