blob: ff880d232888211253bc8cdc8fac7e039a48feda [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>ForwardingLoadBalancer (grpc-all 1.73.0 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../jquery/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
<script type="text/javascript" src="../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../jquery/jquery-3.7.1.min.js"></script>
<script type="text/javascript" src="../../../jquery/jquery-ui.min.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ForwardingLoadBalancer (grpc-all 1.73.0 API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":6,"i2":10,"i3":10,"i4":42,"i5":10,"i6":10,"i7":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ForwardingLoadBalancer.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">io.grpc.util</a></div>
<h2 title="Class ForwardingLoadBalancer" class="title">Class ForwardingLoadBalancer</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li><a href="../LoadBalancer.html" title="class in io.grpc">io.grpc.LoadBalancer</a></li>
<li>
<ul class="inheritance">
<li>io.grpc.util.ForwardingLoadBalancer</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="GracefulSwitchLoadBalancer.html" title="class in io.grpc.util">GracefulSwitchLoadBalancer</a></code></dd>
</dl>
<hr>
<pre><a href="../ExperimentalApi.html" title="annotation in io.grpc">@ExperimentalApi</a>("https://github.com/grpc/grpc-java/issues/1771")
public abstract class <span class="typeNameLabel">ForwardingLoadBalancer</span>
extends <a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a></pre>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.io.grpc.LoadBalancer">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from class&nbsp;io.grpc.<a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a></h3>
<code><a href="../LoadBalancer.CreateSubchannelArgs.html" title="class in io.grpc">LoadBalancer.CreateSubchannelArgs</a>, <a href="../LoadBalancer.ErrorPicker.html" title="class in io.grpc">LoadBalancer.ErrorPicker</a>, <a href="../LoadBalancer.Factory.html" title="class in io.grpc">LoadBalancer.Factory</a>, <a href="../LoadBalancer.FixedResultPicker.html" title="class in io.grpc">LoadBalancer.FixedResultPicker</a>, <a href="../LoadBalancer.Helper.html" title="class in io.grpc">LoadBalancer.Helper</a>, <a href="../LoadBalancer.PickDetailsConsumer.html" title="interface in io.grpc">LoadBalancer.PickDetailsConsumer</a>, <a href="../LoadBalancer.PickResult.html" title="class in io.grpc">LoadBalancer.PickResult</a>, <a href="../LoadBalancer.PickSubchannelArgs.html" title="class in io.grpc">LoadBalancer.PickSubchannelArgs</a>, <a href="../LoadBalancer.ResolvedAddresses.html" title="class in io.grpc">LoadBalancer.ResolvedAddresses</a>, <a href="../LoadBalancer.Subchannel.html" title="class in io.grpc">LoadBalancer.Subchannel</a>, <a href="../LoadBalancer.SubchannelPicker.html" title="class in io.grpc">LoadBalancer.SubchannelPicker</a>, <a href="../LoadBalancer.SubchannelStateListener.html" title="interface in io.grpc">LoadBalancer.SubchannelStateListener</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- =========== FIELD SUMMARY =========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.io.grpc.LoadBalancer">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;io.grpc.<a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a></h3>
<code><a href="../LoadBalancer.html#ATTR_HEALTH_CHECKING_CONFIG">ATTR_HEALTH_CHECKING_CONFIG</a>, <a href="../LoadBalancer.html#DISABLE_SUBCHANNEL_RECONNECT_KEY">DISABLE_SUBCHANNEL_RECONNECT_KEY</a>, <a href="../LoadBalancer.html#EMPTY_PICKER">EMPTY_PICKER</a>, <a href="../LoadBalancer.html#HAS_HEALTH_PRODUCER_LISTENER_KEY">HAS_HEALTH_PRODUCER_LISTENER_KEY</a>, <a href="../LoadBalancer.html#HEALTH_CONSUMER_LISTENER_ARG_KEY">HEALTH_CONSUMER_LISTENER_ARG_KEY</a>, <a href="../LoadBalancer.html#IS_PETIOLE_POLICY">IS_PETIOLE_POLICY</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">ForwardingLoadBalancer</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t6" class="tableTab"><span><a href="javascript:show(32);">Deprecated Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#canHandleEmptyAddressListFromNameResolution()">canHandleEmptyAddressListFromNameResolution</a></span>()</code></th>
<td class="colLast">
<div class="block">Whether this LoadBalancer can handle empty address group list to be passed to <a href="../LoadBalancer.html#handleResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses)"><code>LoadBalancer.handleResolvedAddresses(ResolvedAddresses)</code></a>.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>protected abstract <a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#delegate()">delegate</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the underlying balancer.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleNameResolutionError(io.grpc.Status)">handleNameResolutionError</a></span>&#8203;(<a href="../Status.html" title="class in io.grpc">Status</a>&nbsp;error)</code></th>
<td class="colLast">
<div class="block">Handles an error from the name resolution system.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses)">handleResolvedAddresses</a></span>&#8203;(<a href="../LoadBalancer.ResolvedAddresses.html" title="class in io.grpc">LoadBalancer.ResolvedAddresses</a>&nbsp;resolvedAddresses)</code></th>
<td class="colLast">
<div class="block">Handles newly resolved server groups and metadata attributes from name resolution system.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSubchannelState(io.grpc.LoadBalancer.Subchannel,io.grpc.ConnectivityStateInfo)">handleSubchannelState</a></span>&#8203;(<a href="../LoadBalancer.Subchannel.html" title="class in io.grpc">LoadBalancer.Subchannel</a>&nbsp;subchannel,
<a href="../ConnectivityStateInfo.html" title="class in io.grpc">ConnectivityStateInfo</a>&nbsp;stateInfo)</code></th>
<td class="colLast">
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#requestConnection()">requestConnection</a></span>()</code></th>
<td class="colLast">
<div class="block">The channel asks the LoadBalancer to establish connections now (if applicable) so that the
upcoming RPC may then just pick a ready connection without waiting for connections.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#shutdown()">shutdown</a></span>()</code></th>
<td class="colLast">
<div class="block">The channel asks the load-balancer to shutdown.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink">String</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#toString()">toString</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.io.grpc.LoadBalancer">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;io.grpc.<a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a></h3>
<code><a href="../LoadBalancer.html#acceptResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses)">acceptResolvedAddresses</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang" class="externalLink">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang" class="externalLink">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang" class="externalLink">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang" class="externalLink">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang" class="externalLink">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang" class="externalLink">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang" class="externalLink">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang" class="externalLink">wait</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>ForwardingLoadBalancer</h4>
<pre>public&nbsp;ForwardingLoadBalancer()</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="delegate()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>delegate</h4>
<pre class="methodSignature">protected abstract&nbsp;<a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a>&nbsp;delegate()</pre>
<div class="block">Returns the underlying balancer.</div>
</li>
</ul>
<a id="handleResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleResolvedAddresses</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;handleResolvedAddresses&#8203;(<a href="../LoadBalancer.ResolvedAddresses.html" title="class in io.grpc">LoadBalancer.ResolvedAddresses</a>&nbsp;resolvedAddresses)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../LoadBalancer.html#handleResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses)">LoadBalancer</a></code></span></div>
<div class="block">Handles newly resolved server groups and metadata attributes from name resolution system.
<code>servers</code> contained in <a href="../EquivalentAddressGroup.html" title="class in io.grpc"><code>EquivalentAddressGroup</code></a> should be considered equivalent
but may be flattened into a single list if needed.
<p>Implementations should not modify the given <code>servers</code>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../LoadBalancer.html#handleResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses)">handleResolvedAddresses</a></code>&nbsp;in class&nbsp;<code><a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>resolvedAddresses</code> - the resolved server addresses, attributes, and config.</dd>
</dl>
</li>
</ul>
<a id="handleNameResolutionError(io.grpc.Status)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleNameResolutionError</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;handleNameResolutionError&#8203;(<a href="../Status.html" title="class in io.grpc">Status</a>&nbsp;error)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../LoadBalancer.html#handleNameResolutionError(io.grpc.Status)">LoadBalancer</a></code></span></div>
<div class="block">Handles an error from the name resolution system.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../LoadBalancer.html#handleNameResolutionError(io.grpc.Status)">handleNameResolutionError</a></code>&nbsp;in class&nbsp;<code><a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>error</code> - a non-OK status</dd>
</dl>
</li>
</ul>
<a id="handleSubchannelState(io.grpc.LoadBalancer.Subchannel,io.grpc.ConnectivityStateInfo)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSubchannelState</h4>
<pre class="methodSignature"><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang" class="externalLink">@Deprecated</a>
public&nbsp;void&nbsp;handleSubchannelState&#8203;(<a href="../LoadBalancer.Subchannel.html" title="class in io.grpc">LoadBalancer.Subchannel</a>&nbsp;subchannel,
<a href="../ConnectivityStateInfo.html" title="class in io.grpc">ConnectivityStateInfo</a>&nbsp;stateInfo)</pre>
<div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span></div>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../LoadBalancer.html#handleSubchannelState(io.grpc.LoadBalancer.Subchannel,io.grpc.ConnectivityStateInfo)">LoadBalancer</a></code></span></div>
<div class="block">Handles a state change on a Subchannel.
<p>The initial state of a Subchannel is IDLE. You won't get a notification for the initial IDLE
state.
<p>If the new state is not SHUTDOWN, this method should create a new picker and call <a href="../LoadBalancer.Helper.html#updateBalancingState(io.grpc.ConnectivityState,io.grpc.LoadBalancer.SubchannelPicker)"><code>Helper.updateBalancingState()</code></a>. Failing to do so may result in
unnecessary delays of RPCs. Please refer to <a href="../LoadBalancer.PickResult.html#withSubchannel(io.grpc.LoadBalancer.Subchannel,io.grpc.ClientStreamTracer.Factory)"><code>PickResult.withSubchannel()</code></a>'s javadoc for more information.
<p>SHUTDOWN can only happen in two cases. One is that LoadBalancer called <a href="../LoadBalancer.Subchannel.html#shutdown()"><code>LoadBalancer.Subchannel.shutdown()</code></a> earlier, thus it should have already discarded this Subchannel. The other
is that Channel is doing a <a href="../ManagedChannel.html#shutdownNow()"><code>forced shutdown</code></a> or has already
terminated, thus there won't be further requests to LoadBalancer. Therefore, the LoadBalancer
usually don't need to react to a SHUTDOWN state.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../LoadBalancer.html#handleSubchannelState(io.grpc.LoadBalancer.Subchannel,io.grpc.ConnectivityStateInfo)">handleSubchannelState</a></code>&nbsp;in class&nbsp;<code><a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>subchannel</code> - the involved Subchannel</dd>
<dd><code>stateInfo</code> - the new state</dd>
</dl>
</li>
</ul>
<a id="shutdown()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>shutdown</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;shutdown()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../LoadBalancer.html#shutdown()">LoadBalancer</a></code></span></div>
<div class="block">The channel asks the load-balancer to shutdown. No more methods on this class will be called
after this method. The implementation should shutdown all Subchannels and OOB channels, and do
any other cleanup as necessary.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../LoadBalancer.html#shutdown()">shutdown</a></code>&nbsp;in class&nbsp;<code><a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a></code></dd>
</dl>
</li>
</ul>
<a id="canHandleEmptyAddressListFromNameResolution()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>canHandleEmptyAddressListFromNameResolution</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;canHandleEmptyAddressListFromNameResolution()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../LoadBalancer.html#canHandleEmptyAddressListFromNameResolution()">LoadBalancer</a></code></span></div>
<div class="block">Whether this LoadBalancer can handle empty address group list to be passed to <a href="../LoadBalancer.html#handleResolvedAddresses(io.grpc.LoadBalancer.ResolvedAddresses)"><code>LoadBalancer.handleResolvedAddresses(ResolvedAddresses)</code></a>. The default implementation returns
<code>false</code>, meaning that if the NameResolver returns an empty list, the Channel will turn
that into an error and call <a href="../LoadBalancer.html#handleNameResolutionError(io.grpc.Status)"><code>LoadBalancer.handleNameResolutionError(io.grpc.Status)</code></a>. LoadBalancers that want to
accept empty lists should override this method and return <code>true</code>.
<p>This method should always return a constant value. It's not specified when this will be
called.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../LoadBalancer.html#canHandleEmptyAddressListFromNameResolution()">canHandleEmptyAddressListFromNameResolution</a></code>&nbsp;in class&nbsp;<code><a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a></code></dd>
</dl>
</li>
</ul>
<a id="requestConnection()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>requestConnection</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;requestConnection()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../LoadBalancer.html#requestConnection()">LoadBalancer</a></code></span></div>
<div class="block">The channel asks the LoadBalancer to establish connections now (if applicable) so that the
upcoming RPC may then just pick a ready connection without waiting for connections. This
is triggered by <a href="../ManagedChannel.html#getState(boolean)"><code>ManagedChannel.getState(true)</code></a>.
<p>If LoadBalancer doesn't override it, this is no-op. If it infeasible to create connections
given the current state, e.g. no Subchannel has been created yet, LoadBalancer can ignore this
request.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../LoadBalancer.html#requestConnection()">requestConnection</a></code>&nbsp;in class&nbsp;<code><a href="../LoadBalancer.html" title="class in io.grpc">LoadBalancer</a></code></dd>
</dl>
</li>
</ul>
<a id="toString()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>toString</h4>
<pre class="methodSignature">public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink">String</a>&nbsp;toString()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang" class="externalLink">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></code></dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ForwardingLoadBalancer.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>