blob: d9f4c7d63650b536730f50a25b800efa54a236b9 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>ZoneawareEnsemblePlacementPolicyImpl (Apache BookKeeper :: Parent 4.18.0-SNAPSHOT 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.6.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="ZoneawareEnsemblePlacementPolicyImpl (Apache BookKeeper :: Parent 4.18.0-SNAPSHOT API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete 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/ZoneawareEnsemblePlacementPolicyImpl.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><a href="#field.detail">Field</a>&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">org.apache.bookkeeper.client</a></div>
<h2 title="Class ZoneawareEnsemblePlacementPolicyImpl" class="title">Class ZoneawareEnsemblePlacementPolicyImpl</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="TopologyAwareEnsemblePlacementPolicy.html" title="class in org.apache.bookkeeper.client">org.apache.bookkeeper.client.TopologyAwareEnsemblePlacementPolicy</a></li>
<li>
<ul class="inheritance">
<li>org.apache.bookkeeper.client.ZoneawareEnsemblePlacementPolicyImpl</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="EnsemblePlacementPolicy.html" title="interface in org.apache.bookkeeper.client">EnsemblePlacementPolicy</a></code>, <code><a href="ITopologyAwareEnsemblePlacementPolicy.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;</code></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="ZoneawareEnsemblePlacementPolicy.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicy</a></code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">ZoneawareEnsemblePlacementPolicyImpl</span>
extends <a href="TopologyAwareEnsemblePlacementPolicy.html" title="class in org.apache.bookkeeper.client">TopologyAwareEnsemblePlacementPolicy</a></pre>
<div class="block">Simple zoneaware ensemble placement policy.</div>
</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>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation</a></span></code></th>
<td class="colLast">
<div class="block">Zone and UpgradeDomain pair of a node.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.apache.bookkeeper.client.TopologyAwareEnsemblePlacementPolicy">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.bookkeeper.client.<a href="TopologyAwareEnsemblePlacementPolicy.html" title="class in org.apache.bookkeeper.client">TopologyAwareEnsemblePlacementPolicy</a></h3>
<code><a href="TopologyAwareEnsemblePlacementPolicy.DefaultResolver.html" title="class in org.apache.bookkeeper.client">TopologyAwareEnsemblePlacementPolicy.DefaultResolver</a>, <a href="TopologyAwareEnsemblePlacementPolicy.DNSResolverDecorator.html" title="class in org.apache.bookkeeper.client">TopologyAwareEnsemblePlacementPolicy.DNSResolverDecorator</a>, <a href="TopologyAwareEnsemblePlacementPolicy.EnsembleForReplacementWithNoConstraints.html" title="class in org.apache.bookkeeper.client">TopologyAwareEnsemblePlacementPolicy.EnsembleForReplacementWithNoConstraints</a>, <a href="TopologyAwareEnsemblePlacementPolicy.RRTopologyAwareCoverageEnsemble.html" title="class in org.apache.bookkeeper.client">TopologyAwareEnsemblePlacementPolicy.RRTopologyAwareCoverageEnsemble</a>, <a href="TopologyAwareEnsemblePlacementPolicy.TruePredicate.html" title="class in org.apache.bookkeeper.client">TopologyAwareEnsemblePlacementPolicy.TruePredicate</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.apache.bookkeeper.client.EnsemblePlacementPolicy">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.bookkeeper.client.<a href="EnsemblePlacementPolicy.html" title="interface in org.apache.bookkeeper.client">EnsemblePlacementPolicy</a></h3>
<code><a href="EnsemblePlacementPolicy.PlacementPolicyAdherence.html" title="enum in org.apache.bookkeeper.client">EnsemblePlacementPolicy.PlacementPolicyAdherence</a>, <a href="EnsemblePlacementPolicy.PlacementResult.html" title="class in org.apache.bookkeeper.client">EnsemblePlacementPolicy.PlacementResult</a>&lt;<a href="EnsemblePlacementPolicy.PlacementResult.html" title="type parameter in EnsemblePlacementPolicy.PlacementResult">T</a>&gt;</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.bookkeeper.client.<a href="ITopologyAwareEnsemblePlacementPolicy.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy</a></h3>
<code><a href="ITopologyAwareEnsemblePlacementPolicy.Ensemble.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Ensemble</a>&lt;<a href="ITopologyAwareEnsemblePlacementPolicy.Ensemble.html" title="type parameter in ITopologyAwareEnsemblePlacementPolicy.Ensemble">T</a> extends <a href="../net/Node.html" title="interface in org.apache.bookkeeper.net">Node</a>&gt;, <a href="ITopologyAwareEnsemblePlacementPolicy.Predicate.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Predicate</a>&lt;<a href="ITopologyAwareEnsemblePlacementPolicy.Predicate.html" title="type parameter in ITopologyAwareEnsemblePlacementPolicy.Predicate">T</a> extends <a href="../net/Node.html" title="interface in org.apache.bookkeeper.net">Node</a>&gt;</code></li>
</ul>
</li>
</ul>
</section>
<!-- =========== FIELD SUMMARY =========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected java.util.concurrent.ConcurrentMap&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>,&#8203;<a href="ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#address2NodePlacement">address2NodePlacement</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#desiredNumZonesPerWriteQuorum">desiredNumZonesPerWriteQuorum</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#enforceStrictZoneawarePlacement">enforceStrictZoneawarePlacement</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../stats/Counter.html" title="interface in org.apache.bookkeeper.stats">Counter</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#failedToResolveNetworkLocationCounter">failedToResolveNetworkLocationCounter</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) static org.slf4j.Logger</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#LOG">LOG</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#maxWeightMultiple">maxWeightMultiple</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#minNumZonesPerWriteQuorum">minNumZonesPerWriteQuorum</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#myNode">myNode</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#myZone">myZone</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../stats/Gauge.html" title="interface in org.apache.bookkeeper.stats">Gauge</a>&lt;java.lang.Integer&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#numWritableBookiesInDefaultFaultDomain">numWritableBookiesInDefaultFaultDomain</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#reorderReadsRandom">reorderReadsRandom</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#reorderThresholdPendingRequests">reorderThresholdPendingRequests</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected com.google.common.cache.Cache&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>,&#8203;java.lang.Long&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#slowBookies">slowBookies</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stabilizePeriodSeconds">stabilizePeriodSeconds</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected <a href="../stats/StatsLogger.html" title="interface in org.apache.bookkeeper.stats">StatsLogger</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#statsLogger">statsLogger</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected io.netty.util.HashedWheelTimer</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#timer">timer</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#UNKNOWN_ZONE">UNKNOWN_ZONE</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected <a href="ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#unresolvedNodeLocation">unresolvedNodeLocation</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.apache.bookkeeper.client.TopologyAwareEnsemblePlacementPolicy">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;org.apache.bookkeeper.client.<a href="TopologyAwareEnsemblePlacementPolicy.html" title="class in org.apache.bookkeeper.client">TopologyAwareEnsemblePlacementPolicy</a></h3>
<code><a href="TopologyAwareEnsemblePlacementPolicy.html#bookieAddressResolver">bookieAddressResolver</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#bookieInfoMap">bookieInfoMap</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#bookiesJoinedCounter">bookiesJoinedCounter</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#bookiesLeftCounter">bookiesLeftCounter</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#dnsResolver">dnsResolver</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#historyBookies">historyBookies</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#isWeighted">isWeighted</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#knownBookies">knownBookies</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#readOnlyBookies">readOnlyBookies</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#REPP_DNS_RESOLVER_CLASS">REPP_DNS_RESOLVER_CLASS</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#rwLock">rwLock</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#topology">topology</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#weightedSelection">weightedSelection</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()">ZoneawareEnsemblePlacementPolicyImpl</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="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete 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>protected java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addDefaultFaultDomainBookies(java.util.Set)">addDefaultFaultDomainBookies</a></span>&#8203;(java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;excludeBookies)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#areAckedBookiesAdheringToPlacementPolicy(java.util.Set,int,int)">areAckedBookiesAdheringToPlacementPolicy</a></span>&#8203;(java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;ackedBookies,
int&nbsp;writeQuorumSize,
int&nbsp;ackQuorumSize)</code></th>
<td class="colLast">
<div class="block">Returns true if the bookies that have acknowledged a write adhere to the minimum fault domains as defined in the
placement policy in use.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getDefaultFaultDomain()">getDefaultFaultDomain</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>protected <a href="ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getZoneAwareNodeLocation(org.apache.bookkeeper.net.BookieId)">getZoneAwareNodeLocation</a></span>&#8203;(<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&nbsp;addr)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>protected <a href="ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getZoneAwareNodeLocation(org.apache.bookkeeper.net.BookieNode)">getZoneAwareNodeLocation</a></span>&#8203;(<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&nbsp;node)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="EnsemblePlacementPolicy.html" title="interface in org.apache.bookkeeper.client">EnsemblePlacementPolicy</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#initialize(org.apache.bookkeeper.conf.ClientConfiguration,java.util.Optional,io.netty.util.HashedWheelTimer,org.apache.bookkeeper.feature.FeatureProvider,org.apache.bookkeeper.stats.StatsLogger,org.apache.bookkeeper.proto.BookieAddressResolver)">initialize</a></span>&#8203;(<a href="../conf/ClientConfiguration.html" title="class in org.apache.bookkeeper.conf">ClientConfiguration</a>&nbsp;conf,
java.util.Optional&lt;<a href="../net/DNSToSwitchMapping.html" title="interface in org.apache.bookkeeper.net">DNSToSwitchMapping</a>&gt;&nbsp;optionalDnsResolver,
io.netty.util.HashedWheelTimer&nbsp;timer,
<a href="../feature/FeatureProvider.html" title="interface in org.apache.bookkeeper.feature">FeatureProvider</a>&nbsp;featureProvider,
<a href="../stats/StatsLogger.html" title="interface in org.apache.bookkeeper.stats">StatsLogger</a>&nbsp;statsLogger,
<a href="../proto/BookieAddressResolver.html" title="interface in org.apache.bookkeeper.proto">BookieAddressResolver</a>&nbsp;bookieAddressResolver)</code></th>
<td class="colLast">
<div class="block">Initialize the policy.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code><a href="EnsemblePlacementPolicy.PlacementPolicyAdherence.html" title="enum in org.apache.bookkeeper.client">EnsemblePlacementPolicy.PlacementPolicyAdherence</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isEnsembleAdheringToPlacementPolicy(java.util.List,int,int)">isEnsembleAdheringToPlacementPolicy</a></span>&#8203;(java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;ensembleList,
int&nbsp;writeQuorumSize,
int&nbsp;ackQuorumSize)</code></th>
<td class="colLast">
<div class="block">returns AdherenceLevel if the Ensemble is strictly/softly/fails adhering
to placement policy, like in the case of
RackawareEnsemblePlacementPolicy, bookies in the writeset are from
'minNumRacksPerWriteQuorum' number of racks.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="EnsemblePlacementPolicy.PlacementResult.html" title="class in org.apache.bookkeeper.client">EnsemblePlacementPolicy.PlacementResult</a>&lt;java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#newEnsemble(int,int,int,java.util.Map,java.util.Set)">newEnsemble</a></span>&#8203;(int&nbsp;ensembleSize,
int&nbsp;writeQuorumSize,
int&nbsp;ackQuorumSize,
java.util.Map&lt;java.lang.String,&#8203;byte[]&gt;&nbsp;customMetadata,
java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;excludeBookies)</code></th>
<td class="colLast">
<div class="block">Choose <i>numBookies</i> bookies for ensemble.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code><a href="EnsemblePlacementPolicy.PlacementResult.html" title="class in org.apache.bookkeeper.client">EnsemblePlacementPolicy.PlacementResult</a>&lt;java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#newEnsemble(int,int,int,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate)">newEnsemble</a></span>&#8203;(int&nbsp;ensembleSize,
int&nbsp;writeQuorumSize,
int&nbsp;ackQuorumSize,
java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;excludeBookies,
<a href="ITopologyAwareEnsemblePlacementPolicy.Ensemble.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Ensemble</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;parentEnsemble,
<a href="ITopologyAwareEnsemblePlacementPolicy.Predicate.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Predicate</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;parentPredicate)</code></th>
<td class="colLast">
<div class="block">Create an ensemble with parent ensemble.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#registerSlowBookie(org.apache.bookkeeper.net.BookieId,long)">registerSlowBookie</a></span>&#8203;(<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&nbsp;bookieSocketAddress,
long&nbsp;entryId)</code></th>
<td class="colLast">
<div class="block">Register a bookie as slow so that it is tried after available and read-only bookies.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code><a href="DistributionSchedule.WriteSet.html" title="interface in org.apache.bookkeeper.client">DistributionSchedule.WriteSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#reorderReadLACSequence(java.util.List,org.apache.bookkeeper.client.BookiesHealthInfo,org.apache.bookkeeper.client.DistributionSchedule.WriteSet)">reorderReadLACSequence</a></span>&#8203;(java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;ensemble,
<a href="BookiesHealthInfo.html" title="interface in org.apache.bookkeeper.client">BookiesHealthInfo</a>&nbsp;bookiesHealthInfo,
<a href="DistributionSchedule.WriteSet.html" title="interface in org.apache.bookkeeper.client">DistributionSchedule.WriteSet</a>&nbsp;writeSet)</code></th>
<td class="colLast">
<div class="block">Reorder the read last add confirmed sequence of a given write quorum <i>writeSet</i>.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code><a href="DistributionSchedule.WriteSet.html" title="interface in org.apache.bookkeeper.client">DistributionSchedule.WriteSet</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#reorderReadSequence(java.util.List,org.apache.bookkeeper.client.BookiesHealthInfo,org.apache.bookkeeper.client.DistributionSchedule.WriteSet)">reorderReadSequence</a></span>&#8203;(java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;ensemble,
<a href="BookiesHealthInfo.html" title="interface in org.apache.bookkeeper.client">BookiesHealthInfo</a>&nbsp;bookiesHealthInfo,
<a href="DistributionSchedule.WriteSet.html" title="interface in org.apache.bookkeeper.client">DistributionSchedule.WriteSet</a>&nbsp;writeSet)</code></th>
<td class="colLast">
<div class="block">Reorder the read sequence of a given write quorum <i>writeSet</i>.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code><a href="EnsemblePlacementPolicy.PlacementResult.html" title="class in org.apache.bookkeeper.client">EnsemblePlacementPolicy.PlacementResult</a>&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#replaceBookie(int,int,int,java.util.Map,java.util.List,org.apache.bookkeeper.net.BookieId,java.util.Set)">replaceBookie</a></span>&#8203;(int&nbsp;ensembleSize,
int&nbsp;writeQuorumSize,
int&nbsp;ackQuorumSize,
java.util.Map&lt;java.lang.String,&#8203;byte[]&gt;&nbsp;customMetadata,
java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;currentEnsemble,
<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&nbsp;bookieToReplace,
java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;excludeBookies)</code></th>
<td class="colLast">
<div class="block">Choose a new bookie to replace <i>bookieToReplace</i>.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code><a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#selectFromNetworkLocation(java.lang.String,java.util.Set,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,boolean)">selectFromNetworkLocation</a></span>&#8203;(java.lang.String&nbsp;networkLoc,
java.util.Set&lt;java.lang.String&gt;&nbsp;excludeRacks,
java.util.Set&lt;<a href="../net/Node.html" title="interface in org.apache.bookkeeper.net">Node</a>&gt;&nbsp;excludeBookies,
<a href="ITopologyAwareEnsemblePlacementPolicy.Predicate.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Predicate</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;predicate,
<a href="ITopologyAwareEnsemblePlacementPolicy.Ensemble.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Ensemble</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;ensemble,
boolean&nbsp;fallbackToRandom)</code></th>
<td class="colLast">
<div class="block">Select a node from networkLoc rack excluding excludeBookies.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code><a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#selectFromNetworkLocation(java.lang.String,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,boolean)">selectFromNetworkLocation</a></span>&#8203;(java.lang.String&nbsp;networkLoc,
java.util.Set&lt;<a href="../net/Node.html" title="interface in org.apache.bookkeeper.net">Node</a>&gt;&nbsp;excludeBookies,
<a href="ITopologyAwareEnsemblePlacementPolicy.Predicate.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Predicate</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;predicate,
<a href="ITopologyAwareEnsemblePlacementPolicy.Ensemble.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Ensemble</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;ensemble,
boolean&nbsp;fallbackToRandom)</code></th>
<td class="colLast">
<div class="block">Select a node from a given network location.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code><a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#selectFromNetworkLocation(java.util.Set,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,boolean)">selectFromNetworkLocation</a></span>&#8203;(java.util.Set&lt;java.lang.String&gt;&nbsp;excludeRacks,
java.util.Set&lt;<a href="../net/Node.html" title="interface in org.apache.bookkeeper.net">Node</a>&gt;&nbsp;excludeBookies,
<a href="ITopologyAwareEnsemblePlacementPolicy.Predicate.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Predicate</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;predicate,
<a href="ITopologyAwareEnsemblePlacementPolicy.Ensemble.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Ensemble</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;ensemble,
boolean&nbsp;fallbackToRandom)</code></th>
<td class="colLast">
<div class="block">Select a node from cluster excluding excludeBookies and bookie nodes of
excludeRacks.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#uninitalize()">uninitalize</a></span>()</code></th>
<td class="colLast">
<div class="block">Uninitialize the policy.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code><a href="ZoneawareEnsemblePlacementPolicyImpl.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicyImpl</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#withDefaultFaultDomain(java.lang.String)">withDefaultFaultDomain</a></span>&#8203;(java.lang.String&nbsp;defaultFaultDomain)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.apache.bookkeeper.client.TopologyAwareEnsemblePlacementPolicy">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;org.apache.bookkeeper.client.<a href="TopologyAwareEnsemblePlacementPolicy.html" title="class in org.apache.bookkeeper.client">TopologyAwareEnsemblePlacementPolicy</a></h3>
<code><a href="TopologyAwareEnsemblePlacementPolicy.html#convertBookiesToNodes(java.util.Collection)">convertBookiesToNodes</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#convertBookieToNode(org.apache.bookkeeper.net.BookieId)">convertBookieToNode</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#createBookieNode(org.apache.bookkeeper.net.BookieId)">createBookieNode</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#createDummyLocalBookieNode(java.lang.String)">createDummyLocalBookieNode</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#differBetweenBookies(java.util.List,java.util.List)">differBetweenBookies</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#getNetworkLocations(java.util.Set)">getNetworkLocations</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#handleBookiesThatJoined(java.util.Set)">handleBookiesThatJoined</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#handleBookiesThatLeft(java.util.Set)">handleBookiesThatLeft</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#onBookieRackChange(java.util.List)">onBookieRackChange</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#onClusterChanged(java.util.Set,java.util.Set)">onClusterChanged</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#resolveNetworkLocation(org.apache.bookkeeper.net.BookieId)">resolveNetworkLocation</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#shuffleWithMask(org.apache.bookkeeper.client.DistributionSchedule.WriteSet,int,int)">shuffleWithMask</a>, <a href="TopologyAwareEnsemblePlacementPolicy.html#updateBookieInfo(java.util.Map)">updateBookieInfo</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.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.apache.bookkeeper.client.EnsemblePlacementPolicy">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.bookkeeper.client.<a href="EnsemblePlacementPolicy.html" title="interface in org.apache.bookkeeper.client">EnsemblePlacementPolicy</a></h3>
<code><a href="EnsemblePlacementPolicy.html#getStickyReadBookieIndex(org.apache.bookkeeper.client.api.LedgerMetadata,java.util.Optional)">getStickyReadBookieIndex</a>, <a href="EnsemblePlacementPolicy.html#replaceToAdherePlacementPolicy(int,int,int,java.util.Set,java.util.List)">replaceToAdherePlacementPolicy</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a id="LOG">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
<pre>static final&nbsp;org.slf4j.Logger LOG</pre>
</li>
</ul>
<a id="UNKNOWN_ZONE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>UNKNOWN_ZONE</h4>
<pre>public static final&nbsp;java.lang.String UNKNOWN_ZONE</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.bookkeeper.client.ZoneawareEnsemblePlacementPolicyImpl.UNKNOWN_ZONE">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="unresolvedNodeLocation">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>unresolvedNodeLocation</h4>
<pre>protected&nbsp;<a href="ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation</a> unresolvedNodeLocation</pre>
</li>
</ul>
<a id="statsLogger">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>statsLogger</h4>
<pre>protected&nbsp;<a href="../stats/StatsLogger.html" title="interface in org.apache.bookkeeper.stats">StatsLogger</a> statsLogger</pre>
</li>
</ul>
<a id="slowBookies">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>slowBookies</h4>
<pre>protected&nbsp;com.google.common.cache.Cache&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>,&#8203;java.lang.Long&gt; slowBookies</pre>
</li>
</ul>
<a id="myNode">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>myNode</h4>
<pre>protected&nbsp;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a> myNode</pre>
</li>
</ul>
<a id="myZone">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>myZone</h4>
<pre>protected&nbsp;java.lang.String myZone</pre>
</li>
</ul>
<a id="reorderReadsRandom">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>reorderReadsRandom</h4>
<pre>protected&nbsp;boolean reorderReadsRandom</pre>
</li>
</ul>
<a id="stabilizePeriodSeconds">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>stabilizePeriodSeconds</h4>
<pre>protected&nbsp;int stabilizePeriodSeconds</pre>
</li>
</ul>
<a id="reorderThresholdPendingRequests">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>reorderThresholdPendingRequests</h4>
<pre>protected&nbsp;int reorderThresholdPendingRequests</pre>
</li>
</ul>
<a id="maxWeightMultiple">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>maxWeightMultiple</h4>
<pre>protected&nbsp;int maxWeightMultiple</pre>
</li>
</ul>
<a id="minNumZonesPerWriteQuorum">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>minNumZonesPerWriteQuorum</h4>
<pre>protected&nbsp;int minNumZonesPerWriteQuorum</pre>
</li>
</ul>
<a id="desiredNumZonesPerWriteQuorum">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>desiredNumZonesPerWriteQuorum</h4>
<pre>protected&nbsp;int desiredNumZonesPerWriteQuorum</pre>
</li>
</ul>
<a id="enforceStrictZoneawarePlacement">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>enforceStrictZoneawarePlacement</h4>
<pre>protected&nbsp;boolean enforceStrictZoneawarePlacement</pre>
</li>
</ul>
<a id="timer">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>timer</h4>
<pre>protected&nbsp;io.netty.util.HashedWheelTimer timer</pre>
</li>
</ul>
<a id="address2NodePlacement">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>address2NodePlacement</h4>
<pre>protected final&nbsp;java.util.concurrent.ConcurrentMap&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>,&#8203;<a href="ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation</a>&gt; address2NodePlacement</pre>
</li>
</ul>
<a id="failedToResolveNetworkLocationCounter">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>failedToResolveNetworkLocationCounter</h4>
<pre><a href="../stats/annotations/StatsDoc.html" title="annotation in org.apache.bookkeeper.stats.annotations">@StatsDoc</a>(<a href="../stats/annotations/StatsDoc.html#name()">name</a>="FAILED_TO_RESOLVE_NETWORK_LOCATION_TOTAL",
<a href="../stats/annotations/StatsDoc.html#help()">help</a>="Counter for number of times DNSResolverDecorator failed to resolve Network Location")
protected&nbsp;<a href="../stats/Counter.html" title="interface in org.apache.bookkeeper.stats">Counter</a> failedToResolveNetworkLocationCounter</pre>
</li>
</ul>
<a id="numWritableBookiesInDefaultFaultDomain">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>numWritableBookiesInDefaultFaultDomain</h4>
<pre><a href="../stats/annotations/StatsDoc.html" title="annotation in org.apache.bookkeeper.stats.annotations">@StatsDoc</a>(<a href="../stats/annotations/StatsDoc.html#name()">name</a>="NUM_WRITABLE_BOOKIES_IN_DEFAULT_FAULTDOMAIN",
<a href="../stats/annotations/StatsDoc.html#help()">help</a>="Gauge for the number of writable Bookies in default fault domain")
protected&nbsp;<a href="../stats/Gauge.html" title="interface in org.apache.bookkeeper.stats">Gauge</a>&lt;java.lang.Integer&gt; numWritableBookiesInDefaultFaultDomain</pre>
</li>
</ul>
</li>
</ul>
</section>
<!-- ========= 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>ZoneawareEnsemblePlacementPolicyImpl</h4>
<pre>ZoneawareEnsemblePlacementPolicyImpl()</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="getZoneAwareNodeLocation(org.apache.bookkeeper.net.BookieId)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getZoneAwareNodeLocation</h4>
<pre class="methodSignature">protected&nbsp;<a href="ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation</a>&nbsp;getZoneAwareNodeLocation&#8203;(<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&nbsp;addr)</pre>
</li>
</ul>
<a id="getZoneAwareNodeLocation(org.apache.bookkeeper.net.BookieNode)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getZoneAwareNodeLocation</h4>
<pre class="methodSignature">protected&nbsp;<a href="ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicyImpl.ZoneAwareNodeLocation</a>&nbsp;getZoneAwareNodeLocation&#8203;(<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&nbsp;node)</pre>
</li>
</ul>
<a id="initialize(org.apache.bookkeeper.conf.ClientConfiguration,java.util.Optional,io.netty.util.HashedWheelTimer,org.apache.bookkeeper.feature.FeatureProvider,org.apache.bookkeeper.stats.StatsLogger,org.apache.bookkeeper.proto.BookieAddressResolver)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>initialize</h4>
<pre class="methodSignature">public&nbsp;<a href="EnsemblePlacementPolicy.html" title="interface in org.apache.bookkeeper.client">EnsemblePlacementPolicy</a>&nbsp;initialize&#8203;(<a href="../conf/ClientConfiguration.html" title="class in org.apache.bookkeeper.conf">ClientConfiguration</a>&nbsp;conf,
java.util.Optional&lt;<a href="../net/DNSToSwitchMapping.html" title="interface in org.apache.bookkeeper.net">DNSToSwitchMapping</a>&gt;&nbsp;optionalDnsResolver,
io.netty.util.HashedWheelTimer&nbsp;timer,
<a href="../feature/FeatureProvider.html" title="interface in org.apache.bookkeeper.feature">FeatureProvider</a>&nbsp;featureProvider,
<a href="../stats/StatsLogger.html" title="interface in org.apache.bookkeeper.stats">StatsLogger</a>&nbsp;statsLogger,
<a href="../proto/BookieAddressResolver.html" title="interface in org.apache.bookkeeper.proto">BookieAddressResolver</a>&nbsp;bookieAddressResolver)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="EnsemblePlacementPolicy.html#initialize(org.apache.bookkeeper.conf.ClientConfiguration,java.util.Optional,io.netty.util.HashedWheelTimer,org.apache.bookkeeper.feature.FeatureProvider,org.apache.bookkeeper.stats.StatsLogger,org.apache.bookkeeper.proto.BookieAddressResolver)">EnsemblePlacementPolicy</a></code></span></div>
<div class="block">Initialize the policy.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>conf</code> - client configuration</dd>
<dd><code>optionalDnsResolver</code> - dns resolver</dd>
<dd><code>timer</code> - timer</dd>
<dd><code>featureProvider</code> - feature provider</dd>
<dd><code>statsLogger</code> - stats logger</dd>
</dl>
</li>
</ul>
<a id="withDefaultFaultDomain(java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>withDefaultFaultDomain</h4>
<pre class="methodSignature">public&nbsp;<a href="ZoneawareEnsemblePlacementPolicyImpl.html" title="class in org.apache.bookkeeper.client">ZoneawareEnsemblePlacementPolicyImpl</a>&nbsp;withDefaultFaultDomain&#8203;(java.lang.String&nbsp;defaultFaultDomain)</pre>
</li>
</ul>
<a id="getDefaultFaultDomain()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDefaultFaultDomain</h4>
<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;getDefaultFaultDomain()</pre>
</li>
</ul>
<a id="newEnsemble(int,int,int,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>newEnsemble</h4>
<pre class="methodSignature">public&nbsp;<a href="EnsemblePlacementPolicy.PlacementResult.html" title="class in org.apache.bookkeeper.client">EnsemblePlacementPolicy.PlacementResult</a>&lt;java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&gt;&nbsp;newEnsemble&#8203;(int&nbsp;ensembleSize,
int&nbsp;writeQuorumSize,
int&nbsp;ackQuorumSize,
java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;excludeBookies,
<a href="ITopologyAwareEnsemblePlacementPolicy.Ensemble.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Ensemble</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;parentEnsemble,
<a href="ITopologyAwareEnsemblePlacementPolicy.Predicate.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Predicate</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;parentPredicate)
throws <a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="ITopologyAwareEnsemblePlacementPolicy.html#newEnsemble(int,int,int,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate)">ITopologyAwareEnsemblePlacementPolicy</a></code></span></div>
<div class="block">Create an ensemble with parent ensemble.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ensembleSize</code> - ensemble size</dd>
<dd><code>writeQuorumSize</code> - write quorum size</dd>
<dd><code>ackQuorumSize</code> - ack quorum size</dd>
<dd><code>excludeBookies</code> - exclude bookies</dd>
<dd><code>parentEnsemble</code> - parent ensemble</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>list of bookies forming the ensemble</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></code></dd>
</dl>
</li>
</ul>
<a id="selectFromNetworkLocation(java.lang.String,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>selectFromNetworkLocation</h4>
<pre class="methodSignature">public&nbsp;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&nbsp;selectFromNetworkLocation&#8203;(java.lang.String&nbsp;networkLoc,
java.util.Set&lt;<a href="../net/Node.html" title="interface in org.apache.bookkeeper.net">Node</a>&gt;&nbsp;excludeBookies,
<a href="ITopologyAwareEnsemblePlacementPolicy.Predicate.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Predicate</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;predicate,
<a href="ITopologyAwareEnsemblePlacementPolicy.Ensemble.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Ensemble</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;ensemble,
boolean&nbsp;fallbackToRandom)
throws <a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="ITopologyAwareEnsemblePlacementPolicy.html#selectFromNetworkLocation(java.lang.String,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,boolean)">ITopologyAwareEnsemblePlacementPolicy</a></code></span></div>
<div class="block">Select a node from a given network location.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>networkLoc</code> - network location</dd>
<dd><code>excludeBookies</code> - exclude bookies set</dd>
<dd><code>predicate</code> - predicate to apply</dd>
<dd><code>ensemble</code> - ensemble</dd>
<dd><code>fallbackToRandom</code> - fallbackToRandom</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the selected bookie.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></code></dd>
</dl>
</li>
</ul>
<a id="selectFromNetworkLocation(java.util.Set,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>selectFromNetworkLocation</h4>
<pre class="methodSignature">public&nbsp;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&nbsp;selectFromNetworkLocation&#8203;(java.util.Set&lt;java.lang.String&gt;&nbsp;excludeRacks,
java.util.Set&lt;<a href="../net/Node.html" title="interface in org.apache.bookkeeper.net">Node</a>&gt;&nbsp;excludeBookies,
<a href="ITopologyAwareEnsemblePlacementPolicy.Predicate.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Predicate</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;predicate,
<a href="ITopologyAwareEnsemblePlacementPolicy.Ensemble.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Ensemble</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;ensemble,
boolean&nbsp;fallbackToRandom)
throws <a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="ITopologyAwareEnsemblePlacementPolicy.html#selectFromNetworkLocation(java.util.Set,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,boolean)">ITopologyAwareEnsemblePlacementPolicy</a></code></span></div>
<div class="block">Select a node from cluster excluding excludeBookies and bookie nodes of
excludeRacks. If there isn't a BookieNode excluding those racks and
nodes, then if fallbackToRandom is set to true then pick a random node
from cluster just excluding excludeBookies.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></code></dd>
</dl>
</li>
</ul>
<a id="selectFromNetworkLocation(java.lang.String,java.util.Set,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>selectFromNetworkLocation</h4>
<pre class="methodSignature">public&nbsp;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&nbsp;selectFromNetworkLocation&#8203;(java.lang.String&nbsp;networkLoc,
java.util.Set&lt;java.lang.String&gt;&nbsp;excludeRacks,
java.util.Set&lt;<a href="../net/Node.html" title="interface in org.apache.bookkeeper.net">Node</a>&gt;&nbsp;excludeBookies,
<a href="ITopologyAwareEnsemblePlacementPolicy.Predicate.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Predicate</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;predicate,
<a href="ITopologyAwareEnsemblePlacementPolicy.Ensemble.html" title="interface in org.apache.bookkeeper.client">ITopologyAwareEnsemblePlacementPolicy.Ensemble</a>&lt;<a href="../net/BookieNode.html" title="class in org.apache.bookkeeper.net">BookieNode</a>&gt;&nbsp;ensemble,
boolean&nbsp;fallbackToRandom)
throws <a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="ITopologyAwareEnsemblePlacementPolicy.html#selectFromNetworkLocation(java.lang.String,java.util.Set,java.util.Set,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Predicate,org.apache.bookkeeper.client.ITopologyAwareEnsemblePlacementPolicy.Ensemble,boolean)">ITopologyAwareEnsemblePlacementPolicy</a></code></span></div>
<div class="block">Select a node from networkLoc rack excluding excludeBookies. If there
isn't any node in 'networkLoc', then it will try to get a node from
cluster excluding excludeRacks and excludeBookies. If fallbackToRandom is
set to true then it will get a random bookie from cluster excluding
excludeBookies if it couldn't find a bookie</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></code></dd>
</dl>
</li>
</ul>
<a id="uninitalize()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>uninitalize</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;uninitalize()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="EnsemblePlacementPolicy.html#uninitalize()">EnsemblePlacementPolicy</a></code></span></div>
<div class="block">Uninitialize the policy.</div>
</li>
</ul>
<a id="newEnsemble(int,int,int,java.util.Map,java.util.Set)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>newEnsemble</h4>
<pre class="methodSignature">public&nbsp;<a href="EnsemblePlacementPolicy.PlacementResult.html" title="class in org.apache.bookkeeper.client">EnsemblePlacementPolicy.PlacementResult</a>&lt;java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&gt;&nbsp;newEnsemble&#8203;(int&nbsp;ensembleSize,
int&nbsp;writeQuorumSize,
int&nbsp;ackQuorumSize,
java.util.Map&lt;java.lang.String,&#8203;byte[]&gt;&nbsp;customMetadata,
java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;excludeBookies)
throws <a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="EnsemblePlacementPolicy.html#newEnsemble(int,int,int,java.util.Map,java.util.Set)">EnsemblePlacementPolicy</a></code></span></div>
<div class="block">Choose <i>numBookies</i> bookies for ensemble. If the count is more than the number of available
nodes, <a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client"><code>BKException.BKNotEnoughBookiesException</code></a> is thrown.
<p>The implementation should respect to the replace settings. The size of the returned bookie list
should be equal to the provide <code>ensembleSize</code>.
<p><code>customMetadata</code> is the same user defined data that user provides
when <a href="BookKeeper.html#createLedger(int,int,int,org.apache.bookkeeper.client.BookKeeper.DigestType,byte%5B%5D,java.util.Map)"><code>BookKeeper.createLedger(int, int, int, BookKeeper.DigestType, byte[], Map)</code></a>.
<p>If 'enforceMinNumRacksPerWriteQuorum' config is enabled then the bookies belonging to default
faultzone (rack) will be excluded while selecting bookies.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ensembleSize</code> - Ensemble Size</dd>
<dd><code>writeQuorumSize</code> - Write Quorum Size</dd>
<dd><code>ackQuorumSize</code> - the value of ackQuorumSize (added since 4.5)</dd>
<dd><code>customMetadata</code> - the value of customMetadata. it is the same user defined metadata that user
provides in <a href="BookKeeper.html#createLedger(int,int,int,org.apache.bookkeeper.client.BookKeeper.DigestType,byte%5B%5D)"><code>BookKeeper.createLedger(int, int, int, BookKeeper.DigestType, byte[])</code></a></dd>
<dd><code>excludeBookies</code> - Bookies that should not be considered as targets.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a placement result containing list of bookie addresses for the ensemble.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></code> - if not enough bookies available.</dd>
</dl>
</li>
</ul>
<a id="replaceBookie(int,int,int,java.util.Map,java.util.List,org.apache.bookkeeper.net.BookieId,java.util.Set)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>replaceBookie</h4>
<pre class="methodSignature">public&nbsp;<a href="EnsemblePlacementPolicy.PlacementResult.html" title="class in org.apache.bookkeeper.client">EnsemblePlacementPolicy.PlacementResult</a>&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;replaceBookie&#8203;(int&nbsp;ensembleSize,
int&nbsp;writeQuorumSize,
int&nbsp;ackQuorumSize,
java.util.Map&lt;java.lang.String,&#8203;byte[]&gt;&nbsp;customMetadata,
java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;currentEnsemble,
<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&nbsp;bookieToReplace,
java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;excludeBookies)
throws <a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="EnsemblePlacementPolicy.html#replaceBookie(int,int,int,java.util.Map,java.util.List,org.apache.bookkeeper.net.BookieId,java.util.Set)">EnsemblePlacementPolicy</a></code></span></div>
<div class="block">Choose a new bookie to replace <i>bookieToReplace</i>. If no bookie available in the cluster,
<a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client"><code>BKException.BKNotEnoughBookiesException</code></a> is thrown.
<p>If 'enforceMinNumRacksPerWriteQuorum' config is enabled then the bookies belonging to default
faultzone (rack) will be excluded while selecting bookies.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ensembleSize</code> - the value of ensembleSize</dd>
<dd><code>writeQuorumSize</code> - the value of writeQuorumSize</dd>
<dd><code>ackQuorumSize</code> - the value of ackQuorumSize (added since 4.5)</dd>
<dd><code>customMetadata</code> - the value of customMetadata. it is the same user defined metadata that user
provides in <a href="BookKeeper.html#createLedger(int,int,int,org.apache.bookkeeper.client.BookKeeper.DigestType,byte%5B%5D)"><code>BookKeeper.createLedger(int, int, int, BookKeeper.DigestType, byte[])</code></a></dd>
<dd><code>currentEnsemble</code> - the value of currentEnsemble</dd>
<dd><code>bookieToReplace</code> - bookie to replace</dd>
<dd><code>excludeBookies</code> - bookies that should not be considered as candidate.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a placement result containing the new bookie address.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="BKException.BKNotEnoughBookiesException.html" title="class in org.apache.bookkeeper.client">BKException.BKNotEnoughBookiesException</a></code></dd>
</dl>
</li>
</ul>
<a id="addDefaultFaultDomainBookies(java.util.Set)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addDefaultFaultDomainBookies</h4>
<pre class="methodSignature">protected&nbsp;java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;addDefaultFaultDomainBookies&#8203;(java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;excludeBookies)</pre>
</li>
</ul>
<a id="registerSlowBookie(org.apache.bookkeeper.net.BookieId,long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerSlowBookie</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;registerSlowBookie&#8203;(<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&nbsp;bookieSocketAddress,
long&nbsp;entryId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="EnsemblePlacementPolicy.html#registerSlowBookie(org.apache.bookkeeper.net.BookieId,long)">EnsemblePlacementPolicy</a></code></span></div>
<div class="block">Register a bookie as slow so that it is tried after available and read-only bookies.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>bookieSocketAddress</code> - Address of bookie host</dd>
<dd><code>entryId</code> - Entry ID that caused a speculative timeout on the bookie.</dd>
</dl>
</li>
</ul>
<a id="reorderReadSequence(java.util.List,org.apache.bookkeeper.client.BookiesHealthInfo,org.apache.bookkeeper.client.DistributionSchedule.WriteSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>reorderReadSequence</h4>
<pre class="methodSignature">public&nbsp;<a href="DistributionSchedule.WriteSet.html" title="interface in org.apache.bookkeeper.client">DistributionSchedule.WriteSet</a>&nbsp;reorderReadSequence&#8203;(java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;ensemble,
<a href="BookiesHealthInfo.html" title="interface in org.apache.bookkeeper.client">BookiesHealthInfo</a>&nbsp;bookiesHealthInfo,
<a href="DistributionSchedule.WriteSet.html" title="interface in org.apache.bookkeeper.client">DistributionSchedule.WriteSet</a>&nbsp;writeSet)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="EnsemblePlacementPolicy.html#reorderReadSequence(java.util.List,org.apache.bookkeeper.client.BookiesHealthInfo,org.apache.bookkeeper.client.DistributionSchedule.WriteSet)">EnsemblePlacementPolicy</a></code></span></div>
<div class="block">Reorder the read sequence of a given write quorum <i>writeSet</i>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="EnsemblePlacementPolicy.html#reorderReadSequence(java.util.List,org.apache.bookkeeper.client.BookiesHealthInfo,org.apache.bookkeeper.client.DistributionSchedule.WriteSet)">reorderReadSequence</a></code>&nbsp;in interface&nbsp;<code><a href="EnsemblePlacementPolicy.html" title="interface in org.apache.bookkeeper.client">EnsemblePlacementPolicy</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="TopologyAwareEnsemblePlacementPolicy.html#reorderReadSequence(java.util.List,org.apache.bookkeeper.client.BookiesHealthInfo,org.apache.bookkeeper.client.DistributionSchedule.WriteSet)">reorderReadSequence</a></code>&nbsp;in class&nbsp;<code><a href="TopologyAwareEnsemblePlacementPolicy.html" title="class in org.apache.bookkeeper.client">TopologyAwareEnsemblePlacementPolicy</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ensemble</code> - Ensemble to read entries.</dd>
<dd><code>bookiesHealthInfo</code> - Health info for bookies</dd>
<dd><code>writeSet</code> - Write quorum to read entries. This will be modified, rather than
allocating a new WriteSet.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The read sequence. This will be the same object as the passed in
writeSet.</dd>
</dl>
</li>
</ul>
<a id="reorderReadLACSequence(java.util.List,org.apache.bookkeeper.client.BookiesHealthInfo,org.apache.bookkeeper.client.DistributionSchedule.WriteSet)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>reorderReadLACSequence</h4>
<pre class="methodSignature">public&nbsp;<a href="DistributionSchedule.WriteSet.html" title="interface in org.apache.bookkeeper.client">DistributionSchedule.WriteSet</a>&nbsp;reorderReadLACSequence&#8203;(java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;ensemble,
<a href="BookiesHealthInfo.html" title="interface in org.apache.bookkeeper.client">BookiesHealthInfo</a>&nbsp;bookiesHealthInfo,
<a href="DistributionSchedule.WriteSet.html" title="interface in org.apache.bookkeeper.client">DistributionSchedule.WriteSet</a>&nbsp;writeSet)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="EnsemblePlacementPolicy.html#reorderReadLACSequence(java.util.List,org.apache.bookkeeper.client.BookiesHealthInfo,org.apache.bookkeeper.client.DistributionSchedule.WriteSet)">EnsemblePlacementPolicy</a></code></span></div>
<div class="block">Reorder the read last add confirmed sequence of a given write quorum <i>writeSet</i>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="EnsemblePlacementPolicy.html#reorderReadLACSequence(java.util.List,org.apache.bookkeeper.client.BookiesHealthInfo,org.apache.bookkeeper.client.DistributionSchedule.WriteSet)">reorderReadLACSequence</a></code>&nbsp;in interface&nbsp;<code><a href="EnsemblePlacementPolicy.html" title="interface in org.apache.bookkeeper.client">EnsemblePlacementPolicy</a></code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="TopologyAwareEnsemblePlacementPolicy.html#reorderReadLACSequence(java.util.List,org.apache.bookkeeper.client.BookiesHealthInfo,org.apache.bookkeeper.client.DistributionSchedule.WriteSet)">reorderReadLACSequence</a></code>&nbsp;in class&nbsp;<code><a href="TopologyAwareEnsemblePlacementPolicy.html" title="class in org.apache.bookkeeper.client">TopologyAwareEnsemblePlacementPolicy</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ensemble</code> - Ensemble to read entries.</dd>
<dd><code>bookiesHealthInfo</code> - Health info for bookies</dd>
<dd><code>writeSet</code> - Write quorum to read entries. This will be modified, rather than
allocating a new WriteSet.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The read sequence. This will be the same object as the passed in
writeSet.</dd>
</dl>
</li>
</ul>
<a id="isEnsembleAdheringToPlacementPolicy(java.util.List,int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isEnsembleAdheringToPlacementPolicy</h4>
<pre class="methodSignature">public&nbsp;<a href="EnsemblePlacementPolicy.PlacementPolicyAdherence.html" title="enum in org.apache.bookkeeper.client">EnsemblePlacementPolicy.PlacementPolicyAdherence</a>&nbsp;isEnsembleAdheringToPlacementPolicy&#8203;(java.util.List&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;ensembleList,
int&nbsp;writeQuorumSize,
int&nbsp;ackQuorumSize)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="EnsemblePlacementPolicy.html#isEnsembleAdheringToPlacementPolicy(java.util.List,int,int)">EnsemblePlacementPolicy</a></code></span></div>
<div class="block">returns AdherenceLevel if the Ensemble is strictly/softly/fails adhering
to placement policy, like in the case of
RackawareEnsemblePlacementPolicy, bookies in the writeset are from
'minNumRacksPerWriteQuorum' number of racks. And in the case of
RegionawareEnsemblePlacementPolicy, check for
minimumRegionsForDurability, reppRegionsToWrite, rack distribution within
a region and other parameters of RegionAwareEnsemblePlacementPolicy. In
ZoneAwareEnsemblePlacementPolicy if bookies in the writeset are from
'desiredNumOfZones' then it is considered as MEETS_STRICT if they are
from 'minNumOfZones' then it is considered as MEETS_SOFT otherwise
considered as FAIL.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ensembleList</code> - list of BookieId of bookies in the ensemble</dd>
<dd><code>writeQuorumSize</code> - writeQuorumSize of the ensemble</dd>
<dd><code>ackQuorumSize</code> - ackQuorumSize of the ensemble</dd>
<dt><span class="returnLabel">Returns:</span></dt>
</dl>
</li>
</ul>
<a id="areAckedBookiesAdheringToPlacementPolicy(java.util.Set,int,int)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>areAckedBookiesAdheringToPlacementPolicy</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;areAckedBookiesAdheringToPlacementPolicy&#8203;(java.util.Set&lt;<a href="../net/BookieId.html" title="class in org.apache.bookkeeper.net">BookieId</a>&gt;&nbsp;ackedBookies,
int&nbsp;writeQuorumSize,
int&nbsp;ackQuorumSize)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="EnsemblePlacementPolicy.html#areAckedBookiesAdheringToPlacementPolicy(java.util.Set,int,int)">EnsemblePlacementPolicy</a></code></span></div>
<div class="block">Returns true if the bookies that have acknowledged a write adhere to the minimum fault domains as defined in the
placement policy in use. Ex: In the case of RackawareEnsemblePlacementPolicy, bookies belong to at least
'minNumRacksPerWriteQuorum' number of racks.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ackedBookies</code> - list of BookieId of bookies that have acknowledged a write.</dd>
<dd><code>writeQuorumSize</code> - writeQuorumSize of the ensemble</dd>
<dd><code>ackQuorumSize</code> - ackQuorumSize of the ensemble</dd>
<dt><span class="returnLabel">Returns:</span></dt>
</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/ZoneawareEnsemblePlacementPolicyImpl.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><a href="#field.detail">Field</a>&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>
<p class="legalCopy"><small>Copyright &#169; 2011&#x2013;2023 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</body>
</html>