blob: caf02154ff20e4480ffa14b26bf422de81cb8072 [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 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Procedure (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)</title>
<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="Procedure (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":6,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":6,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":9,"i25":10,"i26":10,"i27":9,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":9,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":6,"i59":6,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete 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/Procedure.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/hbase/procedure2/OnePhaseProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/Procedure.html" target="_top">Frames</a></li>
<li><a href="Procedure.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><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 name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.hadoop.hbase.procedure2</div>
<h2 title="Class Procedure" class="title">Class Procedure&lt;TEnvironment&gt;</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">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt;</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;TEnvironment&gt;&gt;</dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../../../../org/apache/hadoop/hbase/master/replication/ClaimReplicationQueuesProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ClaimReplicationQueuesProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">FailedProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/locking/LockProcedure.html" title="class in org.apache.hadoop.hbase.master.locking">LockProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">OnePhaseProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a>, <a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/SequentialProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">SequentialProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/ServerRemoteProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">ServerRemoteProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TwoPhaseProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TwoPhaseProcedure</a></dd>
</dl>
<hr>
<br>
<pre>@InterfaceAudience.Private
public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.110">Procedure</a>&lt;TEnvironment&gt;
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;TEnvironment&gt;&gt;</pre>
<div class="block">Base Procedure class responsible for Procedure Metadata; e.g. state, submittedTime, lastUpdate,
stack-indexes, etc.
<p/>
Procedures are run by a <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2"><code>ProcedureExecutor</code></a> instance. They are submitted and then the
ProcedureExecutor keeps calling <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute-TEnvironment-"><code>execute(Object)</code></a> until the Procedure is done. Execute may
be called multiple times in the case of failure or a restart, so code must be idempotent. The
return from an execute call is either: null to indicate we are done; ourself if there is more to
do; or, a set of sub-procedures that need to be run to completion before the framework resumes
our execution.
<p/>
The ProcedureExecutor keeps its notion of Procedure State in the Procedure itself; e.g. it stamps
the Procedure as INITIALIZING, RUNNABLE, SUCCESS, etc. Here are some of the States defined in the
ProcedureState enum from protos:
<ul>
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed--"><code>isFailed()</code></a> A procedure has executed at least once and has failed. The procedure may
or may not have rolled back yet. Any procedure in FAILED state will be eventually moved to
ROLLEDBACK state.</li>
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess--"><code>isSuccess()</code></a> A procedure is completed successfully without exception.</li>
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished--"><code>isFinished()</code></a> As a procedure in FAILED state will be tried forever for rollback, only
condition when scheduler/ executor will drop procedure from further processing is when procedure
state is ROLLEDBACK or isSuccess() returns true. This is a terminal state of the procedure.</li>
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting--"><code>isWaiting()</code></a> - Procedure is in one of the two waiting states
(<code>ProcedureProtos.ProcedureState.WAITING</code>, <code>ProcedureProtos.ProcedureState.WAITING_TIMEOUT</code>).</li>
</ul>
NOTE: These states are of the ProcedureExecutor. Procedure implementations in turn can keep their
own state. This can lead to confusion. Try to keep the two distinct.
<p/>
rollback() is called when the procedure or one of the sub-procedures has failed. The rollback
step is supposed to cleanup the resources created during the execute() step. In case of failure
and restart, rollback() may be called multiple times, so again the code must be idempotent.
<p/>
Procedure can be made respect a locking regime. It has acquire/release methods as well as an
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock--"><code>hasLock()</code></a>. The lock implementation is up to the implementor. If an entity needs to be
locked for the life of a procedure -- not just the calls to execute -- then implementations
should say so with the <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>holdLock(Object)</code></a> method.
<p/>
And since we need to restore the lock when restarting to keep the logic correct(HBASE-20846), the
implementation is a bit tricky so we add some comments hrre about it.
<ul>
<li>Make <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock--"><code>hasLock()</code></a> method final, and add a <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#locked"><code>locked</code></a> field in Procedure to record
whether we have the lock. We will set it to <code>true</code> in
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>doAcquireLock(Object, ProcedureStore)</code></a> and to <code>false</code> in
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doReleaseLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>doReleaseLock(Object, ProcedureStore)</code></a>. The sub classes do not need to manage it any
more.</li>
<li>Also added a locked field in the proto message. When storing, the field will be set according
to the return value of <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock--"><code>hasLock()</code></a>. And when loading, there is a new field in Procedure
called <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#lockedWhenLoading"><code>lockedWhenLoading</code></a>. We will set it to <code>true</code> if the locked field in proto
message is <code>true</code>.</li>
<li>The reason why we can not set the <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#locked"><code>locked</code></a> field directly to <code>true</code> by calling
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>doAcquireLock(Object, ProcedureStore)</code></a> is that, during initialization, most procedures
need to wait until master is initialized. So the solution here is that, we introduced a new
method called <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-"><code>waitInitialized(Object)</code></a> in Procedure, and move the wait master initialized
related code from <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-"><code>acquireLock(Object)</code></a> to this method. And we added a restoreLock method
to Procedure, if <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#lockedWhenLoading"><code>lockedWhenLoading</code></a> is <code>true</code>, we will call the
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-"><code>acquireLock(Object)</code></a> to get the lock, but do not set <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#locked"><code>locked</code></a> to true. And later
when we call <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>doAcquireLock(Object, ProcedureStore)</code></a> and pass the
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-"><code>waitInitialized(Object)</code></a> check, we will test <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#lockedWhenLoading"><code>lockedWhenLoading</code></a>, if it is
<code>true</code>, when we just set the <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#locked"><code>locked</code></a> field to true and return, without actually
calling the <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-"><code>acquireLock(Object)</code></a> method since we have already called it once.</li>
</ul>
<p/>
Procedures can be suspended or put in wait state with a callback that gets executed on
Procedure-specified timeout. See <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout-int-"><code>setTimeout(int)</code></a>}, and
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-"><code>setTimeoutFailure(Object)</code></a>. See TestProcedureEvents and the TestTimeoutEventProcedure
class for an example usage.
</p>
<p/>
There are hooks for collecting metrics on submit of the procedure and on finish. See
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnSubmit-TEnvironment-"><code>updateMetricsOnSubmit(Object)</code></a> and <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnFinish-TEnvironment-long-boolean-"><code>updateMetricsOnFinish(Object, long, boolean)</code></a>.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Class and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#bypass">bypass</a></span></code>
<div class="block">Used for override complete of the procedure without actually doing any logic in the procedure.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenLatch">childrenLatch</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#exception">exception</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#lastUpdate">lastUpdate</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#locked">locked</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#lockedWhenLoading">lockedWhenLoading</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#LOG">LOG</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#NO_PROC_ID">NO_PROC_ID</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#NO_TIMEOUT">NO_TIMEOUT</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#nonceKey">nonceKey</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private <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></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#owner">owner</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#parentProcId">parentProcId</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#persist">persist</a></span></code>
<div class="block">Indicate whether we need to persist the procedure to ProcedureStore after execution.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#procId">procId</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#result">result</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rootProcId">rootProcId</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private int[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#stackIndexes">stackIndexes</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#state">state</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#submittedTime">submittedTime</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#timeout">timeout</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#Procedure--">Procedure</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== 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="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></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></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>protected abstract boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort-TEnvironment-">abort</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">The abort() call is asynchronous and each procedure must decide how to deal
with it, if they want to be abortable.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">acquireLock</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">The user should override this method if they need a lock on an Entity.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex-int-">addStackIndex</a></span>(int&nbsp;index)</code>
<div class="block">Called by the RootProcedureState on procedure execution.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#afterReplay-TEnvironment-">afterReplay</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">Called when the procedure is ready to be added to the queue after
the loading/replay operation.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay-TEnvironment-">beforeReplay</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">Called when the procedure is loaded for replay.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#bypass-TEnvironment-">bypass</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">Set the bypass to true.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#childrenCountDown--">childrenCountDown</a></span>()</code>
<div class="block">Called by the ProcedureExecutor to notify that one of the sub-procedures has completed.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo-org.apache.hadoop.hbase.procedure2.Procedure-">compareTo</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&gt;&nbsp;other)</code>&nbsp;</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup-TEnvironment-">completionCleanup</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">Called when the procedure is marked as completed (success or rollback).</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>protected abstract void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)</code>
<div class="block">Called on store load to allow the user to decode the previously serialized
state.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-">doAcquireLock</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;store)</code>
<div class="block">Internal method called by the ProcedureExecutor that starts the user-level code acquireLock().</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&gt;[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute-TEnvironment-">doExecute</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">Internal method called by the ProcedureExecutor that starts the user-level code execute().</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doReleaseLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-">doReleaseLock</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;store)</code>
<div class="block">Internal method called by the ProcedureExecutor that starts the user-level code releaseLock().</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback-TEnvironment-">doRollback</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">Internal method called by the ProcedureExecutor that starts the user-level code rollback().</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime--">elapsedTime</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>protected abstract <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&gt;[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute-TEnvironment-">execute</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">The main code of the procedure.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>protected int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getChildrenLatch--">getChildrenLatch</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException--">getException</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate--">getLastUpdate</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey--">getNonceKey</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i20" class="altColor">
<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">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner--">getOwner</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId--">getParentProcId</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-TEnvironment-">getProcedureMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">Override this method to provide procedure specific counters for submitted count, failed
count and time histogram.</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId--">getProcId</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>static long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode-long-">getProcIdHashCode</a></span>(long&nbsp;procId)</code>
<div class="block">Get an hashcode for the specified Procedure ID</div>
</td>
</tr>
<tr id="i25" 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">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcName--">getProcName</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code>byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult--">getResult</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code>protected static &lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId-java.util.Map-org.apache.hadoop.hbase.procedure2.Procedure-">getRootProcedureId</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;T&gt;&gt;&nbsp;procedures,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;T&gt;&nbsp;proc)</code>
<div class="block">Helper to lookup the root Procedure ID given a specified procedure.</div>
</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcId--">getRootProcId</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i29" class="rowColor">
<td class="colFirst"><code>protected int[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes--">getStackIndexes</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i30" class="altColor">
<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getState--">getState</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i31" class="rowColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getSubmittedTime--">getSubmittedTime</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i32" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout--">getTimeout</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i33" class="rowColor">
<td class="colFirst"><code>protected long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeoutTimestamp--">getTimeoutTimestamp</a></span>()</code>
<div class="block">Timeout of the next timeout.</div>
</td>
</tr>
<tr id="i34" class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasChildren--">hasChildren</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i35" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException--">hasException</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i36" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock--">hasLock</a></span>()</code>
<div class="block">This is used in conjunction with <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>holdLock(Object)</code></a>.</div>
</td>
</tr>
<tr id="i37" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner--">hasOwner</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i38" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent--">hasParent</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i39" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout--">hasTimeout</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i40" class="altColor">
<td class="colFirst"><code>static boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#haveSameParent-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure-">haveSameParent</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;a,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;b)</code>&nbsp;</td>
</tr>
<tr id="i41" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">holdLock</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">Used to keep the procedure lock even when the procedure is yielding or suspended.</div>
</td>
</tr>
<tr id="i42" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch--">incChildrenLatch</a></span>()</code>
<div class="block">Called by the ProcedureExecutor on procedure-load to restore the latch state</div>
</td>
</tr>
<tr id="i43" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isBypass--">isBypass</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i44" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed--">isFailed</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i45" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished--">isFinished</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i46" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isInitializing--">isInitializing</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i47" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isLockedWhenLoading--">isLockedWhenLoading</a></span>()</code>
<div class="block">Can only be called when restarting, before the procedure actually being executed, as after we
actually call the <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>doAcquireLock(Object, ProcedureStore)</code></a> method, we will reset
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#lockedWhenLoading"><code>lockedWhenLoading</code></a> to false.</div>
</td>
</tr>
<tr id="i48" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isRunnable--">isRunnable</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i49" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess--">isSuccess</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i50" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting--">isWaiting</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i51" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">By default, the procedure framework/executor will try to run procedures start to finish.</div>
</td>
</tr>
<tr id="i52" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#lockedWhenLoading--">lockedWhenLoading</a></span>()</code>
<div class="block">Will only be called when loading procedures from procedure store, where we need to record
whether the procedure has already held a lock.</div>
</td>
</tr>
<tr id="i53" class="rowColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#needPersistence--">needPersistence</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i54" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">releaseLock</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">The user should override this method, and release lock if necessary.</div>
</td>
</tr>
<tr id="i55" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex--">removeStackIndex</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i56" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#resetPersistence--">resetPersistence</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i57" class="rowColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#restoreLock-TEnvironment-">restoreLock</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>&nbsp;</td>
</tr>
<tr id="i58" class="altColor">
<td class="colFirst"><code>protected abstract void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback-TEnvironment-">rollback</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">The code to undo what was done by the execute() code.</div>
</td>
</tr>
<tr id="i59" class="rowColor">
<td class="colFirst"><code>protected abstract void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)</code>
<div class="block">The user-level code of the procedure may have some state to
persist (e.g.</div>
</td>
</tr>
<tr id="i60" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure-java.lang.String-java.lang.String-">setAbortFailure</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;source,
<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;msg)</code>&nbsp;</td>
</tr>
<tr id="i61" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch-int-">setChildrenLatch</a></span>(int&nbsp;numChildren)</code>
<div class="block">Called by the ProcedureExecutor on procedure-load to restore the latch state</div>
</td>
</tr>
<tr id="i62" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">setFailure</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;exception)</code>&nbsp;</td>
</tr>
<tr id="i63" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure-java.lang.String-java.lang.Throwable-">setFailure</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;source,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</code>&nbsp;</td>
</tr>
<tr id="i64" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setLastUpdate-long-">setLastUpdate</a></span>(long&nbsp;lastUpdate)</code>
<div class="block">Called on store load to initialize the Procedure internals after
the creation/deserialization.</div>
</td>
</tr>
<tr id="i65" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey-org.apache.hadoop.hbase.util.NonceKey-">setNonceKey</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</code>
<div class="block">Called by the ProcedureExecutor to set the value to the newly created procedure.</div>
</td>
</tr>
<tr id="i66" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-java.lang.String-">setOwner</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;owner)</code>&nbsp;</td>
</tr>
<tr id="i67" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</code>&nbsp;</td>
</tr>
<tr id="i68" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId-long-">setParentProcId</a></span>(long&nbsp;parentProcId)</code>
<div class="block">Called by the ProcedureExecutor to assign the parent to the newly created procedure.</div>
</td>
</tr>
<tr id="i69" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId-long-">setProcId</a></span>(long&nbsp;procId)</code>
<div class="block">Called by the ProcedureExecutor to assign the ID to the newly created procedure.</div>
</td>
</tr>
<tr id="i70" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult-byte:A-">setResult</a></span>(byte[]&nbsp;result)</code>
<div class="block">The procedure may leave a "result" on completion.</div>
</td>
</tr>
<tr id="i71" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setRootProcId-long-">setRootProcId</a></span>(long&nbsp;rootProcId)</code>&nbsp;</td>
</tr>
<tr id="i72" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes-java.util.List-">setStackIndexes</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;stackIndexes)</code>
<div class="block">Called on store load to initialize the Procedure internals after
the creation/deserialization.</div>
</td>
</tr>
<tr id="i73" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState-">setState</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;state)</code>&nbsp;</td>
</tr>
<tr id="i74" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setSubmittedTime-long-">setSubmittedTime</a></span>(long&nbsp;submittedTime)</code>
<div class="block">Called on store load to initialize the Procedure internals after
the creation/deserialization.</div>
</td>
</tr>
<tr id="i75" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout-int-">setTimeout</a></span>(int&nbsp;timeout)</code>&nbsp;</td>
</tr>
<tr id="i76" class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-">setTimeoutFailure</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">Called by the ProcedureExecutor when the timeout set by setTimeout() is expired.</div>
</td>
</tr>
<tr id="i77" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck-TEnvironment-">shouldWaitClientAck</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">By default, the executor will keep the procedure result around util
the eviction TTL is expired.</div>
</td>
</tr>
<tr id="i78" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#skipPersistence--">skipPersistence</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i79" 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">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString--">toString</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i80" class="altColor">
<td class="colFirst"><code>protected <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></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass--">toStringClass</a></span>()</code>&nbsp;</td>
</tr>
<tr id="i81" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">toStringClassDetails</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;builder)</code>
<div class="block">Extend the toString() information with the procedure details
e.g.</div>
</td>
</tr>
<tr id="i82" class="altColor">
<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">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringDetails--">toStringDetails</a></span>()</code>
<div class="block">Extend the toString() information with more procedure details</div>
</td>
</tr>
<tr id="i83" class="rowColor">
<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringSimpleSB--">toStringSimpleSB</a></span>()</code>
<div class="block">Build the StringBuilder for the simple form of procedure string.</div>
</td>
</tr>
<tr id="i84" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState-java.lang.StringBuilder-">toStringState</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;builder)</code>
<div class="block">Called from <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString--"><code>toString()</code></a> when interpolating <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2"><code>Procedure</code></a> State.</div>
</td>
</tr>
<tr id="i85" class="rowColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#tryRunnable--">tryRunnable</a></span>()</code>
<div class="block">Try to set this procedure into RUNNABLE state.</div>
</td>
</tr>
<tr id="i86" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnFinish-TEnvironment-long-boolean-">updateMetricsOnFinish</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env,
long&nbsp;runtime,
boolean&nbsp;success)</code>
<div class="block">This function will be called just after procedure execution is finished.</div>
</td>
</tr>
<tr id="i87" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnSubmit-TEnvironment-">updateMetricsOnSubmit</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">This function will be called just when procedure is submitted for execution.</div>
</td>
</tr>
<tr id="i88" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp--">updateTimestamp</a></span>()</code>
<div class="block">Called by ProcedureExecutor after each time a procedure step is executed.</div>
</td>
</tr>
<tr id="i89" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-">waitInitialized</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
<div class="block">The <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>doAcquireLock(Object, ProcedureStore)</code></a> will be split into two steps, first, it will
call us to determine whether we need to wait for initialization, second, it will call
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-"><code>acquireLock(Object)</code></a> to actually handle the lock for this procedure.</div>
</td>
</tr>
<tr id="i90" class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted--">wasExecuted</a></span>()</code>&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="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">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">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">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">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">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">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">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">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">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">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">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="LOG">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.111">LOG</a></pre>
</li>
</ul>
<a name="NO_PROC_ID">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>NO_PROC_ID</h4>
<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.112">NO_PROC_ID</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.Procedure.NO_PROC_ID">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="NO_TIMEOUT">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>NO_TIMEOUT</h4>
<pre>protected static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.113">NO_TIMEOUT</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.Procedure.NO_TIMEOUT">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="nonceKey">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nonceKey</h4>
<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.122">nonceKey</a></pre>
</li>
</ul>
<a name="owner">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>owner</h4>
<pre>private&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">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.123">owner</a></pre>
</li>
</ul>
<a name="parentProcId">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>parentProcId</h4>
<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.124">parentProcId</a></pre>
</li>
</ul>
<a name="rootProcId">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>rootProcId</h4>
<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.125">rootProcId</a></pre>
</li>
</ul>
<a name="procId">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>procId</h4>
<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.126">procId</a></pre>
</li>
</ul>
<a name="submittedTime">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>submittedTime</h4>
<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.127">submittedTime</a></pre>
</li>
</ul>
<a name="state">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>state</h4>
<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.130">state</a></pre>
</li>
</ul>
<a name="exception">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>exception</h4>
<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.131">exception</a></pre>
</li>
</ul>
<a name="stackIndexes">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>stackIndexes</h4>
<pre>private&nbsp;int[] <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.132">stackIndexes</a></pre>
</li>
</ul>
<a name="childrenLatch">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>childrenLatch</h4>
<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.133">childrenLatch</a></pre>
</li>
</ul>
<a name="timeout">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>timeout</h4>
<pre>private volatile&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.135">timeout</a></pre>
</li>
</ul>
<a name="lastUpdate">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>lastUpdate</h4>
<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.136">lastUpdate</a></pre>
</li>
</ul>
<a name="result">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>result</h4>
<pre>private volatile&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.138">result</a></pre>
</li>
</ul>
<a name="locked">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>locked</h4>
<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.140">locked</a></pre>
</li>
</ul>
<a name="lockedWhenLoading">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>lockedWhenLoading</h4>
<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.142">lockedWhenLoading</a></pre>
</li>
</ul>
<a name="bypass">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>bypass</h4>
<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.158">bypass</a></pre>
<div class="block">Used for override complete of the procedure without actually doing any logic in the procedure.
If bypass is set to true, when executing it will return null when
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute-TEnvironment-"><code>doExecute(Object)</code></a> is called to finish the procedure and release any locks
it may currently hold. The bypass does cleanup around the Procedure as far as the
Procedure framework is concerned. It does not clean any internal state that the
Procedure's themselves may have set. That is for the Procedures to do themselves
when bypass is called. They should override bypass and do their cleanup in the
overridden bypass method (be sure to call the parent bypass to ensure proper
processing).
<p></p>Bypassing a procedure is not like aborting. Aborting a procedure will trigger
a rollback. And since the <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort-TEnvironment-"><code>abort(Object)</code></a> method is overrideable
Some procedures may have chosen to ignore the aborting.</div>
</li>
</ul>
<a name="persist">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>persist</h4>
<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.172">persist</a></pre>
<div class="block">Indicate whether we need to persist the procedure to ProcedureStore after execution. Default to
true, and the implementation can all <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#skipPersistence--"><code>skipPersistence()</code></a> to let the framework skip the
persistence of the procedure.
<p/>
This is useful when the procedure is in error and you want to retry later. The retry interval
and the number of retries are usually not critical so skip the persistence can save some
resources, and also speed up the restart processing.
<p/>
Notice that this value will be reset to true every time before execution. And when rolling back
we do not test this value.</div>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="Procedure--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>Procedure</h4>
<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.110">Procedure</a>()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="isBypass--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isBypass</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.174">isBypass</a>()</pre>
</li>
</ul>
<a name="bypass-java.lang.Object-">
<!-- -->
</a><a name="bypass-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>bypass</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.187">bypass</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">Set the bypass to true.
Only called in <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#bypassProcedure-long-long-boolean-boolean-"><code>ProcedureExecutor.bypassProcedure(long, long, boolean, boolean)</code></a> for now.
DO NOT use this method alone, since we can't just bypass one single procedure. We need to
bypass its ancestor too. If your Procedure has set state, it needs to undo it in here.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>env</code> - Current environment. May be null because of context; e.g. pretty-printing
procedure WALs where there is no 'environment' (and where Procedures that require
an 'environment' won't be run.</dd>
</dl>
</li>
</ul>
<a name="needPersistence--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>needPersistence</h4>
<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.191">needPersistence</a>()</pre>
</li>
</ul>
<a name="resetPersistence--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>resetPersistence</h4>
<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.195">resetPersistence</a>()</pre>
</li>
</ul>
<a name="skipPersistence--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>skipPersistence</h4>
<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.199">skipPersistence</a>()</pre>
</li>
</ul>
<a name="execute-java.lang.Object-">
<!-- -->
</a><a name="execute-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
<pre>protected abstract&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.216">execute</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
throws <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block">The main code of the procedure. It must be idempotent since execute()
may be called multiple times in case of machine failure in the middle
of the execution.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>env</code> - the environment passed to the ProcedureExecutor</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a set of sub-procedures to run or ourselves if there is more work to do or null if the
procedure is done.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a></code> - the procedure will be added back to the queue and retried
later.</dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code> - the procedure will be added back to the queue and retried later.</dd>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></code> - Signal to the executor that Procedure has suspended itself
and has set itself up waiting for an external event to wake it back up again.</dd>
</dl>
</li>
</ul>
<a name="rollback-java.lang.Object-">
<!-- -->
</a><a name="rollback-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>rollback</h4>
<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.230">rollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block">The code to undo what was done by the execute() code.
It is called when the procedure or one of the sub-procedures failed or an
abort was requested. It should cleanup all the resources created by
the execute() call. The implementation must be idempotent since rollback()
may be called multiple time in case of machine failure in the middle
of the execution.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>env</code> - the environment passed to the ProcedureExecutor</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - temporary failure, the rollback will retry later</dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code> - the procedure will be added back to the queue and retried later</dd>
</dl>
</li>
</ul>
<a name="abort-java.lang.Object-">
<!-- -->
</a><a name="abort-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>abort</h4>
<pre>protected abstract&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.244">abort</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">The abort() call is asynchronous and each procedure must decide how to deal
with it, if they want to be abortable. The simplest implementation
is to have an AtomicBoolean set in the abort() method and then the execute()
will check if the abort flag is set or not.
abort() may be called multiple times from the client, so the implementation
must be idempotent.
<p>NOTE: abort() is not like Thread.interrupt(). It is just a notification
that allows the procedure implementor abort.</div>
</li>
</ul>
<a name="serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.252">serializeStateData</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">The user-level code of the procedure may have some state to
persist (e.g. input arguments or current position in the processing state) to
be able to resume on failure.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>serializer</code> - stores the serializable state</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
</dl>
</li>
</ul>
<a name="deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>deserializeStateData</h4>
<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.260">deserializeStateData</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Called on store load to allow the user to decode the previously serialized
state.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>serializer</code> - contains the serialized state</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
</dl>
</li>
</ul>
<a name="waitInitialized-java.lang.Object-">
<!-- -->
</a><a name="waitInitialized-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>waitInitialized</h4>
<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.275">waitInitialized</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">The <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>doAcquireLock(Object, ProcedureStore)</code></a> will be split into two steps, first, it will
call us to determine whether we need to wait for initialization, second, it will call
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-"><code>acquireLock(Object)</code></a> to actually handle the lock for this procedure.
<p/>
This is because that when master restarts, we need to restore the lock state for all the
procedures to not break the semantic if <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>holdLock(Object)</code></a> is true. But the
<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2"><code>ProcedureExecutor</code></a> will be started before the master finish initialization(as it is part
of the initialization!), so we need to split the code into two steps, and when restore, we just
restore the lock part and ignore the waitInitialized part. Otherwise there will be dead lock.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true means we need to wait until the environment has been initialized, otherwise true.</dd>
</dl>
</li>
</ul>
<a name="acquireLock-java.lang.Object-">
<!-- -->
</a><a name="acquireLock-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>acquireLock</h4>
<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.303">acquireLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">The user should override this method if they need a lock on an Entity. A lock can be anything,
and it is up to the implementor. The Procedure Framework will call this method just before it
invokes <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute-TEnvironment-"><code>execute(Object)</code></a>. It calls <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-"><code>releaseLock(Object)</code></a> after the call to
execute.
<p/>
If you need to hold the lock for the life of the Procedure -- i.e. you do not want any other
Procedure interfering while this Procedure is running, see <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>holdLock(Object)</code></a>.
<p/>
Example: in our Master we can execute request in parallel for different tables. We can create
t1 and create t2 and these creates can be executed at the same time. Anything else on t1/t2 is
queued waiting that specific table create to happen.
<p/>
There are 3 LockState:
<ul>
<li>LOCK_ACQUIRED should be returned when the proc has the lock and the proc is ready to
execute.</li>
<li>LOCK_YIELD_WAIT should be returned when the proc has not the lock and the framework should
take care of readding the procedure back to the runnable set for retry</li>
<li>LOCK_EVENT_WAIT should be returned when the proc has not the lock and someone will take
care of readding the procedure back to the runnable set when the lock is available.</li>
</ul></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the lock state as described above.</dd>
</dl>
</li>
</ul>
<a name="releaseLock-java.lang.Object-">
<!-- -->
</a><a name="releaseLock-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>releaseLock</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.310">releaseLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">The user should override this method, and release lock if necessary.</div>
</li>
</ul>
<a name="holdLock-java.lang.Object-">
<!-- -->
</a><a name="holdLock-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>holdLock</h4>
<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.318">holdLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">Used to keep the procedure lock even when the procedure is yielding or suspended.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the procedure should hold on the lock until completionCleanup()</dd>
</dl>
</li>
</ul>
<a name="hasLock--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>hasLock</h4>
<pre>public final&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.330">hasLock</a>()</pre>
<div class="block">This is used in conjunction with <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>holdLock(Object)</code></a>. If <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>holdLock(Object)</code></a>
returns true, the procedure executor will call acquireLock() once and thereafter
not call <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-"><code>releaseLock(Object)</code></a> until the Procedure is done (Normally, it calls
release/acquire around each invocation of <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute-TEnvironment-"><code>execute(Object)</code></a>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the procedure has the lock, false otherwise.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>holdLock(Object)</code></a></dd>
</dl>
</li>
</ul>
<a name="beforeReplay-java.lang.Object-">
<!-- -->
</a><a name="beforeReplay-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>beforeReplay</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.340">beforeReplay</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">Called when the procedure is loaded for replay.
The procedure implementor may use this method to perform some quick
operation before replay.
e.g. failing the procedure if the state on replay may be unknown.</div>
</li>
</ul>
<a name="afterReplay-java.lang.Object-">
<!-- -->
</a><a name="afterReplay-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>afterReplay</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.348">afterReplay</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">Called when the procedure is ready to be added to the queue after
the loading/replay operation.</div>
</li>
</ul>
<a name="completionCleanup-java.lang.Object-">
<!-- -->
</a><a name="completionCleanup-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>completionCleanup</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.358">completionCleanup</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">Called when the procedure is marked as completed (success or rollback).
The procedure implementor may use this method to cleanup in-memory states.
This operation will not be retried on failure. If a procedure took a lock,
it will have been released when this method runs.</div>
</li>
</ul>
<a name="isYieldAfterExecutionStep-java.lang.Object-">
<!-- -->
</a><a name="isYieldAfterExecutionStep-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isYieldAfterExecutionStep</h4>
<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.370">isYieldAfterExecutionStep</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">By default, the procedure framework/executor will try to run procedures start to finish.
Return true to make the executor yield between each execution step to
give other procedures a chance to run.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>env</code> - the environment passed to the ProcedureExecutor</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Return true if the executor should yield on completion of an execution step.
Defaults to return false.</dd>
</dl>
</li>
</ul>
<a name="shouldWaitClientAck-java.lang.Object-">
<!-- -->
</a><a name="shouldWaitClientAck-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>shouldWaitClientAck</h4>
<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.383">shouldWaitClientAck</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">By default, the executor will keep the procedure result around util
the eviction TTL is expired. The client can cut down the waiting time
by requesting that the result is removed from the executor.
In case of system started procedure, we can force the executor to auto-ack.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>env</code> - the environment passed to the ProcedureExecutor</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the executor should wait the client ack for the result.
Defaults to return true.</dd>
</dl>
</li>
</ul>
<a name="getProcedureMetrics-java.lang.Object-">
<!-- -->
</a><a name="getProcedureMetrics-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getProcedureMetrics</h4>
<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.393">getProcedureMetrics</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">Override this method to provide procedure specific counters for submitted count, failed
count and time histogram.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>env</code> - The environment passed to the procedure executor</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Container object for procedure related metric</dd>
</dl>
</li>
</ul>
<a name="updateMetricsOnSubmit-java.lang.Object-">
<!-- -->
</a><a name="updateMetricsOnSubmit-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>updateMetricsOnSubmit</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.403">updateMetricsOnSubmit</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">This function will be called just when procedure is submitted for execution. Override this
method to update the metrics at the beginning of the procedure. The default implementation
updates submitted counter if <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-TEnvironment-"><code>getProcedureMetrics(Object)</code></a> returns non-null
<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2"><code>ProcedureMetrics</code></a>.</div>
</li>
</ul>
<a name="updateMetricsOnFinish-java.lang.Object-long-boolean-">
<!-- -->
</a><a name="updateMetricsOnFinish-TEnvironment-long-boolean-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>updateMetricsOnFinish</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.429">updateMetricsOnFinish</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env,
long&nbsp;runtime,
boolean&nbsp;success)</pre>
<div class="block">This function will be called just after procedure execution is finished. Override this method
to update metrics at the end of the procedure. If <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-TEnvironment-"><code>getProcedureMetrics(Object)</code></a> returns
non-null <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2"><code>ProcedureMetrics</code></a>, the default implementation adds runtime of a procedure to a
time histogram for successfully completed procedures. Increments failed counter for failed
procedures.
<p/>
TODO: As any of the sub-procedures on failure rolls back all procedures in the stack, including
successfully finished siblings, this function may get called twice in certain cases for certain
procedures. Explore further if this can be called once.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>env</code> - The environment passed to the procedure executor</dd>
<dd><code>runtime</code> - Runtime of the procedure in milliseconds</dd>
<dd><code>success</code> - true if procedure is completed successfully</dd>
</dl>
</li>
</ul>
<a name="toString--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>toString</h4>
<pre>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">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.449">toString</a>()</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">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">Object</a></code></dd>
</dl>
</li>
</ul>
<a name="toStringSimpleSB--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>toStringSimpleSB</h4>
<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.458">toStringSimpleSB</a>()</pre>
<div class="block">Build the StringBuilder for the simple form of procedure string.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the StringBuilder</dd>
</dl>
</li>
</ul>
<a name="toStringDetails--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>toStringDetails</h4>
<pre>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">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.500">toStringDetails</a>()</pre>
<div class="block">Extend the toString() information with more procedure details</div>
</li>
</ul>
<a name="toStringClass--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>toStringClass</h4>
<pre>protected&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">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.519">toStringClass</a>()</pre>
</li>
</ul>
<a name="toStringState-java.lang.StringBuilder-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>toStringState</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.530">toStringState</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;builder)</pre>
<div class="block">Called from <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString--"><code>toString()</code></a> when interpolating <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2"><code>Procedure</code></a> State. Allows decorating
generic Procedure State with Procedure particulars.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>builder</code> - Append current <code>ProcedureProtos.ProcedureState</code></dd>
</dl>
</li>
</ul>
<a name="toStringClassDetails-java.lang.StringBuilder-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>toStringClassDetails</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.539">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;builder)</pre>
<div class="block">Extend the toString() information with the procedure details
e.g. className and parameters</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>builder</code> - the string builder to use to append the proc specific information</dd>
</dl>
</li>
</ul>
<a name="getProcId--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getProcId</h4>
<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.550">getProcId</a>()</pre>
</li>
</ul>
<a name="hasParent--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>hasParent</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.554">hasParent</a>()</pre>
</li>
</ul>
<a name="getParentProcId--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getParentProcId</h4>
<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.558">getParentProcId</a>()</pre>
</li>
</ul>
<a name="getRootProcId--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRootProcId</h4>
<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.562">getRootProcId</a>()</pre>
</li>
</ul>
<a name="getProcName--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getProcName</h4>
<pre>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">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.566">getProcName</a>()</pre>
</li>
</ul>
<a name="getNonceKey--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getNonceKey</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.570">getNonceKey</a>()</pre>
</li>
</ul>
<a name="getSubmittedTime--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSubmittedTime</h4>
<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.574">getSubmittedTime</a>()</pre>
</li>
</ul>
<a name="getOwner--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOwner</h4>
<pre>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">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.578">getOwner</a>()</pre>
</li>
</ul>
<a name="hasOwner--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>hasOwner</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.582">hasOwner</a>()</pre>
</li>
</ul>
<a name="setProcId-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setProcId</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.589">setProcId</a>(long&nbsp;procId)</pre>
<div class="block">Called by the ProcedureExecutor to assign the ID to the newly created procedure.</div>
</li>
</ul>
<a name="setParentProcId-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setParentProcId</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.598">setParentProcId</a>(long&nbsp;parentProcId)</pre>
<div class="block">Called by the ProcedureExecutor to assign the parent to the newly created procedure.</div>
</li>
</ul>
<a name="setRootProcId-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setRootProcId</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.602">setRootProcId</a>(long&nbsp;rootProcId)</pre>
</li>
</ul>
<a name="setNonceKey-org.apache.hadoop.hbase.util.NonceKey-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setNonceKey</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.609">setNonceKey</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</pre>
<div class="block">Called by the ProcedureExecutor to set the value to the newly created procedure.</div>
</li>
</ul>
<a name="setOwner-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setOwner</h4>
<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.613">setOwner</a>(<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;owner)</pre>
</li>
</ul>
<a name="setOwner-org.apache.hadoop.hbase.security.User-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setOwner</h4>
<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.617">setOwner</a>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;owner)</pre>
</li>
</ul>
<a name="setSubmittedTime-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setSubmittedTime</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.626">setSubmittedTime</a>(long&nbsp;submittedTime)</pre>
<div class="block">Called on store load to initialize the Procedure internals after
the creation/deserialization.</div>
</li>
</ul>
<a name="setTimeout-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setTimeout</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.636">setTimeout</a>(int&nbsp;timeout)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>timeout</code> - timeout interval in msec</dd>
</dl>
</li>
</ul>
<a name="hasTimeout--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>hasTimeout</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.640">hasTimeout</a>()</pre>
</li>
</ul>
<a name="getTimeout--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTimeout</h4>
<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.647">getTimeout</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the timeout in msec</dd>
</dl>
</li>
</ul>
<a name="setLastUpdate-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setLastUpdate</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.655">setLastUpdate</a>(long&nbsp;lastUpdate)</pre>
<div class="block">Called on store load to initialize the Procedure internals after
the creation/deserialization.</div>
</li>
</ul>
<a name="updateTimestamp--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>updateTimestamp</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.662">updateTimestamp</a>()</pre>
<div class="block">Called by ProcedureExecutor after each time a procedure step is executed.</div>
</li>
</ul>
<a name="getLastUpdate--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getLastUpdate</h4>
<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.666">getLastUpdate</a>()</pre>
</li>
</ul>
<a name="getTimeoutTimestamp--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTimeoutTimestamp</h4>
<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.676">getTimeoutTimestamp</a>()</pre>
<div class="block">Timeout of the next timeout.
Called by the ProcedureExecutor if the procedure has timeout set and
the procedure is in the waiting queue.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the timestamp of the next timeout.</dd>
</dl>
</li>
</ul>
<a name="elapsedTime--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>elapsedTime</h4>
<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.686">elapsedTime</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the time elapsed between the last update and the start time of the procedure.</dd>
</dl>
</li>
</ul>
<a name="getResult--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getResult</h4>
<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.693">getResult</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the serialized result if any, otherwise null</dd>
</dl>
</li>
</ul>
<a name="setResult-byte:A-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setResult</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.701">setResult</a>(byte[]&nbsp;result)</pre>
<div class="block">The procedure may leave a "result" on completion.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>result</code> - the serialized result that will be passed to the client</dd>
</dl>
</li>
</ul>
<a name="lockedWhenLoading--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>lockedWhenLoading</h4>
<pre>final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.710">lockedWhenLoading</a>()</pre>
<div class="block">Will only be called when loading procedures from procedure store, where we need to record
whether the procedure has already held a lock. Later we will call
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#restoreLock-TEnvironment-"><code>restoreLock(Object)</code></a> to actually acquire the lock.</div>
</li>
</ul>
<a name="isLockedWhenLoading--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isLockedWhenLoading</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.722">isLockedWhenLoading</a>()</pre>
<div class="block">Can only be called when restarting, before the procedure actually being executed, as after we
actually call the <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>doAcquireLock(Object, ProcedureStore)</code></a> method, we will reset
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#lockedWhenLoading"><code>lockedWhenLoading</code></a> to false.
<p/>
Now it is only used in the ProcedureScheduler to determine whether we should put a Procedure in
front of a queue.</div>
</li>
</ul>
<a name="isRunnable--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isRunnable</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.738">isRunnable</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the procedure is in a RUNNABLE state.</dd>
</dl>
</li>
</ul>
<a name="isInitializing--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isInitializing</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.742">isInitializing</a>()</pre>
</li>
</ul>
<a name="isFailed--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isFailed</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.749">isFailed</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the procedure has failed. It may or may not have rolled back.</dd>
</dl>
</li>
</ul>
<a name="isSuccess--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isSuccess</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.756">isSuccess</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the procedure is finished successfully.</dd>
</dl>
</li>
</ul>
<a name="isFinished--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isFinished</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.764">isFinished</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the procedure is finished. The Procedure may be completed successfully or
rolledback.</dd>
</dl>
</li>
</ul>
<a name="isWaiting--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isWaiting</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.771">isWaiting</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the procedure is waiting for a child to finish or for an external event.</dd>
</dl>
</li>
</ul>
<a name="setState-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setState</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.782">setState</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;state)</pre>
</li>
</ul>
<a name="getState--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.787">getState</a>()</pre>
</li>
</ul>
<a name="setFailure-java.lang.String-java.lang.Throwable-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setFailure</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.791">setFailure</a>(<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;source,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
</li>
</ul>
<a name="setFailure-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setFailure</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.795">setFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;exception)</pre>
</li>
</ul>
<a name="setAbortFailure-java.lang.String-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setAbortFailure</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.802">setAbortFailure</a>(<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;source,
<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;msg)</pre>
</li>
</ul>
<a name="setTimeoutFailure-java.lang.Object-">
<!-- -->
</a><a name="setTimeoutFailure-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setTimeoutFailure</h4>
<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.818">setTimeoutFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
<div class="block">Called by the ProcedureExecutor when the timeout set by setTimeout() is expired.
<p/>
Another usage for this method is to implement retrying. A procedure can set the state to
<code>WAITING_TIMEOUT</code> by calling <code>setState</code> method, and throw a
<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2"><code>ProcedureSuspendedException</code></a> to halt the execution of the procedure, and do not forget a
call <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout-int-"><code>setTimeout(int)</code></a> method to set the timeout. And you should also override this
method to wake up the procedure, and also return false to tell the ProcedureExecutor that the
timeout event has been handled.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true to let the framework handle the timeout as abort, false in case the procedure
handled the timeout itself.</dd>
</dl>
</li>
</ul>
<a name="hasException--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>hasException</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.828">hasException</a>()</pre>
</li>
</ul>
<a name="getException--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getException</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.832">getException</a>()</pre>
</li>
</ul>
<a name="setChildrenLatch-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setChildrenLatch</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.839">setChildrenLatch</a>(int&nbsp;numChildren)</pre>
<div class="block">Called by the ProcedureExecutor on procedure-load to restore the latch state</div>
</li>
</ul>
<a name="incChildrenLatch--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>incChildrenLatch</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.850">incChildrenLatch</a>()</pre>
<div class="block">Called by the ProcedureExecutor on procedure-load to restore the latch state</div>
</li>
</ul>
<a name="childrenCountDown--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>childrenCountDown</h4>
<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.861">childrenCountDown</a>()</pre>
<div class="block">Called by the ProcedureExecutor to notify that one of the sub-procedures has completed.</div>
</li>
</ul>
<a name="tryRunnable--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>tryRunnable</h4>
<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.875">tryRunnable</a>()</pre>
<div class="block">Try to set this procedure into RUNNABLE state.
Succeeds if all subprocedures/children are done.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True if we were able to move procedure to RUNNABLE state.</dd>
</dl>
</li>
</ul>
<a name="hasChildren--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>hasChildren</h4>
<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.885">hasChildren</a>()</pre>
</li>
</ul>
<a name="getChildrenLatch--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getChildrenLatch</h4>
<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.889">getChildrenLatch</a>()</pre>
</li>
</ul>
<a name="addStackIndex-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addStackIndex</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.897">addStackIndex</a>(int&nbsp;index)</pre>
<div class="block">Called by the RootProcedureState on procedure execution.
Each procedure store its stack-index positions.</div>
</li>
</ul>
<a name="removeStackIndex--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeStackIndex</h4>
<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.907">removeStackIndex</a>()</pre>
</li>
</ul>
<a name="setStackIndexes-java.util.List-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setStackIndexes</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.921">setStackIndexes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;stackIndexes)</pre>
<div class="block">Called on store load to initialize the Procedure internals after
the creation/deserialization.</div>
</li>
</ul>
<a name="wasExecuted--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>wasExecuted</h4>
<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.928">wasExecuted</a>()</pre>
</li>
</ul>
<a name="getStackIndexes--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getStackIndexes</h4>
<pre>protected&nbsp;int[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.932">getStackIndexes</a>()</pre>
</li>
</ul>
<a name="doExecute-java.lang.Object-">
<!-- -->
</a><a name="doExecute-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>doExecute</h4>
<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.945">doExecute</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
throws <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block">Internal method called by the ProcedureExecutor that starts the user-level code execute().</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></code> - This is used when procedure wants to halt processing and
skip out without changing states or releasing any locks held.</dd>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a></code></dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code></dd>
</dl>
</li>
</ul>
<a name="doRollback-java.lang.Object-">
<!-- -->
</a><a name="doRollback-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>doRollback</h4>
<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.962">doRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block">Internal method called by the ProcedureExecutor that starts the user-level code rollback().</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code></dd>
</dl>
</li>
</ul>
<a name="restoreLock-java.lang.Object-">
<!-- -->
</a><a name="restoreLock-TEnvironment-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>restoreLock</h4>
<pre>final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.976">restoreLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
</li>
</ul>
<a name="doAcquireLock-java.lang.Object-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-">
<!-- -->
</a><a name="doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>doAcquireLock</h4>
<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.1006">doAcquireLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;store)</pre>
<div class="block">Internal method called by the ProcedureExecutor that starts the user-level code acquireLock().</div>
</li>
</ul>
<a name="doReleaseLock-java.lang.Object-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-">
<!-- -->
</a><a name="doReleaseLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>doReleaseLock</h4>
<pre>final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.1035">doReleaseLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;store)</pre>
<div class="block">Internal method called by the ProcedureExecutor that starts the user-level code releaseLock().</div>
</li>
</ul>
<a name="compareTo-org.apache.hadoop.hbase.procedure2.Procedure-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>compareTo</h4>
<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.1050">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&gt;&nbsp;other)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true#compareTo-T-" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&gt;&gt;</code></dd>
</dl>
</li>
</ul>
<a name="getProcIdHashCode-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getProcIdHashCode</h4>
<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.1062">getProcIdHashCode</a>(long&nbsp;procId)</pre>
<div class="block">Get an hashcode for the specified Procedure ID</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the hashcode for the specified procId</dd>
</dl>
</li>
</ul>
<a name="getRootProcedureId-java.util.Map-org.apache.hadoop.hbase.procedure2.Procedure-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRootProcedureId</h4>
<pre>protected static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.1075">getRootProcedureId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;T&gt;&gt;&nbsp;procedures,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;T&gt;&nbsp;proc)</pre>
<div class="block">Helper to lookup the root Procedure ID given a specified procedure.</div>
</li>
</ul>
<a name="haveSameParent-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>haveSameParent</h4>
<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.1091">haveSameParent</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;a,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;b)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>a</code> - the first procedure to be compared.</dd>
<dd><code>b</code> - the second procedure to be compared.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the two procedures have the same parent</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/Procedure.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/hbase/procedure2/OnePhaseProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/Procedure.html" target="_top">Frames</a></li>
<li><a href="Procedure.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><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 name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2021 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>