Package io.grpc.internal
Class AbstractClientStream.TransportState
- java.lang.Object
-
- io.grpc.internal.AbstractStream.TransportState
-
- io.grpc.internal.AbstractClientStream.TransportState
-
- All Implemented Interfaces:
ApplicationThreadDeframer.TransportExecutor
,ApplicationThreadDeframerListener.TransportExecutor
,MessageDeframer.Listener
- Direct Known Subclasses:
Http2ClientStreamTransportState
- Enclosing class:
- AbstractClientStream
protected abstract static class AbstractClientStream.TransportState extends AbstractStream.TransportState
This should only be called from the transport thread.
-
-
Field Summary
Fields Modifier and Type Field Description private DecompressorRegistry
decompressorRegistry
private boolean
deframerClosed
private java.lang.Runnable
deframerClosedTask
private boolean
fullStreamDecompression
private ClientStreamListener
listener
private boolean
listenerClosed
private boolean
outboundClosed
Whether the client has half-closed the stream.private StatsTraceContext
statsTraceCtx
Whether listener.closed() has been called.private boolean
statusReported
Whether the stream is closed from the transport's perspective.private boolean
statusReportedIsOk
True if the status reported (set viatransportReportStatus(io.grpc.Status, boolean, io.grpc.Metadata)
) is OK.-
Fields inherited from class io.grpc.internal.AbstractStream.TransportState
DEFAULT_ONREADY_THRESHOLD
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
TransportState(int maxMessageSize, StatsTraceContext statsTraceCtx, TransportTracer transportTracer, CallOptions options)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
closeListener(Status status, ClientStreamListener.RpcProgress rpcProgress, Metadata trailers)
Closes the listener if not previously closed.void
deframerClosed(boolean hasPartialMessage)
Called when the deframer closes.protected void
inboundDataReceived(ReadableBuffer frame)
Processes the contents of a received data frame from the server.protected void
inboundHeadersReceived(Metadata headers)
Called by transport implementations when they receive headers.protected void
inboundTrailersReceived(Metadata trailers, Status status)
Processes the trailers and status from the server.protected boolean
isOutboundClosed()
protected ClientStreamListener
listener()
Override this method to provide a stream listener.private void
setDecompressorRegistry(DecompressorRegistry decompressorRegistry)
private void
setFullStreamDecompression(boolean fullStreamDecompression)
void
setListener(ClientStreamListener listener)
private void
setOutboundClosed()
void
transportReportStatus(Status status, boolean stopDelivery, Metadata trailers)
Report stream closure with status to the application layer if not already reported.void
transportReportStatus(Status status, ClientStreamListener.RpcProgress rpcProgress, boolean stopDelivery, Metadata trailers)
Report stream closure with status to the application layer if not already reported.-
Methods inherited from class io.grpc.internal.AbstractStream.TransportState
closeDeframer, deframe, getStatsTraceContext, getTransportTracer, isStreamDeallocated, messagesAvailable, onSentBytes, onStreamAllocated, onStreamDeallocated, optimizeForDirectExecutor, requestMessagesFromDeframerForTesting, setDecompressor, setFullStreamDecompressor, setMaxInboundMessageSize, setOnReadyThreshold
-
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.ApplicationThreadDeframerListener.TransportExecutor
runOnTransportThread
-
Methods inherited from interface io.grpc.internal.MessageDeframer.Listener
bytesRead, deframeFailed
-
-
-
-
Field Detail
-
statsTraceCtx
private final StatsTraceContext statsTraceCtx
Whether listener.closed() has been called.
-
listenerClosed
private boolean listenerClosed
-
listener
private ClientStreamListener listener
-
fullStreamDecompression
private boolean fullStreamDecompression
-
decompressorRegistry
private DecompressorRegistry decompressorRegistry
-
deframerClosed
private boolean deframerClosed
-
deframerClosedTask
private java.lang.Runnable deframerClosedTask
-
outboundClosed
private volatile boolean outboundClosed
Whether the client has half-closed the stream.
-
statusReported
private boolean statusReported
Whether the stream is closed from the transport's perspective. This can differ fromlistenerClosed
because there may still be messages buffered to deliver to the application.
-
statusReportedIsOk
private boolean statusReportedIsOk
True if the status reported (set viatransportReportStatus(io.grpc.Status, boolean, io.grpc.Metadata)
) is OK.
-
-
Constructor Detail
-
TransportState
protected TransportState(int maxMessageSize, StatsTraceContext statsTraceCtx, TransportTracer transportTracer, CallOptions options)
-
-
Method Detail
-
setFullStreamDecompression
private void setFullStreamDecompression(boolean fullStreamDecompression)
-
setDecompressorRegistry
private void setDecompressorRegistry(DecompressorRegistry decompressorRegistry)
-
setListener
public final void setListener(ClientStreamListener listener)
-
deframerClosed
public void deframerClosed(boolean hasPartialMessage)
Description copied from interface:MessageDeframer.Listener
Called when the deframer closes.- Parameters:
hasPartialMessage
- whether the deframer contained an incomplete message at closing.
-
listener
protected final ClientStreamListener listener()
Description copied from class:AbstractStream.TransportState
Override this method to provide a stream listener.- Specified by:
listener
in classAbstractStream.TransportState
-
setOutboundClosed
private final void setOutboundClosed()
-
isOutboundClosed
protected final boolean isOutboundClosed()
-
inboundHeadersReceived
protected void inboundHeadersReceived(Metadata headers)
Called by transport implementations when they receive headers.- Parameters:
headers
- the parsed headers
-
inboundDataReceived
protected void inboundDataReceived(ReadableBuffer frame)
Processes the contents of a received data frame from the server.- Parameters:
frame
- the received data frame. Its ownership is transferred to this method.
-
inboundTrailersReceived
protected void inboundTrailersReceived(Metadata trailers, Status status)
Processes the trailers and status from the server.- Parameters:
trailers
- the received trailersstatus
- the status extracted from the trailers
-
transportReportStatus
public final void transportReportStatus(Status status, boolean stopDelivery, Metadata trailers)
Report stream closure with status to the application layer if not already reported. This method must be called from the transport thread.- Parameters:
status
- the new status to setstopDelivery
- iftrue
, interrupts any further delivery of inbound messages that may already be queued up in the deframer. Iffalse
, the listener will be notified immediately after all currently completed messages in the deframer have been delivered to the application.trailers
- new instance ofTrailers
, either empty or those returned by the server
-
transportReportStatus
public final void transportReportStatus(Status status, ClientStreamListener.RpcProgress rpcProgress, boolean stopDelivery, Metadata trailers)
Report stream closure with status to the application layer if not already reported. This method must be called from the transport thread.- Parameters:
status
- the new status to setrpcProgress
- RPC progress that theClientStreamListener.closed(Status, RpcProgress, Metadata)
will receivestopDelivery
- iftrue
, interrupts any further delivery of inbound messages that may already be queued up in the deframer and overrides any previously queued status. Iffalse
, the listener will be notified immediately after all currently completed messages in the deframer have been delivered to the application.trailers
- new instance ofTrailers
, either empty or those returned by the server
-
closeListener
private void closeListener(Status status, ClientStreamListener.RpcProgress rpcProgress, Metadata trailers)
Closes the listener if not previously closed.- Throws:
java.lang.IllegalStateException
- if the call has not yet been started.
-
-