Class ManagedChannelImpl.SubchannelImpl
- java.lang.Object
-
- io.grpc.LoadBalancer.Subchannel
-
- io.grpc.internal.AbstractSubchannel
-
- io.grpc.internal.ManagedChannelImpl.SubchannelImpl
-
- Enclosing class:
- ManagedChannelImpl
private final class ManagedChannelImpl.SubchannelImpl extends AbstractSubchannel
-
-
Field Summary
Fields Modifier and Type Field Description (package private) java.util.List<EquivalentAddressGroup>
addressGroups
(package private) LoadBalancer.CreateSubchannelArgs
args
(package private) SynchronizationContext.ScheduledHandle
delayedShutdownTask
(package private) boolean
shutdown
(package private) boolean
started
(package private) InternalSubchannel
subchannel
(package private) ChannelLoggerImpl
subchannelLogger
(package private) InternalLogId
subchannelLogId
(package private) ChannelTracer
subchannelTracer
-
Constructor Summary
Constructors Constructor Description SubchannelImpl(LoadBalancer.CreateSubchannelArgs args)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Channel
asChannel()
(Internal use only) returns aChannel
that is backed by this Subchannel.java.util.List<EquivalentAddressGroup>
getAllAddresses()
Returns the addresses that this Subchannel is bound to.Attributes
getAttributes()
The same attributes passed toHelper.createSubchannel()
.ChannelLogger
getChannelLogger()
Returns aChannelLogger
for this Subchannel.Attributes
getConnectedAddressAttributes()
(Internal use only) returns attributes of the address subchannel is connected to.(package private) InternalInstrumented<InternalChannelz.ChannelStats>
getInstrumentedInternalSubchannel()
Returns the InternalSubchannel as anInstrumented<T>
for the sole purpose of channelz unit tests.java.lang.Object
getInternalSubchannel()
(Internal use only) returns an object that represents the underlying subchannel that is used by the Channel for sending RPCs when thisLoadBalancer.Subchannel
is picked.void
requestConnection()
Asks the Subchannel to create a connection (aka transport), if there isn't an active one.void
shutdown()
Shuts down the Subchannel.void
start(LoadBalancer.SubchannelStateListener listener)
Starts the Subchannel.private java.util.List<EquivalentAddressGroup>
stripOverrideAuthorityAttributes(java.util.List<EquivalentAddressGroup> eags)
java.lang.String
toString()
void
updateAddresses(java.util.List<EquivalentAddressGroup> addrs)
Replaces the existing addresses used with thisSubchannel
.-
Methods inherited from class io.grpc.LoadBalancer.Subchannel
getAddresses
-
-
-
-
Field Detail
-
args
final LoadBalancer.CreateSubchannelArgs args
-
subchannelLogId
final InternalLogId subchannelLogId
-
subchannelLogger
final ChannelLoggerImpl subchannelLogger
-
subchannelTracer
final ChannelTracer subchannelTracer
-
addressGroups
java.util.List<EquivalentAddressGroup> addressGroups
-
subchannel
InternalSubchannel subchannel
-
started
boolean started
-
shutdown
boolean shutdown
-
delayedShutdownTask
SynchronizationContext.ScheduledHandle delayedShutdownTask
-
-
Constructor Detail
-
SubchannelImpl
SubchannelImpl(LoadBalancer.CreateSubchannelArgs args)
-
-
Method Detail
-
start
public void start(LoadBalancer.SubchannelStateListener listener)
Description copied from class:LoadBalancer.Subchannel
Starts the Subchannel. Can only be called once.Must be called prior to any other method on this class, except for
LoadBalancer.Subchannel.shutdown()
which may be called at any time.Must be called from the
Synchronization Context
, otherwise it may throw. See #5015 for more discussions.- Overrides:
start
in classLoadBalancer.Subchannel
- Parameters:
listener
- receives state updates for this Subchannel.
-
getInstrumentedInternalSubchannel
InternalInstrumented<InternalChannelz.ChannelStats> getInstrumentedInternalSubchannel()
Description copied from class:AbstractSubchannel
Returns the InternalSubchannel as anInstrumented<T>
for the sole purpose of channelz unit tests.- Specified by:
getInstrumentedInternalSubchannel
in classAbstractSubchannel
-
shutdown
public void shutdown()
Description copied from class:LoadBalancer.Subchannel
Shuts down the Subchannel. After this method is called, this Subchannel should no longer be returned by the latestpicker
, and can be safely discarded.Calling it on an already shut-down Subchannel has no effect.
It should be called from the Synchronization Context. Currently will log a warning if violated. It will become an exception eventually. See #5015 for the background.
- Specified by:
shutdown
in classLoadBalancer.Subchannel
-
requestConnection
public void requestConnection()
Description copied from class:LoadBalancer.Subchannel
Asks the Subchannel to create a connection (aka transport), if there isn't an active one.It should be called from the Synchronization Context. Currently will log a warning if violated. It will become an exception eventually. See #5015 for the background.
- Specified by:
requestConnection
in classLoadBalancer.Subchannel
-
getAllAddresses
public java.util.List<EquivalentAddressGroup> getAllAddresses()
Description copied from class:LoadBalancer.Subchannel
Returns the addresses that this Subchannel is bound to. The returned list will not be empty.It should be called from the Synchronization Context. Currently will log a warning if violated. It will become an exception eventually. See #5015 for the background.
- Overrides:
getAllAddresses
in classLoadBalancer.Subchannel
-
getAttributes
public Attributes getAttributes()
Description copied from class:LoadBalancer.Subchannel
The same attributes passed toHelper.createSubchannel()
. LoadBalancer can use it to attach additional information here, e.g., the shard this Subchannel belongs to.- Specified by:
getAttributes
in classLoadBalancer.Subchannel
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
asChannel
public Channel asChannel()
Description copied from class:LoadBalancer.Subchannel
(Internal use only) returns aChannel
that is backed by this Subchannel. This allows a LoadBalancer to issue its own RPCs for auxiliary purposes, such as health-checking, on already-established connections. This channel has certain restrictions:- It can issue RPCs only if the Subchannel is
READY
. IfChannel.newCall(io.grpc.MethodDescriptor<RequestT, ResponseT>, io.grpc.CallOptions)
is called when the Subchannel is notREADY
, the RPC will fail immediately. - It doesn't support
wait-for-ready
RPCs. Such RPCs will fail immediately.
RPCs made on this Channel is not counted when determining ManagedChannel's
idle mode
. In other words, they won't prevent ManagedChannel from entering idle mode.Warning: RPCs made on this channel will prevent a shut-down transport from terminating. If you make long-running RPCs, you need to make sure they will finish in time after the Subchannel has transitioned away from
READY
state (notified throughLoadBalancer.handleSubchannelState(io.grpc.LoadBalancer.Subchannel, io.grpc.ConnectivityStateInfo)
).Warning: this is INTERNAL API, is not supposed to be used by external users, and may change without notice. If you think you must use it, please file an issue.
- Overrides:
asChannel
in classLoadBalancer.Subchannel
- It can issue RPCs only if the Subchannel is
-
getInternalSubchannel
public java.lang.Object getInternalSubchannel()
Description copied from class:LoadBalancer.Subchannel
(Internal use only) returns an object that represents the underlying subchannel that is used by the Channel for sending RPCs when thisLoadBalancer.Subchannel
is picked. This is an opaque object that is both provided and consumed by the Channel. Its type is notSubchannel
.Warning: this is INTERNAL API, is not supposed to be used by external users, and may change without notice. If you think you must use it, please file an issue and we can consider removing its "internal" status.
- Overrides:
getInternalSubchannel
in classLoadBalancer.Subchannel
-
getChannelLogger
public ChannelLogger getChannelLogger()
Description copied from class:LoadBalancer.Subchannel
Returns aChannelLogger
for this Subchannel.- Overrides:
getChannelLogger
in classLoadBalancer.Subchannel
-
updateAddresses
public void updateAddresses(java.util.List<EquivalentAddressGroup> addrs)
Description copied from class:LoadBalancer.Subchannel
Replaces the existing addresses used with thisSubchannel
. If the new and old addresses overlap, the Subchannel can continue using an existing connection.It must be called from the Synchronization Context or will throw.
- Overrides:
updateAddresses
in classLoadBalancer.Subchannel
-
getConnectedAddressAttributes
public Attributes getConnectedAddressAttributes()
Description copied from class:LoadBalancer.Subchannel
(Internal use only) returns attributes of the address subchannel is connected to.Warning: this is INTERNAL API, is not supposed to be used by external users, and may change without notice. If you think you must use it, please file an issue and we can consider removing its "internal" status.
- Overrides:
getConnectedAddressAttributes
in classLoadBalancer.Subchannel
-
stripOverrideAuthorityAttributes
private java.util.List<EquivalentAddressGroup> stripOverrideAuthorityAttributes(java.util.List<EquivalentAddressGroup> eags)
-
-