blob: 5d74498fed932f6e3eb9d6f4b1d20f0998c2a2fe [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_292) on Tue Jun 15 06:01:48 GMT 2021 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ActiveStandbyElector.ActiveStandbyElectorCallback (Apache Hadoop Common 3.3.1 API)</title>
<meta name="date" content="2021-06-15">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ActiveStandbyElector.ActiveStandbyElectorCallback (Apache Hadoop Common 3.3.1 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ActiveStandbyElector.ActiveStandbyElectorCallback.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">
<li><a href="../../../../org/apache/hadoop/ha/ActiveStandbyElector.ActiveNotFoundException.html" title="class in org.apache.hadoop.ha"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/apache/hadoop/ha/BadFencingConfigurationException.html" title="class in org.apache.hadoop.ha"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/hadoop/ha/ActiveStandbyElector.ActiveStandbyElectorCallback.html" target="_top">Frames</a></li>
<li><a href="ActiveStandbyElector.ActiveStandbyElectorCallback.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></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>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&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>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.hadoop.ha</div>
<h2 title="Interface ActiveStandbyElector.ActiveStandbyElectorCallback" class="title">Interface ActiveStandbyElector.ActiveStandbyElectorCallback</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>Enclosing class:</dt>
<dd>org.apache.hadoop.ha.ActiveStandbyElector</dd>
</dl>
<hr>
<br>
<pre>public static interface <span class="typeNameLabel">ActiveStandbyElector.ActiveStandbyElectorCallback</span></pre>
<div class="block">Callback interface to interact with the ActiveStandbyElector object. <br>
The application will be notified with a callback only on state changes
(i.e. there will never be successive calls to becomeActive without an
intermediate call to enterNeutralMode). <br>
The callbacks will be running on Zookeeper client library threads. The
application should return from these callbacks quickly so as not to impede
Zookeeper client library performance and notifications. The app will
typically remember the state change and return from the callback. It will
then proceed with implementing actions around that state change. It is
possible to be called back again while these actions are in flight and the
app should handle this scenario.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<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></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/ha/ActiveStandbyElector.ActiveStandbyElectorCallback.html#becomeActive--">becomeActive</a></span>()</code>
<div class="block">This method is called when the app becomes the active leader.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/ha/ActiveStandbyElector.ActiveStandbyElectorCallback.html#becomeStandby--">becomeStandby</a></span>()</code>
<div class="block">This method is called when the app becomes a standby</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/ha/ActiveStandbyElector.ActiveStandbyElectorCallback.html#enterNeutralMode--">enterNeutralMode</a></span>()</code>
<div class="block">If the elector gets disconnected from Zookeeper and does not know about
the lock state, then it will notify the service via the enterNeutralMode
interface.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/ha/ActiveStandbyElector.ActiveStandbyElectorCallback.html#fenceOldActive-byte:A-">fenceOldActive</a></span>(byte[]&nbsp;oldActiveData)</code>
<div class="block">If an old active has failed, rather than exited gracefully, then
the new active may need to take some fencing actions against it
before proceeding with failover.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/ha/ActiveStandbyElector.ActiveStandbyElectorCallback.html#notifyFatalError-java.lang.String-">notifyFatalError</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;errorMessage)</code>
<div class="block">If there is any fatal error (e.g.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="becomeActive--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>becomeActive</h4>
<pre>void&nbsp;becomeActive()
throws <a href="../../../../org/apache/hadoop/ha/ServiceFailedException.html" title="class in org.apache.hadoop.ha">ServiceFailedException</a></pre>
<div class="block">This method is called when the app becomes the active leader.
If the service fails to become active, it should throw
ServiceFailedException. This will cause the elector to
sleep for a short period, then re-join the election.
Callback implementations are expected to manage their own
timeouts (e.g. when making an RPC to a remote node).</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../org/apache/hadoop/ha/ServiceFailedException.html" title="class in org.apache.hadoop.ha">ServiceFailedException</a></code></dd>
</dl>
</li>
</ul>
<a name="becomeStandby--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>becomeStandby</h4>
<pre>void&nbsp;becomeStandby()</pre>
<div class="block">This method is called when the app becomes a standby</div>
</li>
</ul>
<a name="enterNeutralMode--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>enterNeutralMode</h4>
<pre>void&nbsp;enterNeutralMode()</pre>
<div class="block">If the elector gets disconnected from Zookeeper and does not know about
the lock state, then it will notify the service via the enterNeutralMode
interface. The service may choose to ignore this or stop doing state
changing operations. Upon reconnection, the elector verifies the leader
status and calls back on the becomeActive and becomeStandby app
interfaces. <br>
Zookeeper disconnects can happen due to network issues or loss of
Zookeeper quorum. Thus enterNeutralMode can be used to guard against
split-brain issues. In such situations it might be prudent to call
becomeStandby too. However, such state change operations might be
expensive and enterNeutralMode can help guard against doing that for
transient issues.</div>
</li>
</ul>
<a name="notifyFatalError-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>notifyFatalError</h4>
<pre>void&nbsp;notifyFatalError(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;errorMessage)</pre>
<div class="block">If there is any fatal error (e.g. wrong ACL's, unexpected Zookeeper
errors or Zookeeper persistent unavailability) then notifyFatalError is
called to notify the app about it.</div>
</li>
</ul>
<a name="fenceOldActive-byte:A-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>fenceOldActive</h4>
<pre>void&nbsp;fenceOldActive(byte[]&nbsp;oldActiveData)</pre>
<div class="block">If an old active has failed, rather than exited gracefully, then
the new active may need to take some fencing actions against it
before proceeding with failover.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>oldActiveData</code> - the application data provided by the prior active</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ActiveStandbyElector.ActiveStandbyElectorCallback.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">
<li><a href="../../../../org/apache/hadoop/ha/ActiveStandbyElector.ActiveNotFoundException.html" title="class in org.apache.hadoop.ha"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/apache/hadoop/ha/BadFencingConfigurationException.html" title="class in org.apache.hadoop.ha"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/hadoop/ha/ActiveStandbyElector.ActiveStandbyElectorCallback.html" target="_top">Frames</a></li>
<li><a href="ActiveStandbyElector.ActiveStandbyElectorCallback.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.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>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&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>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2008&#x2013;2021 <a href="https://www.apache.org">Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>