Package io.grpc.internal
Class AbstractClientStream
java.lang.Object
io.grpc.internal.AbstractStream
io.grpc.internal.AbstractClientStream
- All Implemented Interfaces:
ClientStream
,MessageFramer.Sink
,Stream
public abstract class AbstractClientStream
extends AbstractStream
implements ClientStream, MessageFramer.Sink
The abstract base class for
ClientStream
implementations. Extending classes only need to
implement transportState()
and abstractClientStreamSink()
. Must only be called
from the sending application thread.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static interface
A sink for outbound operations, separated from the stream simply to avoid name collisions/confusion.protected static class
This should only be called from the transport thread. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
AbstractClientStream
(WritableBufferAllocator bufferAllocator, StatsTraceContext statsTraceCtx, TransportTracer transportTracer, Metadata headers, CallOptions callOptions, boolean useGet) -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract AbstractClientStream.Sink
Sink for transport to be called to perform outbound operations.final void
appendTimeoutInsight
(InsightBuilder insight) Append information that will be included in the locally generated DEADLINE_EXCEEDED errors to the givenInsightBuilder
, in order to tell the user about the state of the stream so that they can better diagnose the cause of the error.final void
Abnormally terminates the stream.final void
deliverFrame
(WritableBuffer frame, boolean endOfStream, boolean flush, int numMessages) Delivers a frame via the transport.protected final Framer
framer()
The framer to use for sending messages.protected TransportTracer
final void
Closes the local side of this stream and flushes any remaining messages.final boolean
isReady()
Iftrue
, indicates that the transport is capable of sending additional messages without requiring excessive buffering internally.void
setDeadline
(Deadline deadline) Sets the effective deadline of the RPC.final void
setDecompressorRegistry
(DecompressorRegistry decompressorRegistry) Sets the registry to find a decompressor for the framer.final void
setFullStreamDecompression
(boolean fullStreamDecompression) Enables full-stream decompression, allowing the client stream to useGzipInflatingBuffer
to decode inbound GZIP compressed streams.void
setMaxInboundMessageSize
(int maxSize) Sets the max size accepted from the remote endpoint.void
setMaxOutboundMessageSize
(int maxSize) Sets the max size sent to the remote endpoint.final boolean
Returns true if this stream should be counted when determining the in-use state of the transport.final void
start
(ClientStreamListener listener) Starts stream.protected abstract AbstractClientStream.TransportState
Obtain the transport state corresponding to this stream.Methods inherited from class io.grpc.internal.AbstractStream
endOfMessages, flush, onSendingBytes, optimizeForDirectExecutor, request, setCompressor, setMessageCompression, setOnReadyThreshold, writeMessage
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface io.grpc.internal.ClientStream
getAttributes, setAuthority
Methods inherited from interface io.grpc.internal.Stream
flush, optimizeForDirectExecutor, request, setCompressor, setMessageCompression, writeMessage
-
Constructor Details
-
AbstractClientStream
protected AbstractClientStream(WritableBufferAllocator bufferAllocator, StatsTraceContext statsTraceCtx, TransportTracer transportTracer, Metadata headers, CallOptions callOptions, boolean useGet)
-
-
Method Details
-
setDeadline
Description copied from interface:ClientStream
Sets the effective deadline of the RPC.- Specified by:
setDeadline
in interfaceClientStream
-
setMaxOutboundMessageSize
public void setMaxOutboundMessageSize(int maxSize) Description copied from interface:ClientStream
Sets the max size sent to the remote endpoint.- Specified by:
setMaxOutboundMessageSize
in interfaceClientStream
-
setMaxInboundMessageSize
public void setMaxInboundMessageSize(int maxSize) Description copied from interface:ClientStream
Sets the max size accepted from the remote endpoint.- Specified by:
setMaxInboundMessageSize
in interfaceClientStream
-
setFullStreamDecompression
public final void setFullStreamDecompression(boolean fullStreamDecompression) Description copied from interface:ClientStream
Enables full-stream decompression, allowing the client stream to useGzipInflatingBuffer
to decode inbound GZIP compressed streams.- Specified by:
setFullStreamDecompression
in interfaceClientStream
-
setDecompressorRegistry
Description copied from interface:ClientStream
Sets the registry to find a decompressor for the framer. May only be called beforeClientStream.start(io.grpc.internal.ClientStreamListener)
. If the transport does not support compression, this may do nothing.- Specified by:
setDecompressorRegistry
in interfaceClientStream
- Parameters:
decompressorRegistry
- the registry of decompressors for decoding responses
-
transportState
Obtain the transport state corresponding to this stream. Each stream must have its own unique transport state.- Specified by:
transportState
in classAbstractStream
-
start
Description copied from interface:ClientStream
Starts stream. This method may only be called once. It is safe to do latent initialization of the stream up untilClientStream.start(io.grpc.internal.ClientStreamListener)
is called.This method should not throw any exceptions.
- Specified by:
start
in interfaceClientStream
- Parameters:
listener
- non-null
listener of stream events
-
abstractClientStreamSink
Sink for transport to be called to perform outbound operations. Each stream must have its own unique sink. -
framer
Description copied from class:AbstractStream
The framer to use for sending messages.- Specified by:
framer
in classAbstractStream
-
shouldBeCountedForInUse
public final boolean shouldBeCountedForInUse()Returns true if this stream should be counted when determining the in-use state of the transport. -
deliverFrame
public final void deliverFrame(WritableBuffer frame, boolean endOfStream, boolean flush, int numMessages) Description copied from interface:MessageFramer.Sink
Delivers a frame via the transport.- Specified by:
deliverFrame
in interfaceMessageFramer.Sink
- Parameters:
frame
- a non-empty buffer to deliver ornull
if the framer is being closed and there is no data to deliver.endOfStream
- whether the frame is the last one for the GRPC streamflush
-true
if more data may not be arriving soonnumMessages
- the number of messages that this series of frames represents
-
halfClose
public final void halfClose()Description copied from interface:ClientStream
Closes the local side of this stream and flushes any remaining messages. After this is called, no further messages may be sent on this stream, but additional messages may be received until the remote end-point is closed. This method may only be called once, and only afterClientStream.start(io.grpc.internal.ClientStreamListener)
.- Specified by:
halfClose
in interfaceClientStream
-
cancel
Description copied from interface:ClientStream
Abnormally terminates the stream. After calling this method, no further messages will be sent or received, however it may still be possible to receive buffered messages for a brief period untilClientStreamListener.closed(io.grpc.Status, io.grpc.internal.ClientStreamListener.RpcProgress, io.grpc.Metadata)
is called. This method may only be called afterClientStream.start(io.grpc.internal.ClientStreamListener)
, but else is safe to be called at any time and multiple times and from any thread.- Specified by:
cancel
in interfaceClientStream
- Parameters:
reason
- must be non-OK
-
isReady
public final boolean isReady()Description copied from interface:Stream
Iftrue
, indicates that the transport is capable of sending additional messages without requiring excessive buffering internally. Otherwise,StreamListener.onReady()
will be called when it turnstrue
.This is just a suggestion and the application is free to ignore it, however doing so may result in excessive buffering within the transport.
- Specified by:
isReady
in interfaceStream
- Overrides:
isReady
in classAbstractStream
-
appendTimeoutInsight
Description copied from interface:ClientStream
Append information that will be included in the locally generated DEADLINE_EXCEEDED errors to the givenInsightBuilder
, in order to tell the user about the state of the stream so that they can better diagnose the cause of the error.- Specified by:
appendTimeoutInsight
in interfaceClientStream
-
getTransportTracer
-