You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2018/10/22 14:53:39 UTC
[01/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Repository: hbase-site
Updated Branches:
refs/heads/asf-site 39b82c864 -> 6b8b907fe
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html
index 0c87f49..e276e13 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html
@@ -518,91 +518,96 @@
<span class="sourceLineNo">510</span> // Sometimes there are other procedures still executing (including asynchronously spawned by<a name="line.510"></a>
<span class="sourceLineNo">511</span> // procId) and due to KillAndToggleBeforeStoreUpdate flag ProcedureExecutor is stopped before<a name="line.511"></a>
<span class="sourceLineNo">512</span> // store update. Let all pending procedures finish normally.<a name="line.512"></a>
-<span class="sourceLineNo">513</span> if (!procExec.isRunning()) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> LOG.warn("ProcedureExecutor not running, may have been stopped by pending procedure due to"<a name="line.514"></a>
-<span class="sourceLineNo">515</span> + " KillAndToggleBeforeStoreUpdate flag.");<a name="line.515"></a>
-<span class="sourceLineNo">516</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.516"></a>
-<span class="sourceLineNo">517</span> restartMasterProcedureExecutor(procExec);<a name="line.517"></a>
-<span class="sourceLineNo">518</span> ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.518"></a>
-<span class="sourceLineNo">519</span> }<a name="line.519"></a>
-<span class="sourceLineNo">520</span> }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span> assertEquals(true, procExec.isRunning());<a name="line.522"></a>
-<span class="sourceLineNo">523</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.523"></a>
-<span class="sourceLineNo">524</span> }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span> /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span> * Execute the procedure up to "lastStep" and then the ProcedureExecutor<a name="line.527"></a>
-<span class="sourceLineNo">528</span> * is restarted and an abort() is injected.<a name="line.528"></a>
-<span class="sourceLineNo">529</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.529"></a>
-<span class="sourceLineNo">530</span> * At the end of this call the procedure should be finished and rolledback.<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * This method assert on the procedure being terminated with an AbortException.<a name="line.531"></a>
-<span class="sourceLineNo">532</span> */<a name="line.532"></a>
-<span class="sourceLineNo">533</span> public static void testRollbackRetriableFailure(<a name="line.533"></a>
-<span class="sourceLineNo">534</span> final ProcedureExecutor<MasterProcedureEnv> procExec, final long procId,<a name="line.534"></a>
-<span class="sourceLineNo">535</span> final int lastStep) throws Exception {<a name="line.535"></a>
-<span class="sourceLineNo">536</span> // Execute up to last step<a name="line.536"></a>
-<span class="sourceLineNo">537</span> testRecoveryAndDoubleExecution(procExec, procId, lastStep, false);<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span> // execute the rollback<a name="line.539"></a>
-<span class="sourceLineNo">540</span> testRestartWithAbort(procExec, procId);<a name="line.540"></a>
-<span class="sourceLineNo">541</span><a name="line.541"></a>
-<span class="sourceLineNo">542</span> assertEquals(true, procExec.isRunning());<a name="line.542"></a>
-<span class="sourceLineNo">543</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.543"></a>
-<span class="sourceLineNo">544</span> }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span> /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span> * Restart the ProcedureExecutor and inject an abort to the specified procedure.<a name="line.547"></a>
-<span class="sourceLineNo">548</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.548"></a>
-<span class="sourceLineNo">549</span> * At the end of this call the procedure should be finished and rolledback, if abort is implemnted<a name="line.549"></a>
-<span class="sourceLineNo">550</span> */<a name="line.550"></a>
-<span class="sourceLineNo">551</span> public static void testRestartWithAbort(ProcedureExecutor<MasterProcedureEnv> procExec,<a name="line.551"></a>
-<span class="sourceLineNo">552</span> long procId) throws Exception {<a name="line.552"></a>
-<span class="sourceLineNo">553</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.553"></a>
-<span class="sourceLineNo">554</span> InjectAbortOnLoadListener abortListener = new InjectAbortOnLoadListener(procExec);<a name="line.554"></a>
-<span class="sourceLineNo">555</span> abortListener.addProcId(procId);<a name="line.555"></a>
-<span class="sourceLineNo">556</span> procExec.registerListener(abortListener);<a name="line.556"></a>
-<span class="sourceLineNo">557</span> try {<a name="line.557"></a>
-<span class="sourceLineNo">558</span> ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId);<a name="line.558"></a>
-<span class="sourceLineNo">559</span> LOG.info("Restart and rollback procId=" + procId);<a name="line.559"></a>
-<span class="sourceLineNo">560</span> restartMasterProcedureExecutor(procExec);<a name="line.560"></a>
-<span class="sourceLineNo">561</span> ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.561"></a>
-<span class="sourceLineNo">562</span> } finally {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> assertTrue(procExec.unregisterListener(abortListener));<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span> }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span> public static class InjectAbortOnLoadListener<a name="line.567"></a>
-<span class="sourceLineNo">568</span> implements ProcedureExecutor.ProcedureExecutorListener {<a name="line.568"></a>
-<span class="sourceLineNo">569</span> private final ProcedureExecutor<MasterProcedureEnv> procExec;<a name="line.569"></a>
-<span class="sourceLineNo">570</span> private TreeSet<Long> procsToAbort = null;<a name="line.570"></a>
+<span class="sourceLineNo">513</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.513"></a>
+<span class="sourceLineNo">514</span> // check 3 times to confirm that the procedure executor has not been killed<a name="line.514"></a>
+<span class="sourceLineNo">515</span> for (int i = 0; i < 3; i++) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> if (!procExec.isRunning()) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span> LOG.warn("ProcedureExecutor not running, may have been stopped by pending procedure due" +<a name="line.517"></a>
+<span class="sourceLineNo">518</span> " to KillAndToggleBeforeStoreUpdate flag.");<a name="line.518"></a>
+<span class="sourceLineNo">519</span> restartMasterProcedureExecutor(procExec);<a name="line.519"></a>
+<span class="sourceLineNo">520</span> break;<a name="line.520"></a>
+<span class="sourceLineNo">521</span> }<a name="line.521"></a>
+<span class="sourceLineNo">522</span> Thread.sleep(1000);<a name="line.522"></a>
+<span class="sourceLineNo">523</span> }<a name="line.523"></a>
+<span class="sourceLineNo">524</span> ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.524"></a>
+<span class="sourceLineNo">525</span> }<a name="line.525"></a>
+<span class="sourceLineNo">526</span><a name="line.526"></a>
+<span class="sourceLineNo">527</span> assertEquals(true, procExec.isRunning());<a name="line.527"></a>
+<span class="sourceLineNo">528</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span> /**<a name="line.531"></a>
+<span class="sourceLineNo">532</span> * Execute the procedure up to "lastStep" and then the ProcedureExecutor<a name="line.532"></a>
+<span class="sourceLineNo">533</span> * is restarted and an abort() is injected.<a name="line.533"></a>
+<span class="sourceLineNo">534</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.534"></a>
+<span class="sourceLineNo">535</span> * At the end of this call the procedure should be finished and rolledback.<a name="line.535"></a>
+<span class="sourceLineNo">536</span> * This method assert on the procedure being terminated with an AbortException.<a name="line.536"></a>
+<span class="sourceLineNo">537</span> */<a name="line.537"></a>
+<span class="sourceLineNo">538</span> public static void testRollbackRetriableFailure(<a name="line.538"></a>
+<span class="sourceLineNo">539</span> final ProcedureExecutor<MasterProcedureEnv> procExec, final long procId,<a name="line.539"></a>
+<span class="sourceLineNo">540</span> final int lastStep) throws Exception {<a name="line.540"></a>
+<span class="sourceLineNo">541</span> // Execute up to last step<a name="line.541"></a>
+<span class="sourceLineNo">542</span> testRecoveryAndDoubleExecution(procExec, procId, lastStep, false);<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span> // execute the rollback<a name="line.544"></a>
+<span class="sourceLineNo">545</span> testRestartWithAbort(procExec, procId);<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span> assertEquals(true, procExec.isRunning());<a name="line.547"></a>
+<span class="sourceLineNo">548</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.548"></a>
+<span class="sourceLineNo">549</span> }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span> /**<a name="line.551"></a>
+<span class="sourceLineNo">552</span> * Restart the ProcedureExecutor and inject an abort to the specified procedure.<a name="line.552"></a>
+<span class="sourceLineNo">553</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.553"></a>
+<span class="sourceLineNo">554</span> * At the end of this call the procedure should be finished and rolledback, if abort is implemnted<a name="line.554"></a>
+<span class="sourceLineNo">555</span> */<a name="line.555"></a>
+<span class="sourceLineNo">556</span> public static void testRestartWithAbort(ProcedureExecutor<MasterProcedureEnv> procExec,<a name="line.556"></a>
+<span class="sourceLineNo">557</span> long procId) throws Exception {<a name="line.557"></a>
+<span class="sourceLineNo">558</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.558"></a>
+<span class="sourceLineNo">559</span> InjectAbortOnLoadListener abortListener = new InjectAbortOnLoadListener(procExec);<a name="line.559"></a>
+<span class="sourceLineNo">560</span> abortListener.addProcId(procId);<a name="line.560"></a>
+<span class="sourceLineNo">561</span> procExec.registerListener(abortListener);<a name="line.561"></a>
+<span class="sourceLineNo">562</span> try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span> ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId);<a name="line.563"></a>
+<span class="sourceLineNo">564</span> LOG.info("Restart and rollback procId=" + procId);<a name="line.564"></a>
+<span class="sourceLineNo">565</span> restartMasterProcedureExecutor(procExec);<a name="line.565"></a>
+<span class="sourceLineNo">566</span> ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.566"></a>
+<span class="sourceLineNo">567</span> } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span> assertTrue(procExec.unregisterListener(abortListener));<a name="line.568"></a>
+<span class="sourceLineNo">569</span> }<a name="line.569"></a>
+<span class="sourceLineNo">570</span> }<a name="line.570"></a>
<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span> public InjectAbortOnLoadListener(final ProcedureExecutor<MasterProcedureEnv> procExec) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span> this.procExec = procExec;<a name="line.573"></a>
-<span class="sourceLineNo">574</span> }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span> public void addProcId(long procId) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span> if (procsToAbort == null) {<a name="line.577"></a>
-<span class="sourceLineNo">578</span> procsToAbort = new TreeSet<>();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> }<a name="line.579"></a>
-<span class="sourceLineNo">580</span> procsToAbort.add(procId);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> @Override<a name="line.583"></a>
-<span class="sourceLineNo">584</span> public void procedureLoaded(long procId) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> if (procsToAbort != null && !procsToAbort.contains(procId)) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span> return;<a name="line.586"></a>
-<span class="sourceLineNo">587</span> }<a name="line.587"></a>
-<span class="sourceLineNo">588</span> procExec.abort(procId);<a name="line.588"></a>
-<span class="sourceLineNo">589</span> }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span> @Override<a name="line.591"></a>
-<span class="sourceLineNo">592</span> public void procedureAdded(long procId) { /* no-op */ }<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span> @Override<a name="line.594"></a>
-<span class="sourceLineNo">595</span> public void procedureFinished(long procId) { /* no-op */ }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span>}<a name="line.597"></a>
+<span class="sourceLineNo">572</span> public static class InjectAbortOnLoadListener<a name="line.572"></a>
+<span class="sourceLineNo">573</span> implements ProcedureExecutor.ProcedureExecutorListener {<a name="line.573"></a>
+<span class="sourceLineNo">574</span> private final ProcedureExecutor<MasterProcedureEnv> procExec;<a name="line.574"></a>
+<span class="sourceLineNo">575</span> private TreeSet<Long> procsToAbort = null;<a name="line.575"></a>
+<span class="sourceLineNo">576</span><a name="line.576"></a>
+<span class="sourceLineNo">577</span> public InjectAbortOnLoadListener(final ProcedureExecutor<MasterProcedureEnv> procExec) {<a name="line.577"></a>
+<span class="sourceLineNo">578</span> this.procExec = procExec;<a name="line.578"></a>
+<span class="sourceLineNo">579</span> }<a name="line.579"></a>
+<span class="sourceLineNo">580</span><a name="line.580"></a>
+<span class="sourceLineNo">581</span> public void addProcId(long procId) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span> if (procsToAbort == null) {<a name="line.582"></a>
+<span class="sourceLineNo">583</span> procsToAbort = new TreeSet<>();<a name="line.583"></a>
+<span class="sourceLineNo">584</span> }<a name="line.584"></a>
+<span class="sourceLineNo">585</span> procsToAbort.add(procId);<a name="line.585"></a>
+<span class="sourceLineNo">586</span> }<a name="line.586"></a>
+<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">588</span> @Override<a name="line.588"></a>
+<span class="sourceLineNo">589</span> public void procedureLoaded(long procId) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> if (procsToAbort != null && !procsToAbort.contains(procId)) {<a name="line.590"></a>
+<span class="sourceLineNo">591</span> return;<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span> procExec.abort(procId);<a name="line.593"></a>
+<span class="sourceLineNo">594</span> }<a name="line.594"></a>
+<span class="sourceLineNo">595</span><a name="line.595"></a>
+<span class="sourceLineNo">596</span> @Override<a name="line.596"></a>
+<span class="sourceLineNo">597</span> public void procedureAdded(long procId) { /* no-op */ }<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span> @Override<a name="line.599"></a>
+<span class="sourceLineNo">600</span> public void procedureFinished(long procId) { /* no-op */ }<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span>}<a name="line.602"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.StepHook.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.StepHook.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.StepHook.html
index 0c87f49..e276e13 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.StepHook.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.StepHook.html
@@ -518,91 +518,96 @@
<span class="sourceLineNo">510</span> // Sometimes there are other procedures still executing (including asynchronously spawned by<a name="line.510"></a>
<span class="sourceLineNo">511</span> // procId) and due to KillAndToggleBeforeStoreUpdate flag ProcedureExecutor is stopped before<a name="line.511"></a>
<span class="sourceLineNo">512</span> // store update. Let all pending procedures finish normally.<a name="line.512"></a>
-<span class="sourceLineNo">513</span> if (!procExec.isRunning()) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> LOG.warn("ProcedureExecutor not running, may have been stopped by pending procedure due to"<a name="line.514"></a>
-<span class="sourceLineNo">515</span> + " KillAndToggleBeforeStoreUpdate flag.");<a name="line.515"></a>
-<span class="sourceLineNo">516</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.516"></a>
-<span class="sourceLineNo">517</span> restartMasterProcedureExecutor(procExec);<a name="line.517"></a>
-<span class="sourceLineNo">518</span> ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.518"></a>
-<span class="sourceLineNo">519</span> }<a name="line.519"></a>
-<span class="sourceLineNo">520</span> }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span> assertEquals(true, procExec.isRunning());<a name="line.522"></a>
-<span class="sourceLineNo">523</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.523"></a>
-<span class="sourceLineNo">524</span> }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span> /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span> * Execute the procedure up to "lastStep" and then the ProcedureExecutor<a name="line.527"></a>
-<span class="sourceLineNo">528</span> * is restarted and an abort() is injected.<a name="line.528"></a>
-<span class="sourceLineNo">529</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.529"></a>
-<span class="sourceLineNo">530</span> * At the end of this call the procedure should be finished and rolledback.<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * This method assert on the procedure being terminated with an AbortException.<a name="line.531"></a>
-<span class="sourceLineNo">532</span> */<a name="line.532"></a>
-<span class="sourceLineNo">533</span> public static void testRollbackRetriableFailure(<a name="line.533"></a>
-<span class="sourceLineNo">534</span> final ProcedureExecutor<MasterProcedureEnv> procExec, final long procId,<a name="line.534"></a>
-<span class="sourceLineNo">535</span> final int lastStep) throws Exception {<a name="line.535"></a>
-<span class="sourceLineNo">536</span> // Execute up to last step<a name="line.536"></a>
-<span class="sourceLineNo">537</span> testRecoveryAndDoubleExecution(procExec, procId, lastStep, false);<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span> // execute the rollback<a name="line.539"></a>
-<span class="sourceLineNo">540</span> testRestartWithAbort(procExec, procId);<a name="line.540"></a>
-<span class="sourceLineNo">541</span><a name="line.541"></a>
-<span class="sourceLineNo">542</span> assertEquals(true, procExec.isRunning());<a name="line.542"></a>
-<span class="sourceLineNo">543</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.543"></a>
-<span class="sourceLineNo">544</span> }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span> /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span> * Restart the ProcedureExecutor and inject an abort to the specified procedure.<a name="line.547"></a>
-<span class="sourceLineNo">548</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.548"></a>
-<span class="sourceLineNo">549</span> * At the end of this call the procedure should be finished and rolledback, if abort is implemnted<a name="line.549"></a>
-<span class="sourceLineNo">550</span> */<a name="line.550"></a>
-<span class="sourceLineNo">551</span> public static void testRestartWithAbort(ProcedureExecutor<MasterProcedureEnv> procExec,<a name="line.551"></a>
-<span class="sourceLineNo">552</span> long procId) throws Exception {<a name="line.552"></a>
-<span class="sourceLineNo">553</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.553"></a>
-<span class="sourceLineNo">554</span> InjectAbortOnLoadListener abortListener = new InjectAbortOnLoadListener(procExec);<a name="line.554"></a>
-<span class="sourceLineNo">555</span> abortListener.addProcId(procId);<a name="line.555"></a>
-<span class="sourceLineNo">556</span> procExec.registerListener(abortListener);<a name="line.556"></a>
-<span class="sourceLineNo">557</span> try {<a name="line.557"></a>
-<span class="sourceLineNo">558</span> ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId);<a name="line.558"></a>
-<span class="sourceLineNo">559</span> LOG.info("Restart and rollback procId=" + procId);<a name="line.559"></a>
-<span class="sourceLineNo">560</span> restartMasterProcedureExecutor(procExec);<a name="line.560"></a>
-<span class="sourceLineNo">561</span> ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.561"></a>
-<span class="sourceLineNo">562</span> } finally {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> assertTrue(procExec.unregisterListener(abortListener));<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span> }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span> public static class InjectAbortOnLoadListener<a name="line.567"></a>
-<span class="sourceLineNo">568</span> implements ProcedureExecutor.ProcedureExecutorListener {<a name="line.568"></a>
-<span class="sourceLineNo">569</span> private final ProcedureExecutor<MasterProcedureEnv> procExec;<a name="line.569"></a>
-<span class="sourceLineNo">570</span> private TreeSet<Long> procsToAbort = null;<a name="line.570"></a>
+<span class="sourceLineNo">513</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.513"></a>
+<span class="sourceLineNo">514</span> // check 3 times to confirm that the procedure executor has not been killed<a name="line.514"></a>
+<span class="sourceLineNo">515</span> for (int i = 0; i < 3; i++) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> if (!procExec.isRunning()) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span> LOG.warn("ProcedureExecutor not running, may have been stopped by pending procedure due" +<a name="line.517"></a>
+<span class="sourceLineNo">518</span> " to KillAndToggleBeforeStoreUpdate flag.");<a name="line.518"></a>
+<span class="sourceLineNo">519</span> restartMasterProcedureExecutor(procExec);<a name="line.519"></a>
+<span class="sourceLineNo">520</span> break;<a name="line.520"></a>
+<span class="sourceLineNo">521</span> }<a name="line.521"></a>
+<span class="sourceLineNo">522</span> Thread.sleep(1000);<a name="line.522"></a>
+<span class="sourceLineNo">523</span> }<a name="line.523"></a>
+<span class="sourceLineNo">524</span> ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.524"></a>
+<span class="sourceLineNo">525</span> }<a name="line.525"></a>
+<span class="sourceLineNo">526</span><a name="line.526"></a>
+<span class="sourceLineNo">527</span> assertEquals(true, procExec.isRunning());<a name="line.527"></a>
+<span class="sourceLineNo">528</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span> /**<a name="line.531"></a>
+<span class="sourceLineNo">532</span> * Execute the procedure up to "lastStep" and then the ProcedureExecutor<a name="line.532"></a>
+<span class="sourceLineNo">533</span> * is restarted and an abort() is injected.<a name="line.533"></a>
+<span class="sourceLineNo">534</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.534"></a>
+<span class="sourceLineNo">535</span> * At the end of this call the procedure should be finished and rolledback.<a name="line.535"></a>
+<span class="sourceLineNo">536</span> * This method assert on the procedure being terminated with an AbortException.<a name="line.536"></a>
+<span class="sourceLineNo">537</span> */<a name="line.537"></a>
+<span class="sourceLineNo">538</span> public static void testRollbackRetriableFailure(<a name="line.538"></a>
+<span class="sourceLineNo">539</span> final ProcedureExecutor<MasterProcedureEnv> procExec, final long procId,<a name="line.539"></a>
+<span class="sourceLineNo">540</span> final int lastStep) throws Exception {<a name="line.540"></a>
+<span class="sourceLineNo">541</span> // Execute up to last step<a name="line.541"></a>
+<span class="sourceLineNo">542</span> testRecoveryAndDoubleExecution(procExec, procId, lastStep, false);<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span> // execute the rollback<a name="line.544"></a>
+<span class="sourceLineNo">545</span> testRestartWithAbort(procExec, procId);<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span> assertEquals(true, procExec.isRunning());<a name="line.547"></a>
+<span class="sourceLineNo">548</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.548"></a>
+<span class="sourceLineNo">549</span> }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span> /**<a name="line.551"></a>
+<span class="sourceLineNo">552</span> * Restart the ProcedureExecutor and inject an abort to the specified procedure.<a name="line.552"></a>
+<span class="sourceLineNo">553</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.553"></a>
+<span class="sourceLineNo">554</span> * At the end of this call the procedure should be finished and rolledback, if abort is implemnted<a name="line.554"></a>
+<span class="sourceLineNo">555</span> */<a name="line.555"></a>
+<span class="sourceLineNo">556</span> public static void testRestartWithAbort(ProcedureExecutor<MasterProcedureEnv> procExec,<a name="line.556"></a>
+<span class="sourceLineNo">557</span> long procId) throws Exception {<a name="line.557"></a>
+<span class="sourceLineNo">558</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.558"></a>
+<span class="sourceLineNo">559</span> InjectAbortOnLoadListener abortListener = new InjectAbortOnLoadListener(procExec);<a name="line.559"></a>
+<span class="sourceLineNo">560</span> abortListener.addProcId(procId);<a name="line.560"></a>
+<span class="sourceLineNo">561</span> procExec.registerListener(abortListener);<a name="line.561"></a>
+<span class="sourceLineNo">562</span> try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span> ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId);<a name="line.563"></a>
+<span class="sourceLineNo">564</span> LOG.info("Restart and rollback procId=" + procId);<a name="line.564"></a>
+<span class="sourceLineNo">565</span> restartMasterProcedureExecutor(procExec);<a name="line.565"></a>
+<span class="sourceLineNo">566</span> ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.566"></a>
+<span class="sourceLineNo">567</span> } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span> assertTrue(procExec.unregisterListener(abortListener));<a name="line.568"></a>
+<span class="sourceLineNo">569</span> }<a name="line.569"></a>
+<span class="sourceLineNo">570</span> }<a name="line.570"></a>
<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span> public InjectAbortOnLoadListener(final ProcedureExecutor<MasterProcedureEnv> procExec) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span> this.procExec = procExec;<a name="line.573"></a>
-<span class="sourceLineNo">574</span> }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span> public void addProcId(long procId) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span> if (procsToAbort == null) {<a name="line.577"></a>
-<span class="sourceLineNo">578</span> procsToAbort = new TreeSet<>();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> }<a name="line.579"></a>
-<span class="sourceLineNo">580</span> procsToAbort.add(procId);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> @Override<a name="line.583"></a>
-<span class="sourceLineNo">584</span> public void procedureLoaded(long procId) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> if (procsToAbort != null && !procsToAbort.contains(procId)) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span> return;<a name="line.586"></a>
-<span class="sourceLineNo">587</span> }<a name="line.587"></a>
-<span class="sourceLineNo">588</span> procExec.abort(procId);<a name="line.588"></a>
-<span class="sourceLineNo">589</span> }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span> @Override<a name="line.591"></a>
-<span class="sourceLineNo">592</span> public void procedureAdded(long procId) { /* no-op */ }<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span> @Override<a name="line.594"></a>
-<span class="sourceLineNo">595</span> public void procedureFinished(long procId) { /* no-op */ }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span>}<a name="line.597"></a>
+<span class="sourceLineNo">572</span> public static class InjectAbortOnLoadListener<a name="line.572"></a>
+<span class="sourceLineNo">573</span> implements ProcedureExecutor.ProcedureExecutorListener {<a name="line.573"></a>
+<span class="sourceLineNo">574</span> private final ProcedureExecutor<MasterProcedureEnv> procExec;<a name="line.574"></a>
+<span class="sourceLineNo">575</span> private TreeSet<Long> procsToAbort = null;<a name="line.575"></a>
+<span class="sourceLineNo">576</span><a name="line.576"></a>
+<span class="sourceLineNo">577</span> public InjectAbortOnLoadListener(final ProcedureExecutor<MasterProcedureEnv> procExec) {<a name="line.577"></a>
+<span class="sourceLineNo">578</span> this.procExec = procExec;<a name="line.578"></a>
+<span class="sourceLineNo">579</span> }<a name="line.579"></a>
+<span class="sourceLineNo">580</span><a name="line.580"></a>
+<span class="sourceLineNo">581</span> public void addProcId(long procId) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span> if (procsToAbort == null) {<a name="line.582"></a>
+<span class="sourceLineNo">583</span> procsToAbort = new TreeSet<>();<a name="line.583"></a>
+<span class="sourceLineNo">584</span> }<a name="line.584"></a>
+<span class="sourceLineNo">585</span> procsToAbort.add(procId);<a name="line.585"></a>
+<span class="sourceLineNo">586</span> }<a name="line.586"></a>
+<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">588</span> @Override<a name="line.588"></a>
+<span class="sourceLineNo">589</span> public void procedureLoaded(long procId) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> if (procsToAbort != null && !procsToAbort.contains(procId)) {<a name="line.590"></a>
+<span class="sourceLineNo">591</span> return;<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span> procExec.abort(procId);<a name="line.593"></a>
+<span class="sourceLineNo">594</span> }<a name="line.594"></a>
+<span class="sourceLineNo">595</span><a name="line.595"></a>
+<span class="sourceLineNo">596</span> @Override<a name="line.596"></a>
+<span class="sourceLineNo">597</span> public void procedureAdded(long procId) { /* no-op */ }<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span> @Override<a name="line.599"></a>
+<span class="sourceLineNo">600</span> public void procedureFinished(long procId) { /* no-op */ }<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span>}<a name="line.602"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html
index 0c87f49..e276e13 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html
@@ -518,91 +518,96 @@
<span class="sourceLineNo">510</span> // Sometimes there are other procedures still executing (including asynchronously spawned by<a name="line.510"></a>
<span class="sourceLineNo">511</span> // procId) and due to KillAndToggleBeforeStoreUpdate flag ProcedureExecutor is stopped before<a name="line.511"></a>
<span class="sourceLineNo">512</span> // store update. Let all pending procedures finish normally.<a name="line.512"></a>
-<span class="sourceLineNo">513</span> if (!procExec.isRunning()) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> LOG.warn("ProcedureExecutor not running, may have been stopped by pending procedure due to"<a name="line.514"></a>
-<span class="sourceLineNo">515</span> + " KillAndToggleBeforeStoreUpdate flag.");<a name="line.515"></a>
-<span class="sourceLineNo">516</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.516"></a>
-<span class="sourceLineNo">517</span> restartMasterProcedureExecutor(procExec);<a name="line.517"></a>
-<span class="sourceLineNo">518</span> ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.518"></a>
-<span class="sourceLineNo">519</span> }<a name="line.519"></a>
-<span class="sourceLineNo">520</span> }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span> assertEquals(true, procExec.isRunning());<a name="line.522"></a>
-<span class="sourceLineNo">523</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.523"></a>
-<span class="sourceLineNo">524</span> }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span> /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span> * Execute the procedure up to "lastStep" and then the ProcedureExecutor<a name="line.527"></a>
-<span class="sourceLineNo">528</span> * is restarted and an abort() is injected.<a name="line.528"></a>
-<span class="sourceLineNo">529</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.529"></a>
-<span class="sourceLineNo">530</span> * At the end of this call the procedure should be finished and rolledback.<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * This method assert on the procedure being terminated with an AbortException.<a name="line.531"></a>
-<span class="sourceLineNo">532</span> */<a name="line.532"></a>
-<span class="sourceLineNo">533</span> public static void testRollbackRetriableFailure(<a name="line.533"></a>
-<span class="sourceLineNo">534</span> final ProcedureExecutor<MasterProcedureEnv> procExec, final long procId,<a name="line.534"></a>
-<span class="sourceLineNo">535</span> final int lastStep) throws Exception {<a name="line.535"></a>
-<span class="sourceLineNo">536</span> // Execute up to last step<a name="line.536"></a>
-<span class="sourceLineNo">537</span> testRecoveryAndDoubleExecution(procExec, procId, lastStep, false);<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span> // execute the rollback<a name="line.539"></a>
-<span class="sourceLineNo">540</span> testRestartWithAbort(procExec, procId);<a name="line.540"></a>
-<span class="sourceLineNo">541</span><a name="line.541"></a>
-<span class="sourceLineNo">542</span> assertEquals(true, procExec.isRunning());<a name="line.542"></a>
-<span class="sourceLineNo">543</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.543"></a>
-<span class="sourceLineNo">544</span> }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span> /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span> * Restart the ProcedureExecutor and inject an abort to the specified procedure.<a name="line.547"></a>
-<span class="sourceLineNo">548</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.548"></a>
-<span class="sourceLineNo">549</span> * At the end of this call the procedure should be finished and rolledback, if abort is implemnted<a name="line.549"></a>
-<span class="sourceLineNo">550</span> */<a name="line.550"></a>
-<span class="sourceLineNo">551</span> public static void testRestartWithAbort(ProcedureExecutor<MasterProcedureEnv> procExec,<a name="line.551"></a>
-<span class="sourceLineNo">552</span> long procId) throws Exception {<a name="line.552"></a>
-<span class="sourceLineNo">553</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.553"></a>
-<span class="sourceLineNo">554</span> InjectAbortOnLoadListener abortListener = new InjectAbortOnLoadListener(procExec);<a name="line.554"></a>
-<span class="sourceLineNo">555</span> abortListener.addProcId(procId);<a name="line.555"></a>
-<span class="sourceLineNo">556</span> procExec.registerListener(abortListener);<a name="line.556"></a>
-<span class="sourceLineNo">557</span> try {<a name="line.557"></a>
-<span class="sourceLineNo">558</span> ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId);<a name="line.558"></a>
-<span class="sourceLineNo">559</span> LOG.info("Restart and rollback procId=" + procId);<a name="line.559"></a>
-<span class="sourceLineNo">560</span> restartMasterProcedureExecutor(procExec);<a name="line.560"></a>
-<span class="sourceLineNo">561</span> ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.561"></a>
-<span class="sourceLineNo">562</span> } finally {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> assertTrue(procExec.unregisterListener(abortListener));<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span> }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span> public static class InjectAbortOnLoadListener<a name="line.567"></a>
-<span class="sourceLineNo">568</span> implements ProcedureExecutor.ProcedureExecutorListener {<a name="line.568"></a>
-<span class="sourceLineNo">569</span> private final ProcedureExecutor<MasterProcedureEnv> procExec;<a name="line.569"></a>
-<span class="sourceLineNo">570</span> private TreeSet<Long> procsToAbort = null;<a name="line.570"></a>
+<span class="sourceLineNo">513</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.513"></a>
+<span class="sourceLineNo">514</span> // check 3 times to confirm that the procedure executor has not been killed<a name="line.514"></a>
+<span class="sourceLineNo">515</span> for (int i = 0; i < 3; i++) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> if (!procExec.isRunning()) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span> LOG.warn("ProcedureExecutor not running, may have been stopped by pending procedure due" +<a name="line.517"></a>
+<span class="sourceLineNo">518</span> " to KillAndToggleBeforeStoreUpdate flag.");<a name="line.518"></a>
+<span class="sourceLineNo">519</span> restartMasterProcedureExecutor(procExec);<a name="line.519"></a>
+<span class="sourceLineNo">520</span> break;<a name="line.520"></a>
+<span class="sourceLineNo">521</span> }<a name="line.521"></a>
+<span class="sourceLineNo">522</span> Thread.sleep(1000);<a name="line.522"></a>
+<span class="sourceLineNo">523</span> }<a name="line.523"></a>
+<span class="sourceLineNo">524</span> ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.524"></a>
+<span class="sourceLineNo">525</span> }<a name="line.525"></a>
+<span class="sourceLineNo">526</span><a name="line.526"></a>
+<span class="sourceLineNo">527</span> assertEquals(true, procExec.isRunning());<a name="line.527"></a>
+<span class="sourceLineNo">528</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span> /**<a name="line.531"></a>
+<span class="sourceLineNo">532</span> * Execute the procedure up to "lastStep" and then the ProcedureExecutor<a name="line.532"></a>
+<span class="sourceLineNo">533</span> * is restarted and an abort() is injected.<a name="line.533"></a>
+<span class="sourceLineNo">534</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.534"></a>
+<span class="sourceLineNo">535</span> * At the end of this call the procedure should be finished and rolledback.<a name="line.535"></a>
+<span class="sourceLineNo">536</span> * This method assert on the procedure being terminated with an AbortException.<a name="line.536"></a>
+<span class="sourceLineNo">537</span> */<a name="line.537"></a>
+<span class="sourceLineNo">538</span> public static void testRollbackRetriableFailure(<a name="line.538"></a>
+<span class="sourceLineNo">539</span> final ProcedureExecutor<MasterProcedureEnv> procExec, final long procId,<a name="line.539"></a>
+<span class="sourceLineNo">540</span> final int lastStep) throws Exception {<a name="line.540"></a>
+<span class="sourceLineNo">541</span> // Execute up to last step<a name="line.541"></a>
+<span class="sourceLineNo">542</span> testRecoveryAndDoubleExecution(procExec, procId, lastStep, false);<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span> // execute the rollback<a name="line.544"></a>
+<span class="sourceLineNo">545</span> testRestartWithAbort(procExec, procId);<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span> assertEquals(true, procExec.isRunning());<a name="line.547"></a>
+<span class="sourceLineNo">548</span> ProcedureTestingUtility.assertIsAbortException(procExec.getResult(procId));<a name="line.548"></a>
+<span class="sourceLineNo">549</span> }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span> /**<a name="line.551"></a>
+<span class="sourceLineNo">552</span> * Restart the ProcedureExecutor and inject an abort to the specified procedure.<a name="line.552"></a>
+<span class="sourceLineNo">553</span> * If the procedure implement abort() this should result in rollback being triggered.<a name="line.553"></a>
+<span class="sourceLineNo">554</span> * At the end of this call the procedure should be finished and rolledback, if abort is implemnted<a name="line.554"></a>
+<span class="sourceLineNo">555</span> */<a name="line.555"></a>
+<span class="sourceLineNo">556</span> public static void testRestartWithAbort(ProcedureExecutor<MasterProcedureEnv> procExec,<a name="line.556"></a>
+<span class="sourceLineNo">557</span> long procId) throws Exception {<a name="line.557"></a>
+<span class="sourceLineNo">558</span> ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.558"></a>
+<span class="sourceLineNo">559</span> InjectAbortOnLoadListener abortListener = new InjectAbortOnLoadListener(procExec);<a name="line.559"></a>
+<span class="sourceLineNo">560</span> abortListener.addProcId(procId);<a name="line.560"></a>
+<span class="sourceLineNo">561</span> procExec.registerListener(abortListener);<a name="line.561"></a>
+<span class="sourceLineNo">562</span> try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span> ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId);<a name="line.563"></a>
+<span class="sourceLineNo">564</span> LOG.info("Restart and rollback procId=" + procId);<a name="line.564"></a>
+<span class="sourceLineNo">565</span> restartMasterProcedureExecutor(procExec);<a name="line.565"></a>
+<span class="sourceLineNo">566</span> ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.566"></a>
+<span class="sourceLineNo">567</span> } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span> assertTrue(procExec.unregisterListener(abortListener));<a name="line.568"></a>
+<span class="sourceLineNo">569</span> }<a name="line.569"></a>
+<span class="sourceLineNo">570</span> }<a name="line.570"></a>
<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span> public InjectAbortOnLoadListener(final ProcedureExecutor<MasterProcedureEnv> procExec) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span> this.procExec = procExec;<a name="line.573"></a>
-<span class="sourceLineNo">574</span> }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span> public void addProcId(long procId) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span> if (procsToAbort == null) {<a name="line.577"></a>
-<span class="sourceLineNo">578</span> procsToAbort = new TreeSet<>();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> }<a name="line.579"></a>
-<span class="sourceLineNo">580</span> procsToAbort.add(procId);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> @Override<a name="line.583"></a>
-<span class="sourceLineNo">584</span> public void procedureLoaded(long procId) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> if (procsToAbort != null && !procsToAbort.contains(procId)) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span> return;<a name="line.586"></a>
-<span class="sourceLineNo">587</span> }<a name="line.587"></a>
-<span class="sourceLineNo">588</span> procExec.abort(procId);<a name="line.588"></a>
-<span class="sourceLineNo">589</span> }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span> @Override<a name="line.591"></a>
-<span class="sourceLineNo">592</span> public void procedureAdded(long procId) { /* no-op */ }<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span> @Override<a name="line.594"></a>
-<span class="sourceLineNo">595</span> public void procedureFinished(long procId) { /* no-op */ }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span>}<a name="line.597"></a>
+<span class="sourceLineNo">572</span> public static class InjectAbortOnLoadListener<a name="line.572"></a>
+<span class="sourceLineNo">573</span> implements ProcedureExecutor.ProcedureExecutorListener {<a name="line.573"></a>
+<span class="sourceLineNo">574</span> private final ProcedureExecutor<MasterProcedureEnv> procExec;<a name="line.574"></a>
+<span class="sourceLineNo">575</span> private TreeSet<Long> procsToAbort = null;<a name="line.575"></a>
+<span class="sourceLineNo">576</span><a name="line.576"></a>
+<span class="sourceLineNo">577</span> public InjectAbortOnLoadListener(final ProcedureExecutor<MasterProcedureEnv> procExec) {<a name="line.577"></a>
+<span class="sourceLineNo">578</span> this.procExec = procExec;<a name="line.578"></a>
+<span class="sourceLineNo">579</span> }<a name="line.579"></a>
+<span class="sourceLineNo">580</span><a name="line.580"></a>
+<span class="sourceLineNo">581</span> public void addProcId(long procId) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span> if (procsToAbort == null) {<a name="line.582"></a>
+<span class="sourceLineNo">583</span> procsToAbort = new TreeSet<>();<a name="line.583"></a>
+<span class="sourceLineNo">584</span> }<a name="line.584"></a>
+<span class="sourceLineNo">585</span> procsToAbort.add(procId);<a name="line.585"></a>
+<span class="sourceLineNo">586</span> }<a name="line.586"></a>
+<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">588</span> @Override<a name="line.588"></a>
+<span class="sourceLineNo">589</span> public void procedureLoaded(long procId) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> if (procsToAbort != null && !procsToAbort.contains(procId)) {<a name="line.590"></a>
+<span class="sourceLineNo">591</span> return;<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span> procExec.abort(procId);<a name="line.593"></a>
+<span class="sourceLineNo">594</span> }<a name="line.594"></a>
+<span class="sourceLineNo">595</span><a name="line.595"></a>
+<span class="sourceLineNo">596</span> @Override<a name="line.596"></a>
+<span class="sourceLineNo">597</span> public void procedureAdded(long procId) { /* no-op */ }<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span> @Override<a name="line.599"></a>
+<span class="sourceLineNo">600</span> public void procedureFinished(long procId) { /* no-op */ }<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span>}<a name="line.602"></a>
[21/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
index 688bd4e..37bf508 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
@@ -589,1651 +589,1649 @@
<span class="sourceLineNo">581</span> LOG.debug("Loading {}", proc);<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span> Long rootProcId = getRootProcedureId(proc);<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (rootProcId == null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.585"></a>
-<span class="sourceLineNo">586</span> scheduler.addBack(proc);<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (proc.hasParent()) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.591"></a>
-<span class="sourceLineNo">592</span> // corrupted procedures are handled later at step 3<a name="line.592"></a>
-<span class="sourceLineNo">593</span> if (parent != null && !proc.isFinished()) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> parent.incChildrenLatch();<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.598"></a>
-<span class="sourceLineNo">599</span> procStack.loadStack(proc);<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span> proc.setRootProcId(rootProcId);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> switch (proc.getState()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> case RUNNABLE:<a name="line.603"></a>
-<span class="sourceLineNo">604</span> runnableList.add(proc);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> break;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> case WAITING:<a name="line.606"></a>
-<span class="sourceLineNo">607</span> waitingList.add(proc);<a name="line.607"></a>
-<span class="sourceLineNo">608</span> break;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> case WAITING_TIMEOUT:<a name="line.609"></a>
-<span class="sourceLineNo">610</span> waitingTimeoutList.add(proc);<a name="line.610"></a>
-<span class="sourceLineNo">611</span> break;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> case FAILED:<a name="line.612"></a>
-<span class="sourceLineNo">613</span> failedList.add(proc);<a name="line.613"></a>
-<span class="sourceLineNo">614</span> break;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> case ROLLEDBACK:<a name="line.615"></a>
-<span class="sourceLineNo">616</span> case INITIALIZING:<a name="line.616"></a>
-<span class="sourceLineNo">617</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> LOG.error(msg);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throw new UnsupportedOperationException(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> default:<a name="line.620"></a>
-<span class="sourceLineNo">621</span> break;<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> // 4. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> waitingList.forEach(proc -> {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> if (!proc.hasChildren()) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> // Normally, WAITING procedures should be waken by its children.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> // But, there is a case that, all the children are successful and before<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // they can wake up their parent procedure, the master was killed.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // are not loaded because of their SUCCESS state.<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // So we need to continue to run this WAITING procedure. But before<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // will throw:<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.637"></a>
-<span class="sourceLineNo">638</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> runnableList.add(proc);<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span> });<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span> // 5. Push the procedures to the timeout executor<a name="line.643"></a>
-<span class="sourceLineNo">644</span> waitingTimeoutList.forEach(proc -> {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> proc.afterReplay(getEnvironment());<a name="line.645"></a>
-<span class="sourceLineNo">646</span> timeoutExecutor.add(proc);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> });<a name="line.647"></a>
-<span class="sourceLineNo">648</span> // 6. restore locks<a name="line.648"></a>
-<span class="sourceLineNo">649</span> restoreLocks();<a name="line.649"></a>
-<span class="sourceLineNo">650</span> // 7. Push the procedure to the scheduler<a name="line.650"></a>
-<span class="sourceLineNo">651</span> failedList.forEach(scheduler::addBack);<a name="line.651"></a>
-<span class="sourceLineNo">652</span> runnableList.forEach(p -> {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> p.afterReplay(getEnvironment());<a name="line.653"></a>
-<span class="sourceLineNo">654</span> if (!p.hasParent()) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.655"></a>
-<span class="sourceLineNo">656</span> }<a name="line.656"></a>
-<span class="sourceLineNo">657</span> scheduler.addBack(p);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> });<a name="line.658"></a>
-<span class="sourceLineNo">659</span> }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span> /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.662"></a>
-<span class="sourceLineNo">663</span> * <p/><a name="line.663"></a>
-<span class="sourceLineNo">664</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.664"></a>
-<span class="sourceLineNo">665</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.665"></a>
-<span class="sourceLineNo">666</span> * pending and in-progress procedures.<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * @param numThreads number of threads available for procedure execution.<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * is found on replay. otherwise false.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> // We have numThreads executor + one timer thread used for timing out<a name="line.672"></a>
-<span class="sourceLineNo">673</span> // procedures and triggering periodic procedures.<a name="line.673"></a>
-<span class="sourceLineNo">674</span> this.corePoolSize = numThreads;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> this.maxPoolSize = 10 * numThreads;<a name="line.675"></a>
-<span class="sourceLineNo">676</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.676"></a>
-<span class="sourceLineNo">677</span> corePoolSize, maxPoolSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.679"></a>
-<span class="sourceLineNo">680</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span> // Create the workers<a name="line.682"></a>
-<span class="sourceLineNo">683</span> workerId.set(0);<a name="line.683"></a>
-<span class="sourceLineNo">684</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.684"></a>
-<span class="sourceLineNo">685</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">584</span> // The orphan procedures will be passed to handleCorrupted, so add an assert here<a name="line.584"></a>
+<span class="sourceLineNo">585</span> assert rootProcId != null;<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (proc.hasParent()) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.588"></a>
+<span class="sourceLineNo">589</span> if (parent != null && !proc.isFinished()) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> parent.incChildrenLatch();<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> procStack.loadStack(proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span> proc.setRootProcId(rootProcId);<a name="line.597"></a>
+<span class="sourceLineNo">598</span> switch (proc.getState()) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> case RUNNABLE:<a name="line.599"></a>
+<span class="sourceLineNo">600</span> runnableList.add(proc);<a name="line.600"></a>
+<span class="sourceLineNo">601</span> break;<a name="line.601"></a>
+<span class="sourceLineNo">602</span> case WAITING:<a name="line.602"></a>
+<span class="sourceLineNo">603</span> waitingList.add(proc);<a name="line.603"></a>
+<span class="sourceLineNo">604</span> break;<a name="line.604"></a>
+<span class="sourceLineNo">605</span> case WAITING_TIMEOUT:<a name="line.605"></a>
+<span class="sourceLineNo">606</span> waitingTimeoutList.add(proc);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> break;<a name="line.607"></a>
+<span class="sourceLineNo">608</span> case FAILED:<a name="line.608"></a>
+<span class="sourceLineNo">609</span> failedList.add(proc);<a name="line.609"></a>
+<span class="sourceLineNo">610</span> break;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> case ROLLEDBACK:<a name="line.611"></a>
+<span class="sourceLineNo">612</span> case INITIALIZING:<a name="line.612"></a>
+<span class="sourceLineNo">613</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.613"></a>
+<span class="sourceLineNo">614</span> LOG.error(msg);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> throw new UnsupportedOperationException(msg);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> default:<a name="line.616"></a>
+<span class="sourceLineNo">617</span> break;<a name="line.617"></a>
+<span class="sourceLineNo">618</span> }<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span> // 3. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.621"></a>
+<span class="sourceLineNo">622</span> waitingList.forEach(proc -> {<a name="line.622"></a>
+<span class="sourceLineNo">623</span> if (!proc.hasChildren()) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // Normally, WAITING procedures should be waken by its children.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // But, there is a case that, all the children are successful and before<a name="line.625"></a>
+<span class="sourceLineNo">626</span> // they can wake up their parent procedure, the master was killed.<a name="line.626"></a>
+<span class="sourceLineNo">627</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.627"></a>
+<span class="sourceLineNo">628</span> // are not loaded because of their SUCCESS state.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // So we need to continue to run this WAITING procedure. But before<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // will throw:<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.633"></a>
+<span class="sourceLineNo">634</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> runnableList.add(proc);<a name="line.635"></a>
+<span class="sourceLineNo">636</span> } else {<a name="line.636"></a>
+<span class="sourceLineNo">637</span> proc.afterReplay(getEnvironment());<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span> });<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span> // 4. Push the procedures to the timeout executor<a name="line.641"></a>
+<span class="sourceLineNo">642</span> waitingTimeoutList.forEach(proc -> {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> proc.afterReplay(getEnvironment());<a name="line.643"></a>
+<span class="sourceLineNo">644</span> timeoutExecutor.add(proc);<a name="line.644"></a>
+<span class="sourceLineNo">645</span> });<a name="line.645"></a>
+<span class="sourceLineNo">646</span> // 5. restore locks<a name="line.646"></a>
+<span class="sourceLineNo">647</span> restoreLocks();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> // 6. Push the procedure to the scheduler<a name="line.648"></a>
+<span class="sourceLineNo">649</span> failedList.forEach(scheduler::addBack);<a name="line.649"></a>
+<span class="sourceLineNo">650</span> runnableList.forEach(p -> {<a name="line.650"></a>
+<span class="sourceLineNo">651</span> p.afterReplay(getEnvironment());<a name="line.651"></a>
+<span class="sourceLineNo">652</span> if (!p.hasParent()) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> scheduler.addBack(p);<a name="line.655"></a>
+<span class="sourceLineNo">656</span> });<a name="line.656"></a>
+<span class="sourceLineNo">657</span> }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span> /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.660"></a>
+<span class="sourceLineNo">661</span> * <p/><a name="line.661"></a>
+<span class="sourceLineNo">662</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.662"></a>
+<span class="sourceLineNo">663</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.663"></a>
+<span class="sourceLineNo">664</span> * pending and in-progress procedures.<a name="line.664"></a>
+<span class="sourceLineNo">665</span> * @param numThreads number of threads available for procedure execution.<a name="line.665"></a>
+<span class="sourceLineNo">666</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.666"></a>
+<span class="sourceLineNo">667</span> * is found on replay. otherwise false.<a name="line.667"></a>
+<span class="sourceLineNo">668</span> */<a name="line.668"></a>
+<span class="sourceLineNo">669</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> // We have numThreads executor + one timer thread used for timing out<a name="line.670"></a>
+<span class="sourceLineNo">671</span> // procedures and triggering periodic procedures.<a name="line.671"></a>
+<span class="sourceLineNo">672</span> this.corePoolSize = numThreads;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> this.maxPoolSize = 10 * numThreads;<a name="line.673"></a>
+<span class="sourceLineNo">674</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.674"></a>
+<span class="sourceLineNo">675</span> corePoolSize, maxPoolSize);<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.677"></a>
+<span class="sourceLineNo">678</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span> // Create the workers<a name="line.680"></a>
+<span class="sourceLineNo">681</span> workerId.set(0);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.682"></a>
+<span class="sourceLineNo">683</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> long st, et;<a name="line.687"></a>
<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> long st, et;<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> // Acquire the store lease.<a name="line.691"></a>
-<span class="sourceLineNo">692</span> st = System.nanoTime();<a name="line.692"></a>
-<span class="sourceLineNo">693</span> store.recoverLease();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> et = System.nanoTime();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.695"></a>
-<span class="sourceLineNo">696</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span> // start the procedure scheduler<a name="line.698"></a>
-<span class="sourceLineNo">699</span> scheduler.start();<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> // TODO: Split in two steps.<a name="line.701"></a>
-<span class="sourceLineNo">702</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.702"></a>
-<span class="sourceLineNo">703</span> // The first one will make sure that we have the latest id,<a name="line.703"></a>
-<span class="sourceLineNo">704</span> // so we can start the threads and accept new procedures.<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // The second step will do the actual load of old procedures.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> st = System.nanoTime();<a name="line.706"></a>
-<span class="sourceLineNo">707</span> load(abortOnCorruption);<a name="line.707"></a>
-<span class="sourceLineNo">708</span> et = System.nanoTime();<a name="line.708"></a>
-<span class="sourceLineNo">709</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.709"></a>
-<span class="sourceLineNo">710</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.710"></a>
-<span class="sourceLineNo">711</span> }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></a>
-<span class="sourceLineNo">713</span> /**<a name="line.713"></a>
-<span class="sourceLineNo">714</span> * Start the workers.<a name="line.714"></a>
-<span class="sourceLineNo">715</span> */<a name="line.715"></a>
-<span class="sourceLineNo">716</span> public void startWorkers() throws IOException {<a name="line.716"></a>
-<span class="sourceLineNo">717</span> if (!running.compareAndSet(false, true)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Already running");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span> // Start the executors. Here we must have the lastProcId set.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.722"></a>
-<span class="sourceLineNo">723</span> timeoutExecutor.start();<a name="line.723"></a>
-<span class="sourceLineNo">724</span> for (WorkerThread worker: workerThreads) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span> worker.start();<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> // Internal chores<a name="line.728"></a>
-<span class="sourceLineNo">729</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span> // Add completed cleaner chore<a name="line.731"></a>
-<span class="sourceLineNo">732</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.732"></a>
-<span class="sourceLineNo">733</span> }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span> public void stop() {<a name="line.735"></a>
-<span class="sourceLineNo">736</span> if (!running.getAndSet(false)) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span> return;<a name="line.737"></a>
-<span class="sourceLineNo">738</span> }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span> LOG.info("Stopping");<a name="line.740"></a>
-<span class="sourceLineNo">741</span> scheduler.stop();<a name="line.741"></a>
-<span class="sourceLineNo">742</span> timeoutExecutor.sendStopSignal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> @VisibleForTesting<a name="line.745"></a>
-<span class="sourceLineNo">746</span> public void join() {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> assert !isRunning() : "expected not running";<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span> // stop the timeout executor<a name="line.749"></a>
-<span class="sourceLineNo">750</span> timeoutExecutor.awaitTermination();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span> // stop the worker threads<a name="line.752"></a>
-<span class="sourceLineNo">753</span> for (WorkerThread worker: workerThreads) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span> worker.awaitTermination();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span> // Destroy the Thread Group for the executors<a name="line.757"></a>
-<span class="sourceLineNo">758</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.758"></a>
-<span class="sourceLineNo">759</span> try {<a name="line.759"></a>
-<span class="sourceLineNo">760</span> threadGroup.destroy();<a name="line.760"></a>
-<span class="sourceLineNo">761</span> } catch (IllegalThreadStateException e) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.threadGroup, e.getMessage());<a name="line.763"></a>
-<span class="sourceLineNo">764</span> // This dumps list of threads on STDOUT.<a name="line.764"></a>
-<span class="sourceLineNo">765</span> this.threadGroup.list();<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span> // reset the in-memory state for testing<a name="line.768"></a>
-<span class="sourceLineNo">769</span> completed.clear();<a name="line.769"></a>
-<span class="sourceLineNo">770</span> rollbackStack.clear();<a name="line.770"></a>
-<span class="sourceLineNo">771</span> procedures.clear();<a name="line.771"></a>
-<span class="sourceLineNo">772</span> nonceKeysToProcIdsMap.clear();<a name="line.772"></a>
-<span class="sourceLineNo">773</span> scheduler.clear();<a name="line.773"></a>
-<span class="sourceLineNo">774</span> lastProcId.set(-1);<a name="line.774"></a>
-<span class="sourceLineNo">775</span> }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span> public void refreshConfiguration(final Configuration conf) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span> this.conf = conf;<a name="line.778"></a>
-<span class="sourceLineNo">779</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.779"></a>
-<span class="sourceLineNo">780</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span> }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">689</span> // Acquire the store lease.<a name="line.689"></a>
+<span class="sourceLineNo">690</span> st = System.nanoTime();<a name="line.690"></a>
+<span class="sourceLineNo">691</span> store.recoverLease();<a name="line.691"></a>
+<span class="sourceLineNo">692</span> et = System.nanoTime();<a name="line.692"></a>
+<span class="sourceLineNo">693</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.693"></a>
+<span class="sourceLineNo">694</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> // start the procedure scheduler<a name="line.696"></a>
+<span class="sourceLineNo">697</span> scheduler.start();<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> // TODO: Split in two steps.<a name="line.699"></a>
+<span class="sourceLineNo">700</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.700"></a>
+<span class="sourceLineNo">701</span> // The first one will make sure that we have the latest id,<a name="line.701"></a>
+<span class="sourceLineNo">702</span> // so we can start the threads and accept new procedures.<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // The second step will do the actual load of old procedures.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> st = System.nanoTime();<a name="line.704"></a>
+<span class="sourceLineNo">705</span> load(abortOnCorruption);<a name="line.705"></a>
+<span class="sourceLineNo">706</span> et = System.nanoTime();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.707"></a>
+<span class="sourceLineNo">708</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.708"></a>
+<span class="sourceLineNo">709</span> }<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span> /**<a name="line.711"></a>
+<span class="sourceLineNo">712</span> * Start the workers.<a name="line.712"></a>
+<span class="sourceLineNo">713</span> */<a name="line.713"></a>
+<span class="sourceLineNo">714</span> public void startWorkers() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span> if (!running.compareAndSet(false, true)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Already running");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> return;<a name="line.717"></a>
+<span class="sourceLineNo">718</span> }<a name="line.718"></a>
+<span class="sourceLineNo">719</span> // Start the executors. Here we must have the lastProcId set.<a name="line.719"></a>
+<span class="sourceLineNo">720</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.720"></a>
+<span class="sourceLineNo">721</span> timeoutExecutor.start();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (WorkerThread worker: workerThreads) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> worker.start();<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span> // Internal chores<a name="line.726"></a>
+<span class="sourceLineNo">727</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.727"></a>
+<span class="sourceLineNo">728</span><a name="line.728"></a>
+<span class="sourceLineNo">729</span> // Add completed cleaner chore<a name="line.729"></a>
+<span class="sourceLineNo">730</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.730"></a>
+<span class="sourceLineNo">731</span> }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span> public void stop() {<a name="line.733"></a>
+<span class="sourceLineNo">734</span> if (!running.getAndSet(false)) {<a name="line.734"></a>
+<span class="sourceLineNo">735</span> return;<a name="line.735"></a>
+<span class="sourceLineNo">736</span> }<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span> LOG.info("Stopping");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> scheduler.stop();<a name="line.739"></a>
+<span class="sourceLineNo">740</span> timeoutExecutor.sendStopSignal();<a name="line.740"></a>
+<span class="sourceLineNo">741</span> }<a name="line.741"></a>
+<span class="sourceLineNo">742</span><a name="line.742"></a>
+<span class="sourceLineNo">743</span> @VisibleForTesting<a name="line.743"></a>
+<span class="sourceLineNo">744</span> public void join() {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> assert !isRunning() : "expected not running";<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span> // stop the timeout executor<a name="line.747"></a>
+<span class="sourceLineNo">748</span> timeoutExecutor.awaitTermination();<a name="line.748"></a>
+<span class="sourceLineNo">749</span><a name="line.749"></a>
+<span class="sourceLineNo">750</span> // stop the worker threads<a name="line.750"></a>
+<span class="sourceLineNo">751</span> for (WorkerThread worker: workerThreads) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span> worker.awaitTermination();<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> // Destroy the Thread Group for the executors<a name="line.755"></a>
+<span class="sourceLineNo">756</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> try {<a name="line.757"></a>
+<span class="sourceLineNo">758</span> threadGroup.destroy();<a name="line.758"></a>
+<span class="sourceLineNo">759</span> } catch (IllegalThreadStateException e) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.threadGroup, e.getMessage());<a name="line.761"></a>
+<span class="sourceLineNo">762</span> // This dumps list of threads on STDOUT.<a name="line.762"></a>
+<span class="sourceLineNo">763</span> this.threadGroup.list();<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span><a name="line.765"></a>
+<span class="sourceLineNo">766</span> // reset the in-memory state for testing<a name="line.766"></a>
+<span class="sourceLineNo">767</span> completed.clear();<a name="line.767"></a>
+<span class="sourceLineNo">768</span> rollbackStack.clear();<a name="line.768"></a>
+<span class="sourceLineNo">769</span> procedures.clear();<a name="line.769"></a>
+<span class="sourceLineNo">770</span> nonceKeysToProcIdsMap.clear();<a name="line.770"></a>
+<span class="sourceLineNo">771</span> scheduler.clear();<a name="line.771"></a>
+<span class="sourceLineNo">772</span> lastProcId.set(-1);<a name="line.772"></a>
+<span class="sourceLineNo">773</span> }<a name="line.773"></a>
+<span class="sourceLineNo">774</span><a name="line.774"></a>
+<span class="sourceLineNo">775</span> public void refreshConfiguration(final Configuration conf) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span> this.conf = conf;<a name="line.776"></a>
+<span class="sourceLineNo">777</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.777"></a>
+<span class="sourceLineNo">778</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.778"></a>
+<span class="sourceLineNo">779</span> }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span> // ==========================================================================<a name="line.781"></a>
+<span class="sourceLineNo">782</span> // Accessors<a name="line.782"></a>
<span class="sourceLineNo">783</span> // ==========================================================================<a name="line.783"></a>
-<span class="sourceLineNo">784</span> // Accessors<a name="line.784"></a>
-<span class="sourceLineNo">785</span> // ==========================================================================<a name="line.785"></a>
-<span class="sourceLineNo">786</span> public boolean isRunning() {<a name="line.786"></a>
-<span class="sourceLineNo">787</span> return running.get();<a name="line.787"></a>
-<span class="sourceLineNo">788</span> }<a name="line.788"></a>
-<span class="sourceLineNo">789</span><a name="line.789"></a>
-<span class="sourceLineNo">790</span> /**<a name="line.790"></a>
-<span class="sourceLineNo">791</span> * @return the current number of worker threads.<a name="line.791"></a>
-<span class="sourceLineNo">792</span> */<a name="line.792"></a>
-<span class="sourceLineNo">793</span> public int getWorkerThreadCount() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span> return workerThreads.size();<a name="line.794"></a>
-<span class="sourceLineNo">795</span> }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span> /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span> * @return the core pool size settings.<a name="line.798"></a>
-<span class="sourceLineNo">799</span> */<a name="line.799"></a>
-<span class="sourceLineNo">800</span> public int getCorePoolSize() {<a name="line.800"></a>
-<span class="sourceLineNo">801</span> return corePoolSize;<a name="line.801"></a>
-<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span> public int getActiveExecutorCount() {<a name="line.804"></a>
-<span class="sourceLineNo">805</span> return activeExecutorCount.get();<a name="line.805"></a>
-<span class="sourceLineNo">806</span> }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span> public TEnvironment getEnvironment() {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.environment;<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> public ProcedureStore getStore() {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> return this.store;<a name="line.813"></a>
-<span class="sourceLineNo">814</span> }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span> ProcedureScheduler getScheduler() {<a name="line.816"></a>
-<span class="sourceLineNo">817</span> return scheduler;<a name="line.817"></a>
-<span class="sourceLineNo">818</span> }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.821"></a>
-<span class="sourceLineNo">822</span> this.scheduler.signalAll();<a name="line.822"></a>
-<span class="sourceLineNo">823</span> }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
+<span class="sourceLineNo">784</span> public boolean isRunning() {<a name="line.784"></a>
+<span class="sourceLineNo">785</span> return running.get();<a name="line.785"></a>
+<span class="sourceLineNo">786</span> }<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span> /**<a name="line.788"></a>
+<span class="sourceLineNo">789</span> * @return the current number of worker threads.<a name="line.789"></a>
+<span class="sourceLineNo">790</span> */<a name="line.790"></a>
+<span class="sourceLineNo">791</span> public int getWorkerThreadCount() {<a name="line.791"></a>
+<span class="sourceLineNo">792</span> return workerThreads.size();<a name="line.792"></a>
+<span class="sourceLineNo">793</span> }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span> * @return the core pool size settings.<a name="line.796"></a>
+<span class="sourceLineNo">797</span> */<a name="line.797"></a>
+<span class="sourceLineNo">798</span> public int getCorePoolSize() {<a name="line.798"></a>
+<span class="sourceLineNo">799</span> return corePoolSize;<a name="line.799"></a>
+<span class="sourceLineNo">800</span> }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span> public int getActiveExecutorCount() {<a name="line.802"></a>
+<span class="sourceLineNo">803</span> return activeExecutorCount.get();<a name="line.803"></a>
+<span class="sourceLineNo">804</span> }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span> public TEnvironment getEnvironment() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.environment;<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> public ProcedureStore getStore() {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> return this.store;<a name="line.811"></a>
+<span class="sourceLineNo">812</span> }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span> ProcedureScheduler getScheduler() {<a name="line.814"></a>
+<span class="sourceLineNo">815</span> return scheduler;<a name="line.815"></a>
+<span class="sourceLineNo">816</span> }<a name="line.816"></a>
+<span class="sourceLineNo">817</span><a name="line.817"></a>
+<span class="sourceLineNo">818</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.819"></a>
+<span class="sourceLineNo">820</span> this.scheduler.signalAll();<a name="line.820"></a>
+<span class="sourceLineNo">821</span> }<a name="line.821"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span><a name="line.826"></a>
+<span class="sourceLineNo">827</span> // ==========================================================================<a name="line.827"></a>
+<span class="sourceLineNo">828</span> // Submit/Remove Chores<a name="line.828"></a>
<span class="sourceLineNo">829</span> // ==========================================================================<a name="line.829"></a>
-<span class="sourceLineNo">830</span> // Submit/Remove Chores<a name="line.830"></a>
-<span class="sourceLineNo">831</span> // ==========================================================================<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span> * Add a chore procedure to the executor<a name="line.834"></a>
-<span class="sourceLineNo">835</span> * @param chore the chore to add<a name="line.835"></a>
-<span class="sourceLineNo">836</span> */<a name="line.836"></a>
-<span class="sourceLineNo">837</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.837"></a>
-<span class="sourceLineNo">838</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.838"></a>
-<span class="sourceLineNo">839</span> timeoutExecutor.add(chore);<a name="line.839"></a>
-<span class="sourceLineNo">840</span> }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span> /**<a name="line.842"></a>
-<span class="sourceLineNo">843</span> * Remove a chore procedure from the executor<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * @param chore the chore to remove<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return whether the chore is removed, or it will be removed later<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> chore.setState(ProcedureState.SUCCESS);<a name="line.848"></a>
-<span class="sourceLineNo">849</span> return timeoutExecutor.remove(chore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span> }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span> /**<a name="line.831"></a>
+<span class="sourceLineNo">832</span> * Add a chore procedure to the executor<a name="line.832"></a>
+<span class="sourceLineNo">833</span> * @param chore the chore to add<a name="line.833"></a>
+<span class="sourceLineNo">834</span> */<a name="line.834"></a>
+<span class="sourceLineNo">835</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.835"></a>
+<span class="sourceLineNo">836</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.836"></a>
+<span class="sourceLineNo">837</span> timeoutExecutor.add(chore);<a name="line.837"></a>
+<span class="sourceLineNo">838</span> }<a name="line.838"></a>
+<span class="sourceLineNo">839</span><a name="line.839"></a>
+<span class="sourceLineNo">840</span> /**<a name="line.840"></a>
+<span class="sourceLineNo">841</span> * Remove a chore procedure from the executor<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * @param chore the chore to remove<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return whether the chore is removed, or it will be removed later<a name="line.843"></a>
+<span class="sourceLineNo">844</span> */<a name="line.844"></a>
+<span class="sourceLineNo">845</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span> chore.setState(ProcedureState.SUCCESS);<a name="line.846"></a>
+<span class="sourceLineNo">847</span> return timeoutExecutor.remove(chore);<a name="line.847"></a>
+<span class="sourceLineNo">848</span> }<a name="line.848"></a>
+<span class="sourceLineNo">849</span><a name="line.849"></a>
+<span class="sourceLineNo">850</span> // ==========================================================================<a name="line.850"></a>
+<span class="sourceLineNo">851</span> // Nonce Procedure helpers<a name="line.851"></a>
<span class="sourceLineNo">852</span> // ==========================================================================<a name="line.852"></a>
-<span class="sourceLineNo">853</span> // Nonce Procedure helpers<a name="line.853"></a>
-<span class="sourceLineNo">854</span> // ==========================================================================<a name="line.854"></a>
-<span class="sourceLineNo">855</span> /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.856"></a>
-<span class="sourceLineNo">857</span> * @param nonceGroup<a name="line.857"></a>
-<span class="sourceLineNo">858</span> * @param nonce<a name="line.858"></a>
-<span class="sourceLineNo">859</span> * @return the generated NonceKey<a name="line.859"></a>
-<span class="sourceLineNo">860</span> */<a name="line.860"></a>
-<span class="sourceLineNo">861</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.862"></a>
-<span class="sourceLineNo">863</span> }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span> /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.866"></a>
-<span class="sourceLineNo">867</span> * A procId will be reserved and on submitProcedure(),<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.868"></a>
-<span class="sourceLineNo">869</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.870"></a>
-<span class="sourceLineNo">871</span> * and submit the procedure.<a name="line.871"></a>
-<span class="sourceLineNo">872</span> *<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.873"></a>
-<span class="sourceLineNo">874</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.874"></a>
-<span class="sourceLineNo">875</span> */<a name="line.875"></a>
-<span class="sourceLineNo">876</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> if (nonceKey == null) return -1;<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span> // check if we have already a Reserved ID for the nonce<a name="line.879"></a>
-<span class="sourceLineNo">880</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (oldProcId == null) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.882"></a>
-<span class="sourceLineNo">883</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.883"></a>
-<span class="sourceLineNo">884</span> final long newProcId = nextProcId();<a name="line.884"></a>
-<span class="sourceLineNo">885</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> if (oldProcId == null) return -1;<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span><a name="line.888"></a>
-<span class="sourceLineNo">889</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.889"></a>
-<span class="sourceLineNo">890</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.890"></a>
-<span class="sourceLineNo">891</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.891"></a>
-<span class="sourceLineNo">892</span> while (isRunning() &&<a name="line.892"></a>
-<span class="sourceLineNo">893</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.893"></a>
-<span class="sourceLineNo">894</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> if (traceEnabled) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.896"></a>
-<span class="sourceLineNo">897</span> }<a name="line.897"></a>
-<span class="sourceLineNo">898</span> Threads.sleep(100);<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span> return oldProcId.longValue();<a name="line.900"></a>
-<span class="sourceLineNo">901</span> }<a name="line.901"></a>
-<span class="sourceLineNo">902</span><a name="line.902"></a>
-<span class="sourceLineNo">903</span> /**<a name="line.903"></a>
-<span class="sourceLineNo">904</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.904"></a>
-<span class="sourceLineNo">905</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.905"></a>
-<span class="sourceLineNo">906</span> */<a name="line.906"></a>
-<span class="sourceLineNo">907</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.907"></a>
-<span class="sourceLineNo">908</span> if (nonceKey == null) return;<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.910"></a>
-<span class="sourceLineNo">911</span> if (procId == null) return;<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span> // if the procedure was not submitted, remove the nonce<a name="line.913"></a>
-<span class="sourceLineNo">914</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.915"></a>
-<span class="sourceLineNo">916</span> }<a name="line.916"></a>
-<span class="sourceLineNo">917</span> }<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.919"></a>
-<span class="sourceLineNo">920</span> private String procName;<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span> public FailedProcedure() {<a name="line.922"></a>
-<span class="sourceLineNo">923</span> }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.925"></a>
-<span class="sourceLineNo">926</span> NonceKey nonceKey, IOException exception) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span> this.procName = procName;<a name="line.927"></a>
-<span class="sourceLineNo">928</span> setProcId(procId);<a name="line.928"></a>
-<span class="sourceLineNo">929</span> setState(ProcedureState.ROLLEDBACK);<a name="line.929"></a>
-<span class="sourceLineNo">930</span> setOwner(owner);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> setNonceKey(nonceKey);<a name="line.931"></a>
-<span class="sourceLineNo">932</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.932"></a>
-<span class="sourceLineNo">933</span> setSubmittedTime(currentTime);<a name="line.933"></a>
-<span class="sourceLineNo">934</span> setLastUpdate(currentTime);<a name="line.934"></a>
-<span class="sourceLineNo">935</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.935"></a>
-<span class="sourceLineNo">936</span> }<a name="line.936"></a>
-<span class="sourceLineNo">937</span><a name="line.937"></a>
-<span class="sourceLineNo">938</span> @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span> public String getProcName() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span> return procName;<a name="line.940"></a>
-<span class="sourceLineNo">941</span> }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span> @Override<a name="line.943"></a>
-<span class="sourceLineNo">944</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.944"></a>
-<span class="sourceLineNo">945</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.945"></a>
-<span class="sourceLineNo">946</span> InterruptedException {<a name="line.946"></a>
-<span class="sourceLineNo">947</span> throw new UnsupportedOperationException();<a name="line.947"></a>
-<span class="sourceLineNo">948</span> }<a name="line.948"></a>
-<span class="sourceLineNo">949</span><a name="line.949"></a>
-<span class="sourceLineNo">950</span> @Override<a name="line.950"></a>
-<span class="sourceLineNo">951</span> protected void rollback(TEnvironment env)<a name="line.951"></a>
-<span class="sourceLineNo">952</span> throws IOException, InterruptedException {<a name="line.952"></a>
-<span class="sourceLineNo">953</span> throw new UnsupportedOperationException();<a name="line.953"></a>
-<span class="sourceLineNo">954</span> }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span> @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span> protected boolean abort(TEnvironment env) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span> throw new UnsupportedOperationException();<a name="line.958"></a>
-<span class="sourceLineNo">959</span> }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span> @Override<a name="line.961"></a>
-<span class="sourceLineNo">962</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.962"></a>
-<span class="sourceLineNo">963</span> throws IOException {<a name="line.963"></a>
-<span class="sourceLineNo">964</span> }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span> @Override<a name="line.966"></a>
-<span class="sourceLineNo">967</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.967"></a>
-<span class="sourceLineNo">968</span> throws IOException {<a name="line.968"></a>
-<span class="sourceLineNo">969</span> }<a name="line.969"></a>
-<span class="sourceLineNo">970</span> }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span> /**<a name="line.972"></a>
-<span class="sourceLineNo">973</span> * If the failure failed before submitting it, we may want to give back the<a name="line.973"></a>
-<span class="sourceLineNo">974</span> * same error to the requests with the same nonceKey.<a name="line.974"></a>
-<span class="sourceLineNo">975</span> *<a name="line.975"></a>
-<span class="sourceLineNo">976</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.976"></a>
-<span class="sourceLineNo">977</span> * @param procName name of the procedure, used to inform the user<a name="line.977"></a>
-<span class="sourceLineNo">978</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.978"></a>
-<span class="sourceLineNo">979</span> * @param exception the failure to report to the user<a name="line.979"></a>
-<span class="sourceLineNo">980</span> */<a name="line.980"></a>
-<span class="sourceLineNo">981</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.981"></a>
-<span class="sourceLineNo">982</span> IOException exception) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span> if (nonceKey == null) {<a name="line.983"></a>
-<span class="sourceLineNo">984</span> return;<a name="line.984"></a>
-<span class="sourceLineNo">985</span> }<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.987"></a>
-<span class="sourceLineNo">988</span> if (procId == null || completed.containsKey(procId)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span> return;<a name="line.989"></a>
-<span class="sourceLineNo">990</span> }<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span> Procedure<TEnvironment> proc =<a name="line.992"></a>
-<span class="sourceLineNo">993</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.993"></a>
-<span class="sourceLineNo">994</span><a name="line.994"></a>
-<span class="sourceLineNo">995</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.995"></a>
-<span class="sourceLineNo">996</span> }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">853</span> /**<a name="line.853"></a>
+<span class="sourceLineNo">854</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.854"></a>
+<span class="sourceLineNo">855</span> * @param nonceGroup<a name="line.855"></a>
+<span class="sourceLineNo">856</span> * @param nonce<a name="line.856"></a>
+<span class="sourceLineNo">857</span> * @return the generated NonceKey<a name="line.857"></a>
+<span class="sourceLineNo">858</span> */<a name="line.858"></a>
+<span class="sourceLineNo">859</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.860"></a>
+<span class="sourceLineNo">861</span> }<a name="line.861"></a>
+<span class="sourceLineNo">862</span><a name="line.862"></a>
+<span class="sourceLineNo">863</span> /**<a name="line.863"></a>
+<span class="sourceLineNo">864</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.864"></a>
+<span class="sourceLineNo">865</span> * A procId will be reserved and on submitProcedure(),<a name="line.865"></a>
+<span class="sourceLineNo">866</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.866"></a>
+<span class="sourceLineNo">867</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.867"></a>
+<span class="sourceLineNo">868</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.868"></a>
+<span class="sourceLineNo">869</span> * and submit the procedure.<a name="line.869"></a>
+<span class="sourceLineNo">870</span> *<a name="line.870"></a>
+<span class="sourceLineNo">871</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.871"></a>
+<span class="sourceLineNo">872</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.872"></a>
+<span class="sourceLineNo">873</span> */<a name="line.873"></a>
+<span class="sourceLineNo">874</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.874"></a>
+<span class="sourceLineNo">875</span> if (nonceKey == null) return -1;<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span> // check if we have already a Reserved ID for the nonce<a name="line.877"></a>
+<span class="sourceLineNo">878</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.878"></a>
+<span class="sourceLineNo">879</span> if (oldProcId == null) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.880"></a>
+<span class="sourceLineNo">881</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.881"></a>
+<span class="sourceLineNo">882</span> final long newProcId = nextProcId();<a name="line.882"></a>
+<span class="sourceLineNo">883</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.883"></a>
+<span class="sourceLineNo">884</span> if (oldProcId == null) return -1;<a name="line.884"></a>
+<span class="sourceLineNo">885</span> }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.887"></a>
+<span class="sourceLineNo">888</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.888"></a>
+<span class="sourceLineNo">889</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.889"></a>
+<span class="sourceLineNo">890</span> while (isRunning() &&<a name="line.890"></a>
+<span class="sourceLineNo">891</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.891"></a>
+<span class="sourceLineNo">892</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> if (traceEnabled) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> Threads.sleep(100);<a name="line.896"></a>
+<span class="sourceLineNo">897</span> }<a name="line.897"></a>
+<span class="sourceLineNo">898</span> return oldProcId.longValue();<a name="line.898"></a>
+<span class="sourceLineNo">899</span> }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span> /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.903"></a>
+<span class="sourceLineNo">904</span> */<a name="line.904"></a>
+<span class="sourceLineNo">905</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span> if (nonceKey == null) return;<a name="line.906"></a>
+<span class="sourceLineNo">907</span><a name="line.907"></a>
+<span class="sourceLineNo">908</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.908"></a>
+<span class="sourceLineNo">909</span> if (procId == null) return;<a name="line.909"></a>
+<span class="sourceLineNo">910</span><a name="line.910"></a>
+<span class="sourceLineNo">911</span> // if the procedure was not submitted, remove the nonce<a name="line.911"></a>
+<span class="sourceLineNo">912</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.912"></a>
+<span class="sourceLineNo">913</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.913"></a>
+<span class="sourceLineNo">914</span> }<a name="line.914"></a>
+<span class="sourceLineNo">915</span> }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.917"></a>
+<span class="sourceLineNo">918</span> private String procName;<a name="line.918"></a>
+<span class="sourceLineNo">919</span><a name="line.919"></a>
+<span class="sourceLineNo">920</span> public FailedProcedure() {<a name="line.920"></a>
+<span class="sourceLineNo">921</span> }<a name="line.921"></a>
+<span class="sourceLineNo">922</span><a name="line.922"></a>
+<span class="sourceLineNo">923</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.923"></a>
+<span class="sourceLineNo">924</span> NonceKey nonceKey, IOException exception) {<a name="line.924"></a>
+<span class="sourceLineNo">925</span> this.procName = procName;<a name="line.925"></a>
+<span class="sourceLineNo">926</span> setProcId(procId);<a name="line.926"></a>
+<span class="sourceLineNo">927</span> setState(ProcedureState.ROLLEDBACK);<a name="line.927"></a>
+<span class="sourceLineNo">928</span> setOwner(owner);<a name="line.928"></a>
+<span class="sourceLineNo">929</span> setNonceKey(nonceKey);<a name="line.929"></a>
+<span class="sourceLineNo">930</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.930"></a>
+<span class="sourceLineNo">931</span> setSubmittedTime(currentTime);<a name="line.931"></a>
+<span class="sourceLineNo">932</span> setLastUpdate(currentTime);<a name="line.932"></a>
+<span class="sourceLineNo">933</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.933"></a>
+<span class="sourceLineNo">934</span> }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span> @Override<a name="line.936"></a>
+<span class="sourceLineNo">937</span> public String getProcName() {<a name="line.937"></a>
+<span class="sourceLineNo">938</span> return procName;<a name="line.938"></a>
+<span class="sourceLineNo">939</span> }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span> @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.942"></a>
+<span class="sourceLineNo">943</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.943"></a>
+<span class="sourceLineNo">944</span> InterruptedException {<a name="line.944"></a>
+<span class="sourceLineNo">945</span> throw new UnsupportedOperationException();<a name="line.945"></a>
+<span class="sourceLineNo">946</span> }<a name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span> @Override<a name="line.948"></a>
+<span class="sourceLineNo">949</span> protected void rollback(TEnvironment env)<a name="line.949"></a>
+<span class="sourceLineNo">950</span> throws IOException, InterruptedException {<a name="line.950"></a>
+<span class="sourceLineNo">951</span> throw new UnsupportedOperationException();<a name="line.951"></a>
+<span class="sourceLineNo">952</span> }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span> @Override<a name="line.954"></a>
+<span class="sourceLineNo">955</span> protected boolean abort(TEnvironment env) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span> throw new UnsupportedOperationException();<a name="line.956"></a>
+<span class="sourceLineNo">957</span> }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span> @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.960"></a>
+<span class="sourceLineNo">961</span> throws IOException {<a name="line.961"></a>
+<span class="sourceLineNo">962</span> }<a name="line.962"></a>
+<span class="sourceLineNo">963</span><a name="line.963"></a>
+<span class="sourceLineNo">964</span> @Override<a name="line.964"></a>
+<span class="sourceLineNo">965</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.965"></a>
+<span class="sourceLineNo">966</span> throws IOException {<a name="line.966"></a>
+<span class="sourceLineNo">967</span> }<a name="line.967"></a>
+<span class="sourceLineNo">968</span> }<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span> /**<a name="line.970"></a>
+<span class="sourceLineNo">971</span> * If the failure failed before submitting it, we may want to give back the<a name="line.971"></a>
+<span class="sourceLineNo">972</span> * same error to the requests with the same nonceKey.<a name="line.972"></a>
+<span class="sourceLineNo">973</span> *<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * @param procName name of the procedure, used to inform the user<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * @param exception the failure to report to the user<a name="line.977"></a>
+<span class="sourceLineNo">978</span> */<a name="line.978"></a>
+<span class="sourceLineNo">979</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.979"></a>
+<span class="sourceLineNo">980</span> IOException exception) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span> if (nonceKey == null) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span> return;<a name="line.982"></a>
+<span class="sourceLineNo">983</span> }<a name="line.983"></a>
+<span class="sourceLineNo">984</span><a name="line.984"></a>
+<span class="sourceLineNo">985</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.985"></a>
+<span class="sourceLineNo">986</span> if (procId == null || completed.containsKey(procId)) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span> return;<a name="line.987"></a>
+<span class="sourceLineNo">988</span> }<a name="line.988"></a>
+<span class="sourceLineNo">989</span><a name="line.989"></a>
+<span class="sourceLineNo">990</span> Procedure<TEnvironment> proc =<a name="line.990"></a>
+<span class="sourceLineNo">991</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.991"></a>
+<span class="sourceLineNo">992</span><a name="line.992"></a>
+<span class="sourceLineNo">993</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.993"></a>
+<span class="sourceLineNo">994</span> }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span> // ==========================================================================<a name="line.996"></a>
+<span class="sourceLineNo">997</span> // Submit/Abort Procedure<a name="line.997"></a>
<span class="sourceLineNo">998</span> // ==========================================================================<a name="line.998"></a>
-<span class="sourceLineNo">999</span> // Submit/Abort Procedure<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> // ==========================================================================<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> /**<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> * Add a new root-procedure to the executor.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> * @param proc the new procedure to execute.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> * @return the procedure id, that can be used to monitor the operation<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> */<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> public long submitProcedure(Procedure<TEnvironment> proc) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> return submitProcedure(proc, null);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span><a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> /**<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> * Bypass a procedure. If the procedure is set to bypass, all the logic in<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> * execute/rollback will be ignored and it will return success, whatever.<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> * It is used to recover buggy stuck procedures, releasing the lock resources<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> * and letting other procedures run. Bypassing one procedure (and its ancestors will<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> * be bypassed automatically) may leave the cluster in a middle state, e.g. region<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> * not assigned, or some hdfs files left behind. After getting rid of those stuck procedures,<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> * the operators may have to do some clean up on hdfs or schedule some assign procedures<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> * to let region online. DO AT YOUR OWN RISK.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> * <p><a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> * A procedure can be bypassed only if<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span> * 1. The procedure is in state of RUNNABLE, WAITING, WAITING_TIMEOUT<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> * or it is a root procedure without any child.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * 2. No other worker thread is executing it<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> * 3. No child procedure has been submitted<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> *<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> * <p><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> * If all the requirements are meet, the procedure and its ancestors will be<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> * bypassed and persisted to WAL.<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> *<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span> * <p><a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> * If the procedure is in WAITING state, will set it to RUNNABLE add it to run queue.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> * TODO: What about WAITING_TIMEOUT?<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> * @param pids the procedure id<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> * @param lockWait time to wait lock<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> * @param force if force set to true, we will bypass the procedure even if it is executing.<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> * This is for procedures which can't break out during executing(due to bug, mostly)<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> * In this case, bypassing the procedure is not enough, since it is already stuck<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> * there. We need to restart the master after bypassing, and letting the problematic<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span> * procedure to execute wth bypass=true, so in that condition, the procedure can be<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> * successfully bypassed.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> * @param recursive We will do an expensive search for children of each pid. EXPENSIVE!<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> * @return true if bypass success<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> * @throws IOException IOException<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span> */<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> public List<Boolean> bypassProcedure(List<Long> pids, long lockWait, boolean force,<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span> boolean recursive)<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> throws IOException {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> List<Boolean> result = new ArrayList<Boolean>(pids.size());<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> for(long pid: pids) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span> result.add(bypassProcedure(pid, lockWait, force, recursive));<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> return result;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span> }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> boolean bypassProcedure(long pid, long lockWait, boolean override, boolean recursive)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span> throws IOException {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> Preconditions.checkArgument(lockWait > 0, "lockWait should be positive");<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span> final Procedure<TEnvironment> procedure = getProcedure(pid);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span> if (procedure == null) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> LOG.debug("Procedure pid={} does not exist, skipping bypass", pid);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> return false;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span> }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span><a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> LOG.debug("Begin bypass {} with lockWait={}, override={}, recursive={}",<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span> procedure, lockWait, override, recursive);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> IdLock.Entry lockEntry = procExecutionLock.tryLockEntry(procedure.getProcId(), lockWait);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> if (lockEntry == null && !override) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> LOG.debug("Waited {} ms, but {} is still running, skipping bypass with force={}",<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> lockWait, procedure, override);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> } else if (lockEntry == null) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> LOG.debug("Waited {} ms, but {} is still running, begin bypass with force={}",<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span> lockWait, procedure, override);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // check whether the procedure is already finished<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> if (procedure.isFinished()) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> LOG.debug("{} is already finished, skipping bypass", procedure);<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> return false;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> if (procedure.hasChildren()) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> if (recursive) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> // EXPENSIVE. Checks each live procedure of which there could be many!!!<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span> // Is there another way to get children of a procedure?<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> LOG.info("Recursive bypass on children of pid={}", procedure.getProcId());<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> this.procedures.forEachValue(1 /*Single-threaded*/,<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> // Transformer<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> v -> v.getParentProcId() == procedure.getProcId()? v: null,<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> // Consumer<a name="line.1090"></a>
-<span class=
<TRUNCATED>
[26/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
index 680051d..940e63e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":9,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":9,"i36":10,"i37":9,"i38":9,"i39":10,"i40":10,"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":10,"i59":10,"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,"i91":10,"i92":10,"i93":10,"i94":10,"i95":41,"i96":41,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109"
:10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":9,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":9,"i36":10,"i37":9,"i38":9,"i39":10,"i40":10,"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":10,"i59":10,"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,"i91":10,"i92":10,"i93":10,"i94":10,"i95":41,"i96":41,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109"
:10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -922,7 +922,8 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
</tr>
<tr id="i93" class="rowColor">
<td class="colFirst"><code>private long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize-java.util.function.Predicate-">getStorefilesSize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> predicate)</code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize-java.util.Collection-java.util.function.Predicate-">getStorefilesSize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> files,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> predicate)</code> </td>
</tr>
<tr id="i94" class="altColor">
<td class="colFirst"><code>long</code></td>
@@ -971,33 +972,37 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
</td>
</tr>
<tr id="i102" class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalUmcompressedBytes-java.util.List-">getTotalUmcompressedBytes</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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> files)</code> </td>
+</tr>
+<tr id="i103" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasReferences--">hasReferences</a></span>()</code> </td>
</tr>
-<tr id="i103" class="rowColor">
+<tr id="i104" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasTooManyStoreFiles--">hasTooManyStoreFiles</a></span>()</code> </td>
</tr>
-<tr id="i104" class="altColor">
+<tr id="i105" class="rowColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#heapSize--">heapSize</a></span>()</code> </td>
</tr>
-<tr id="i105" class="rowColor">
+<tr id="i106" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isPrimaryReplicaStore--">isPrimaryReplicaStore</a></span>()</code> </td>
</tr>
-<tr id="i106" class="altColor">
+<tr id="i107" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isSloppyMemStore--">isSloppyMemStore</a></span>()</code> </td>
</tr>
-<tr id="i107" class="rowColor">
+<tr id="i108" class="altColor">
<td class="colFirst"><code>private <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#loadStoreFiles--">loadStoreFiles</a></span>()</code>
<div class="block">Creates an unsorted list of StoreFile loaded in parallel
from the given directory.</div>
</td>
</tr>
-<tr id="i108" class="altColor">
+<tr id="i109" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#logCompactionEndMessage-org.apache.hadoop.hbase.regionserver.compactions.CompactionRequestImpl-java.util.List-long-long-">logCompactionEndMessage</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequestImpl.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequestImpl</a> cr,
<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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> sfs,
@@ -1006,63 +1011,63 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<div class="block">Log a very elaborate compaction completion message.</div>
</td>
</tr>
-<tr id="i109" class="rowColor">
+<tr id="i110" class="altColor">
<td class="colFirst"><code>private <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveCompactedFilesIntoPlace-org.apache.hadoop.hbase.regionserver.compactions.CompactionRequestImpl-java.util.List-org.apache.hadoop.hbase.security.User-">moveCompactedFilesIntoPlace</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequestImpl.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequestImpl</a> cr,
<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><org.apache.hadoop.fs.Path> newFiles,
<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> user)</code> </td>
</tr>
-<tr id="i110" class="altColor">
+<tr id="i111" class="rowColor">
<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveFileIntoPlace-org.apache.hadoop.fs.Path-">moveFileIntoPlace</a></span>(org.apache.hadoop.fs.Path newFile)</code> </td>
</tr>
-<tr id="i111" class="rowColor">
+<tr id="i112" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#needsCompaction--">needsCompaction</a></span>()</code>
<div class="block">See if there's too much store files in this store</div>
</td>
</tr>
-<tr id="i112" class="altColor">
+<tr id="i113" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#notifyChangedReadersObservers-java.util.List-">notifyChangedReadersObservers</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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> sfs)</code>
<div class="block">Notify all observers that set of Readers has changed.</div>
</td>
</tr>
-<tr id="i113" class="rowColor">
+<tr id="i114" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">onConfigurationChange</a></span>(org.apache.hadoop.conf.Configuration conf)</code>
<div class="block">This method would be called by the <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
object when the <code>Configuration</code> object is reloaded from disk.</div>
</td>
</tr>
-<tr id="i114" class="altColor">
+<tr id="i115" class="rowColor">
<td class="colFirst"><code>private <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#openStoreFiles-java.util.Collection-">openStoreFiles</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>> files)</code> </td>
</tr>
-<tr id="i115" class="rowColor">
+<tr id="i116" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#postSnapshotOperation--">postSnapshotOperation</a></span>()</code>
<div class="block">Perform tasks needed after the completion of snapshot operation.</div>
</td>
</tr>
-<tr id="i116" class="altColor">
+<tr id="i117" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#preBulkLoadHFile-java.lang.String-long-">preBulkLoadHFile</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> srcPathStr,
long seqNum)</code>
<div class="block">This method should only be called from Region.</div>
</td>
</tr>
-<tr id="i117" class="rowColor">
+<tr id="i118" class="altColor">
<td class="colFirst"><code><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/regionserver/HStore.html#preFlushSeqIDEstimation--">preFlushSeqIDEstimation</a></span>()</code> </td>
</tr>
-<tr id="i118" class="altColor">
+<tr id="i119" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#preSnapshotOperation--">preSnapshotOperation</a></span>()</code>
<div class="block">Sets the store up for a region level snapshot operation.</div>
</td>
</tr>
-<tr id="i119" class="rowColor">
+<tr id="i120" class="altColor">
<td class="colFirst"><code><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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#recreateScanners-java.util.List-boolean-boolean-boolean-org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher-byte:A-boolean-byte:A-boolean-long-boolean-">recreateScanners</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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>> currentFileScanners,
boolean cacheBlocks,
@@ -1078,20 +1083,20 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<div class="block">Recreates the scanners on the current list of active store file scanners</div>
</td>
</tr>
-<tr id="i120" class="altColor">
+<tr id="i121" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles--">refreshStoreFiles</a></span>()</code>
<div class="block">Checks the underlying store files, and opens the files that have not been opened, and removes
the store file readers for store files no longer available.</div>
</td>
</tr>
-<tr id="i121" class="rowColor">
+<tr id="i122" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles-java.util.Collection-">refreshStoreFiles</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</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>> newFiles)</code>
<div class="block">Replaces the store files that the store has with the given files.</div>
</td>
</tr>
-<tr id="i122" class="altColor">
+<tr id="i123" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFilesInternal-java.util.Collection-">refreshStoreFilesInternal</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>> newFiles)</code>
<div class="block">Checks the underlying store files, and opens the files that have not
@@ -1099,29 +1104,29 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
available.</div>
</td>
</tr>
-<tr id="i123" class="rowColor">
+<tr id="i124" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#registerChildren-org.apache.hadoop.hbase.conf.ConfigurationManager-">registerChildren</a></span>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a> manager)</code>
<div class="block">Needs to be called to register the children to the manager.</div>
</td>
</tr>
-<tr id="i124" class="altColor">
+<tr id="i125" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#removeCompactedfiles-java.util.Collection-boolean-">removeCompactedfiles</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> compactedfiles,
boolean storeClosing)</code>
<div class="block">Archives and removes the compacted files</div>
</td>
</tr>
-<tr id="i125" class="rowColor">
+<tr id="i126" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#removeUnneededFiles--">removeUnneededFiles</a></span>()</code> </td>
</tr>
-<tr id="i126" class="altColor">
+<tr id="i127" class="rowColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles-java.util.Collection-java.util.Collection-">replaceStoreFiles</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> compactedFiles,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> result)</code> </td>
</tr>
-<tr id="i127" class="rowColor">
+<tr id="i128" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replayCompactionMarker-org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor-boolean-boolean-">replayCompactionMarker</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor compaction,
boolean pickCompactionFiles,
@@ -1129,78 +1134,78 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<div class="block">Call to complete a compaction.</div>
</td>
</tr>
-<tr id="i128" class="altColor">
+<tr id="i129" class="rowColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#reportArchivedFilesForQuota-java.util.List-java.util.List-">reportArchivedFilesForQuota</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><? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>> archivedFiles,
<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><<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>> fileSizes)</code> </td>
</tr>
-<tr id="i129" class="rowColor">
+<tr id="i130" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction--">requestCompaction</a></span>()</code> </td>
</tr>
-<tr id="i130" class="altColor">
+<tr id="i131" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction-int-org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker-org.apache.hadoop.hbase.security.User-">requestCompaction</a></span>(int priority,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionLifeCycleTracker</a> tracker,
<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> user)</code> </td>
</tr>
-<tr id="i131" class="rowColor">
+<tr id="i132" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setDataBlockEncoderInTest-org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder-">setDataBlockEncoderInTest</a></span>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a> blockEncoder)</code>
<div class="block">Should be used only in tests.</div>
</td>
</tr>
-<tr id="i132" class="altColor">
+<tr id="i133" class="rowColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setScanInfo-org.apache.hadoop.hbase.regionserver.ScanInfo-">setScanInfo</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a> scanInfo)</code>
<div class="block">Set scan info, used by test</div>
</td>
</tr>
-<tr id="i133" class="rowColor">
+<tr id="i134" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#shouldPerformMajorCompaction--">shouldPerformMajorCompaction</a></span>()</code>
<div class="block">Tests whether we should run a major compaction.</div>
</td>
</tr>
-<tr id="i134" class="altColor">
+<tr id="i135" class="rowColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#snapshot--">snapshot</a></span>()</code>
<div class="block">Snapshot this stores memstore.</div>
</td>
</tr>
-<tr id="i135" class="rowColor">
+<tr id="i136" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#startReplayingFromWAL--">startReplayingFromWAL</a></span>()</code>
<div class="block">This message intends to inform the MemStore that next coming updates
are going to be part of the replaying edits from WAL</div>
</td>
</tr>
-<tr id="i136" class="altColor">
+<tr id="i137" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#stopReplayingFromWAL--">stopReplayingFromWAL</a></span>()</code>
<div class="block">This message intends to inform the MemStore that the replaying edits from WAL
are done</div>
</td>
</tr>
-<tr id="i137" class="rowColor">
+<tr id="i138" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#throttleCompaction-long-">throttleCompaction</a></span>(long compactionSize)</code> </td>
</tr>
-<tr id="i138" class="altColor">
+<tr id="i139" class="rowColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#timeOfOldestEdit--">timeOfOldestEdit</a></span>()</code>
<div class="block">When was the last edit done in the memstore</div>
</td>
</tr>
-<tr id="i139" class="rowColor">
+<tr id="i140" 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/regionserver/HStore.html#toString--">toString</a></span>()</code> </td>
</tr>
-<tr id="i140" class="altColor">
+<tr id="i141" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#triggerMajorCompaction--">triggerMajorCompaction</a></span>()</code> </td>
</tr>
-<tr id="i141" class="rowColor">
+<tr id="i142" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#updateSpaceQuotaAfterFileReplacement-org.apache.hadoop.hbase.quotas.RegionSizeStore-org.apache.hadoop.hbase.client.RegionInfo-java.util.Collection-java.util.Collection-">updateSpaceQuotaAfterFileReplacement</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a> sizeStore,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
@@ -1210,14 +1215,14 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
and adding in the size for new files.</div>
</td>
</tr>
-<tr id="i142" class="altColor">
+<tr id="i143" class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#updateStorefiles-java.util.List-long-">updateStorefiles</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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> sfs,
long snapshotId)</code>
<div class="block">Change storeFiles adding into place the Reader produced by this new flush.</div>
</td>
</tr>
-<tr id="i143" class="rowColor">
+<tr id="i144" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#upsert-java.lang.Iterable-long-org.apache.hadoop.hbase.regionserver.MemStoreSizing-">upsert</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> cells,
long readpoint,
@@ -1225,17 +1230,17 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<div class="block">Adds or replaces the specified KeyValues.</div>
</td>
</tr>
-<tr id="i144" class="altColor">
+<tr id="i145" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#validateStoreFile-org.apache.hadoop.fs.Path-">validateStoreFile</a></span>(org.apache.hadoop.fs.Path path)</code>
<div class="block">Validates a store file by opening and closing it.</div>
</td>
</tr>
-<tr id="i145" class="rowColor">
+<tr id="i146" class="altColor">
<td class="colFirst"><code>(package private) int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#versionsToReturn-int-">versionsToReturn</a></span>(int wantedVersions)</code> </td>
</tr>
-<tr id="i146" class="altColor">
+<tr id="i147" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#writeCompactionWalRecord-java.util.Collection-java.util.Collection-">writeCompactionWalRecord</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> filesCompacted,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> newFiles)</code>
@@ -1754,7 +1759,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>FIXED_OVERHEAD</h4>
-<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2435">FIXED_OVERHEAD</a></pre>
+<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2428">FIXED_OVERHEAD</a></pre>
</li>
</ul>
<a name="DEEP_OVERHEAD">
@@ -1763,7 +1768,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockListLast">
<li class="blockList">
<h4>DEEP_OVERHEAD</h4>
-<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2439">DEEP_OVERHEAD</a></pre>
+<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2432">DEEP_OVERHEAD</a></pre>
</li>
</ul>
</li>
@@ -1810,7 +1815,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getMemstore</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.337">getMemstore</a>()</pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.344">getMemstore</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>MemStore Instance to use in this store.</dd>
@@ -1823,7 +1828,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>createCacheConf</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.371">createCacheConf</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a> family)</pre>
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.378">createCacheConf</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a> family)</pre>
<div class="block">Creates the cache config.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1837,7 +1842,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>createStoreEngine</h4>
-<pre>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">StoreEngine</a><?,?,?,?> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.383">createStoreEngine</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a> store,
+<pre>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">StoreEngine</a><?,?,?,?> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.390">createStoreEngine</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a> store,
org.apache.hadoop.conf.Configuration conf,
<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a> kvComparator)
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>
@@ -1861,7 +1866,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>determineTTLFromFamily</h4>
-<pre>public static long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.392">determineTTLFromFamily</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a> family)</pre>
+<pre>public static long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.399">determineTTLFromFamily</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a> family)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>family</code> - </dd>
@@ -1876,7 +1881,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getColumnFamilyName</h4>
-<pre>public <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/regionserver/HStore.html#line.408">getColumnFamilyName</a>()</pre>
+<pre>public <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/regionserver/HStore.html#line.415">getColumnFamilyName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getColumnFamilyName--">getColumnFamilyName</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -1889,7 +1894,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getTableName</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.413">getTableName</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.420">getTableName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getTableName--">getTableName</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -1902,7 +1907,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getFileSystem</h4>
-<pre>public org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.418">getFileSystem</a>()</pre>
+<pre>public org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.425">getFileSystem</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getFileSystem--">getFileSystem</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -1915,7 +1920,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getRegionFileSystem</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.422">getRegionFileSystem</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.429">getRegionFileSystem</a>()</pre>
</li>
</ul>
<a name="getStoreFileTtl--">
@@ -1924,7 +1929,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getStoreFileTtl</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.428">getStoreFileTtl</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.435">getStoreFileTtl</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreConfigInformation.html#getStoreFileTtl--">getStoreFileTtl</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreConfigInformation.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreConfigInformation</a></code></dd>
@@ -1939,7 +1944,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getMemStoreFlushSize</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.434">getMemStoreFlushSize</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.441">getMemStoreFlushSize</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreConfigInformation.html#getMemStoreFlushSize--">getMemStoreFlushSize</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreConfigInformation.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreConfigInformation</a></code></dd>
@@ -1954,7 +1959,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getFlushableSize</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.440">getFlushableSize</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.447">getFlushableSize</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getFlushableSize--">getFlushableSize</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -1971,7 +1976,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getSnapshotSize</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.445">getSnapshotSize</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.452">getSnapshotSize</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getSnapshotSize--">getSnapshotSize</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -1986,7 +1991,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getCompactionCheckMultiplier</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.450">getCompactionCheckMultiplier</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.457">getCompactionCheckMultiplier</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreConfigInformation.html#getCompactionCheckMultiplier--">getCompactionCheckMultiplier</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreConfigInformation.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreConfigInformation</a></code></dd>
@@ -2003,7 +2008,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getBlockingFileCount</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.455">getBlockingFileCount</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.462">getBlockingFileCount</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreConfigInformation.html#getBlockingFileCount--">StoreConfigInformation</a></code></span></div>
<div class="block">The number of files required before flushes for this store will be blocked.</div>
<dl>
@@ -2018,7 +2023,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getBytesPerChecksum</h4>
-<pre>public static int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.465">getBytesPerChecksum</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>public static int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.472">getBytesPerChecksum</a>(org.apache.hadoop.conf.Configuration conf)</pre>
<div class="block">Returns the configured bytesPerChecksum value.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -2034,7 +2039,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getChecksumType</h4>
-<pre>public static <a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util">ChecksumType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.475">getChecksumType</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>public static <a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util">ChecksumType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.482">getChecksumType</a>(org.apache.hadoop.conf.Configuration conf)</pre>
<div class="block">Returns the configured checksum algorithm.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -2050,7 +2055,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getCloseCheckInterval</h4>
-<pre>public static int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.487">getCloseCheckInterval</a>()</pre>
+<pre>public static int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.494">getCloseCheckInterval</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>how many bytes to write between status checks</dd>
@@ -2063,7 +2068,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getColumnFamilyDescriptor</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.492">getColumnFamilyDescriptor</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.499">getColumnFamilyDescriptor</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getColumnFamilyDescriptor--">getColumnFamilyDescriptor</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2076,7 +2081,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getMaxSequenceId</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/OptionalLong.html?is-external=true" title="class or interface in java.util">OptionalLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.497">getMaxSequenceId</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/OptionalLong.html?is-external=true" title="class or interface in java.util">OptionalLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.504">getMaxSequenceId</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMaxSequenceId--">getMaxSequenceId</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2091,7 +2096,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<ul class="blockList">
<li class="blockList">
<h4>getMaxMemStoreTS</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/OptionalLong.html?is-external=true" title="class or interface in java.util">OptionalLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.502">getMaxMemStoreTS</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/OptionalLong.html?is-external=true" title="class or interface in java.util">OptionalLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.509">getMaxMemStoreTS</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMaxMemStoreTS--">getMaxMemStoreTS</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2107,7 +2112,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
<li class="blockList">
<h4>getStoreHomedir</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.513">getStoreHomedir</a>(org.apache.hadoop.fs.Path tabledir,
+public static org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.520">getStoreHomedir</a>(org.apache.hadoop.fs.Path tabledir,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri,
byte[] family)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -2128,7 +2133,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<li class="blockList">
<h4>getStoreHomedir</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.525">getStoreHomedir</a>(org.apache.hadoop.fs.Path tabledir,
+public static org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.532">getStoreHomedir</a>(org.apache.hadoop.fs.Path tabledir,
<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> encodedName,
byte[] family)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -2148,7 +2153,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getDataBlockEncoder</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.533">getDataBlockEncoder</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.540">getDataBlockEncoder</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the data block encoder</dd>
@@ -2161,7 +2166,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>setDataBlockEncoderInTest</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.541">setDataBlockEncoderInTest</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a> blockEncoder)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.548">setDataBlockEncoderInTest</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a> blockEncoder)</pre>
<div class="block">Should be used only in tests.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -2175,7 +2180,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>loadStoreFiles</h4>
-<pre>private <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.550">loadStoreFiles</a>()
+<pre>private <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.557">loadStoreFiles</a>()
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">Creates an unsorted list of StoreFile loaded in parallel
from the given directory.</div>
@@ -2191,7 +2196,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>openStoreFiles</h4>
-<pre>private <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.555">openStoreFiles</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>> files)
+<pre>private <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.562">openStoreFiles</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>> files)
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2205,7 +2210,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>refreshStoreFiles</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.615">refreshStoreFiles</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.618">refreshStoreFiles</a>()
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"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#refreshStoreFiles--">Store</a></code></span></div>
<div class="block">Checks the underlying store files, and opens the files that have not been opened, and removes
@@ -2225,7 +2230,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>refreshStoreFiles</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.625">refreshStoreFiles</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</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>> newFiles)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.628">refreshStoreFiles</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</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>> newFiles)
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">Replaces the store files that the store has with the given files. Mainly used by secondary
region replicas to keep up to date with the primary region files.</div>
@@ -2241,7 +2246,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>refreshStoreFilesInternal</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.640">refreshStoreFilesInternal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>> newFiles)
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.643">refreshStoreFilesInternal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>> newFiles)
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">Checks the underlying store files, and opens the files that have not
been opened, and removes the store file readers for store files no longer
@@ -2259,7 +2264,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>createStoreFileAndReader</h4>
-<pre>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.693">createStoreFileAndReader</a>(org.apache.hadoop.fs.Path p)
+<pre>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.696">createStoreFileAndReader</a>(org.apache.hadoop.fs.Path p)
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2273,7 +2278,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>createStoreFileAndReader</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.698">createStoreFileAndReader</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a> info)
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.701">createStoreFileAndReader</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a> info)
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2287,7 +2292,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>startReplayingFromWAL</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.710">startReplayingFromWAL</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.713">startReplayingFromWAL</a>()</pre>
<div class="block">This message intends to inform the MemStore that next coming updates
are going to be part of the replaying edits from WAL</div>
</li>
@@ -2298,7 +2303,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>stopReplayingFromWAL</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.718">stopReplayingFromWAL</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.721">stopReplayingFromWAL</a>()</pre>
<div class="block">This message intends to inform the MemStore that the replaying edits from WAL
are done</div>
</li>
@@ -2309,7 +2314,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>add</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.725">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.728">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSizing.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreSizing</a> memstoreSizing)</pre>
<div class="block">Adds a value to the memstore</div>
</li>
@@ -2320,7 +2325,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>add</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.742">add</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> cells,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.745">add</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> cells,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSizing.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreSizing</a> memstoreSizing)</pre>
<div class="block">Adds the specified value to the memstore</div>
</li>
@@ -2331,7 +2336,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>timeOfOldestEdit</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.757">timeOfOldestEdit</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.760">timeOfOldestEdit</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#timeOfOldestEdit--">Store</a></code></span></div>
<div class="block">When was the last edit done in the memstore</div>
<dl>
@@ -2346,7 +2351,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getStorefiles</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.765">getStorefiles</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.768">getStorefiles</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefiles--">getStorefiles</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2361,7 +2366,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>getCompactedFiles</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.770">getCompactedFiles</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.773">getCompactedFiles</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCompactedFiles--">getCompactedFiles</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2374,7 +2379,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>assertBulkLoadHFileOk</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.778">assertBulkLoadHFileOk</a>(org.apache.hadoop.fs.Path srcPath)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.781">assertBulkLoadHFileOk</a>(org.apache.hadoop.fs.Path srcPath)
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">This throws a WrongRegionException if the HFile does not fit in this region, or an
InvalidHFileException if the HFile is not valid.</div>
@@ -2390,7 +2395,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>preBulkLoadHFile</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.857">preBulkLoadHFile</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> srcPathStr,
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.860">preBulkLoadHFile</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> srcPathStr,
long seqNum)
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">This method should only be called from Region. It is assumed that the ranges of values in the
@@ -2410,7 +2415,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>bulkLoadHFile</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.862">bulkLoadHFile</a>(byte[] family,
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.865">bulkLoadHFile</a>(byte[] family,
<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> srcPathStr,
org.apache.hadoop.fs.Path dstPath)
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>
@@ -2426,7 +2431,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>bulkLoadHFile</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.884">bulkLoadHFile</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a> fileInfo)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.887">bulkLoadHFile</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a> fileInfo)
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2440,7 +2445,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>bulkLoadHFile</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.889">bulkLoadHFile</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a> sf)
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.892">bulkLoadHFile</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a> sf)
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2454,7 +2459,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>close</h4>
-<pre>public org.apache.hbase.thirdparty.com.google.common.collect.ImmutableCollection<<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.921">close</a>()
+<pre>public org.apache.hbase.thirdparty.com.google.common.collect.ImmutableCollection<<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.924">close</a>()
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">Close all the readers We don't need to worry about subsequent requests because the Region holds
a write lock that will prevent any more reads or writes.</div>
@@ -2472,7 +2477,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>snapshot</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.988">snapshot</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.991">snapshot</a>()</pre>
<div class="block">Snapshot this stores memstore. Call before running
<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#flushCache-long-org.apache.hadoop.hbase.regionserver.MemStoreSnapshot-org.apache.hadoop.hbase.monitoring.MonitoredTask-org.apache.hadoop.hbase.regionserver.throttle.ThroughputController-org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker-"><code>flushCache(long, MemStoreSnapshot, MonitoredTask, ThroughputController,
FlushLifeCycleTracker)</code></a>
@@ -2485,7 +2490,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>flushCache</h4>
-<pre>protected <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><org.apache.hadoop.fs.Path> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1006">flushCache</a>(long logCacheFlushId,
+<pre>protected <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><org.apache.hadoop.fs.Path> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1009">flushCache</a>(long logCacheFlushId,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSnapshot</a> snapshot,
<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a> throughputController,
@@ -2511,7 +2516,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>commitFile</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1059">commitFile</a>(org.apache.hadoop.fs.Path path,
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1062">commitFile</a>(org.apache.hadoop.fs.Path path,
long logCacheFlushId,
<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
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>
@@ -2533,7 +2538,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>createWriterInTmp</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1089">createWriterInTmp</a>(long maxKeyCount,
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1092">createWriterInTmp</a>(long maxKeyCount,
<a href="../../../../../org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a> compression,
boolean isCompaction,
boolean includeMVCCReadpoint,
@@ -2560,7 +2565,7 @@ public static org.apache.hadoop.fs.Path <a href="../../../../../src-ht
<ul class="blockList">
<li class="blockList">
<h4>createFileContext</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1120">createFileContext</a>(<a href="../../../../../org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a> compression,
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1123">createFileContext</a>(<a href="../.
<TRUNCATED>
[04/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
index 8d98ec3..f2d5735 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
@@ -179,4148 +179,4147 @@
<span class="sourceLineNo">171</span> * avoiding port contention if another local HBase instance is already running).<a name="line.171"></a>
<span class="sourceLineNo">172</span> * <p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.172"></a>
<span class="sourceLineNo">173</span> * setting it to true.<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * Trigger pre commit.<a name="line.174"></a>
-<span class="sourceLineNo">175</span> */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>@InterfaceAudience.Public<a name="line.176"></a>
-<span class="sourceLineNo">177</span>@SuppressWarnings("deprecation")<a name="line.177"></a>
-<span class="sourceLineNo">178</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span> /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * used in mini dfs.<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * @deprecated can be used only with mini dfs<a name="line.184"></a>
-<span class="sourceLineNo">185</span> */<a name="line.185"></a>
-<span class="sourceLineNo">186</span> @Deprecated<a name="line.186"></a>
-<span class="sourceLineNo">187</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.189"></a>
-<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * The default number of regions per regionserver when creating a pre-split<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * table.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.194"></a>
+<span class="sourceLineNo">174</span> */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>@InterfaceAudience.Public<a name="line.175"></a>
+<span class="sourceLineNo">176</span>@SuppressWarnings("deprecation")<a name="line.176"></a>
+<span class="sourceLineNo">177</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span> /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * used in mini dfs.<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * @deprecated can be used only with mini dfs<a name="line.183"></a>
+<span class="sourceLineNo">184</span> */<a name="line.184"></a>
+<span class="sourceLineNo">185</span> @Deprecated<a name="line.185"></a>
+<span class="sourceLineNo">186</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
+<span class="sourceLineNo">189</span> /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * table.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> */<a name="line.192"></a>
+<span class="sourceLineNo">193</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.197"></a>
-<span class="sourceLineNo">198</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> private MiniDFSCluster dfsCluster = null;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span> private MiniMRCluster mrCluster = null;<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.205"></a>
-<span class="sourceLineNo">206</span> private volatile boolean miniClusterRunning;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span> private String hadoopLogDir;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.210"></a>
-<span class="sourceLineNo">211</span> * HBaseTestingUtility*/<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private Path dataTestDirOnTestFS = null;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span> /**<a name="line.214"></a>
-<span class="sourceLineNo">215</span> * Shared cluster connection.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> */<a name="line.216"></a>
-<span class="sourceLineNo">217</span> private volatile Connection connection;<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static String FS_URI;<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.222"></a>
-<span class="sourceLineNo">223</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Checks to see if a specific port is available.<a name="line.226"></a>
-<span class="sourceLineNo">227</span> *<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * @param port the port number to check for availability<a name="line.228"></a>
-<span class="sourceLineNo">229</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.229"></a>
-<span class="sourceLineNo">230</span> */<a name="line.230"></a>
-<span class="sourceLineNo">231</span> public static boolean available(int port) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span> ServerSocket ss = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> DatagramSocket ds = null;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> try {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> ss = new ServerSocket(port);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> ss.setReuseAddress(true);<a name="line.236"></a>
-<span class="sourceLineNo">237</span> ds = new DatagramSocket(port);<a name="line.237"></a>
-<span class="sourceLineNo">238</span> ds.setReuseAddress(true);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> return true;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> } catch (IOException e) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // Do nothing<a name="line.241"></a>
-<span class="sourceLineNo">242</span> } finally {<a name="line.242"></a>
-<span class="sourceLineNo">243</span> if (ds != null) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> ds.close();<a name="line.244"></a>
-<span class="sourceLineNo">245</span> }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> if (ss != null) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span> try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> ss.close();<a name="line.249"></a>
-<span class="sourceLineNo">250</span> } catch (IOException e) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> /* should not be thrown */<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span> }<a name="line.253"></a>
-<span class="sourceLineNo">254</span> }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span> return false;<a name="line.256"></a>
-<span class="sourceLineNo">257</span> }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span> /**<a name="line.259"></a>
-<span class="sourceLineNo">260</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.260"></a>
-<span class="sourceLineNo">261</span> * testing.<a name="line.261"></a>
-<span class="sourceLineNo">262</span> */<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.263"></a>
-<span class="sourceLineNo">264</span> List<Object[]> configurations = new ArrayList<>();<a name="line.264"></a>
-<span class="sourceLineNo">265</span> for (Compression.Algorithm comprAlgo :<a name="line.265"></a>
-<span class="sourceLineNo">266</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> for (BloomType bloomType : BloomType.values()) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span> }<a name="line.270"></a>
-<span class="sourceLineNo">271</span> return Collections.unmodifiableList(configurations);<a name="line.271"></a>
-<span class="sourceLineNo">272</span> }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span> /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span> * Create combination of memstoreTS and tags<a name="line.275"></a>
-<span class="sourceLineNo">276</span> */<a name="line.276"></a>
-<span class="sourceLineNo">277</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> List<Object[]> configurations = new ArrayList<>();<a name="line.278"></a>
-<span class="sourceLineNo">279</span> configurations.add(new Object[] { false, false });<a name="line.279"></a>
-<span class="sourceLineNo">280</span> configurations.add(new Object[] { false, true });<a name="line.280"></a>
-<span class="sourceLineNo">281</span> configurations.add(new Object[] { true, false });<a name="line.281"></a>
-<span class="sourceLineNo">282</span> configurations.add(new Object[] { true, true });<a name="line.282"></a>
-<span class="sourceLineNo">283</span> return Collections.unmodifiableList(configurations);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> List<Object[]> configurations = new ArrayList<>();<a name="line.287"></a>
-<span class="sourceLineNo">288</span> configurations.add(new Object[] { false, false, true });<a name="line.288"></a>
-<span class="sourceLineNo">289</span> configurations.add(new Object[] { false, false, false });<a name="line.289"></a>
-<span class="sourceLineNo">290</span> configurations.add(new Object[] { false, true, true });<a name="line.290"></a>
-<span class="sourceLineNo">291</span> configurations.add(new Object[] { false, true, false });<a name="line.291"></a>
-<span class="sourceLineNo">292</span> configurations.add(new Object[] { true, false, true });<a name="line.292"></a>
-<span class="sourceLineNo">293</span> configurations.add(new Object[] { true, false, false });<a name="line.293"></a>
-<span class="sourceLineNo">294</span> configurations.add(new Object[] { true, true, true });<a name="line.294"></a>
-<span class="sourceLineNo">295</span> configurations.add(new Object[] { true, true, false });<a name="line.295"></a>
-<span class="sourceLineNo">296</span> return Collections.unmodifiableList(configurations);<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.299"></a>
-<span class="sourceLineNo">300</span> bloomAndCompressionCombinations();<a name="line.300"></a>
+<span class="sourceLineNo">196</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span> private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
+<span class="sourceLineNo">202</span> private MiniMRCluster mrCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span> private volatile boolean miniClusterRunning;<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span> private String hadoopLogDir;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
+<span class="sourceLineNo">210</span> * HBaseTestingUtility*/<a name="line.210"></a>
+<span class="sourceLineNo">211</span> private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Shared cluster connection.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private volatile Connection connection;<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static String FS_URI;<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.221"></a>
+<span class="sourceLineNo">222</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span> * Checks to see if a specific port is available.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> *<a name="line.226"></a>
+<span class="sourceLineNo">227</span> * @param port the port number to check for availability<a name="line.227"></a>
+<span class="sourceLineNo">228</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.228"></a>
+<span class="sourceLineNo">229</span> */<a name="line.229"></a>
+<span class="sourceLineNo">230</span> public static boolean available(int port) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span> ServerSocket ss = null;<a name="line.231"></a>
+<span class="sourceLineNo">232</span> DatagramSocket ds = null;<a name="line.232"></a>
+<span class="sourceLineNo">233</span> try {<a name="line.233"></a>
+<span class="sourceLineNo">234</span> ss = new ServerSocket(port);<a name="line.234"></a>
+<span class="sourceLineNo">235</span> ss.setReuseAddress(true);<a name="line.235"></a>
+<span class="sourceLineNo">236</span> ds = new DatagramSocket(port);<a name="line.236"></a>
+<span class="sourceLineNo">237</span> ds.setReuseAddress(true);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> return true;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> } catch (IOException e) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> // Do nothing<a name="line.240"></a>
+<span class="sourceLineNo">241</span> } finally {<a name="line.241"></a>
+<span class="sourceLineNo">242</span> if (ds != null) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span> ds.close();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span> if (ss != null) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span> try {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> ss.close();<a name="line.248"></a>
+<span class="sourceLineNo">249</span> } catch (IOException e) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> /* should not be thrown */<a name="line.250"></a>
+<span class="sourceLineNo">251</span> }<a name="line.251"></a>
+<span class="sourceLineNo">252</span> }<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> return false;<a name="line.255"></a>
+<span class="sourceLineNo">256</span> }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span> /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * testing.<a name="line.260"></a>
+<span class="sourceLineNo">261</span> */<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> List<Object[]> configurations = new ArrayList<>();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> for (Compression.Algorithm comprAlgo :<a name="line.264"></a>
+<span class="sourceLineNo">265</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span> for (BloomType bloomType : BloomType.values()) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.267"></a>
+<span class="sourceLineNo">268</span> }<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span> return Collections.unmodifiableList(configurations);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span> /**<a name="line.273"></a>
+<span class="sourceLineNo">274</span> * Create combination of memstoreTS and tags<a name="line.274"></a>
+<span class="sourceLineNo">275</span> */<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> List<Object[]> configurations = new ArrayList<>();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> configurations.add(new Object[] { false, false });<a name="line.278"></a>
+<span class="sourceLineNo">279</span> configurations.add(new Object[] { false, true });<a name="line.279"></a>
+<span class="sourceLineNo">280</span> configurations.add(new Object[] { true, false });<a name="line.280"></a>
+<span class="sourceLineNo">281</span> configurations.add(new Object[] { true, true });<a name="line.281"></a>
+<span class="sourceLineNo">282</span> return Collections.unmodifiableList(configurations);<a name="line.282"></a>
+<span class="sourceLineNo">283</span> }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span> List<Object[]> configurations = new ArrayList<>();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> configurations.add(new Object[] { false, false, true });<a name="line.287"></a>
+<span class="sourceLineNo">288</span> configurations.add(new Object[] { false, false, false });<a name="line.288"></a>
+<span class="sourceLineNo">289</span> configurations.add(new Object[] { false, true, true });<a name="line.289"></a>
+<span class="sourceLineNo">290</span> configurations.add(new Object[] { false, true, false });<a name="line.290"></a>
+<span class="sourceLineNo">291</span> configurations.add(new Object[] { true, false, true });<a name="line.291"></a>
+<span class="sourceLineNo">292</span> configurations.add(new Object[] { true, false, false });<a name="line.292"></a>
+<span class="sourceLineNo">293</span> configurations.add(new Object[] { true, true, true });<a name="line.293"></a>
+<span class="sourceLineNo">294</span> configurations.add(new Object[] { true, true, false });<a name="line.294"></a>
+<span class="sourceLineNo">295</span> return Collections.unmodifiableList(configurations);<a name="line.295"></a>
+<span class="sourceLineNo">296</span> }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.298"></a>
+<span class="sourceLineNo">299</span> bloomAndCompressionCombinations();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.304"></a>
-<span class="sourceLineNo">305</span> *<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> *<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.311"></a>
-<span class="sourceLineNo">312</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.312"></a>
-<span class="sourceLineNo">313</span> * at which point they will switch to using mini DFS for storage.<a name="line.313"></a>
-<span class="sourceLineNo">314</span> */<a name="line.314"></a>
-<span class="sourceLineNo">315</span> public HBaseTestingUtility() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> this(HBaseConfiguration.create());<a name="line.316"></a>
-<span class="sourceLineNo">317</span> }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.320"></a>
-<span class="sourceLineNo">321</span> *<a name="line.321"></a>
-<span class="sourceLineNo">322</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.322"></a>
-<span class="sourceLineNo">323</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.323"></a>
-<span class="sourceLineNo">324</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.324"></a>
-<span class="sourceLineNo">325</span> *<a name="line.325"></a>
-<span class="sourceLineNo">326</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.326"></a>
-<span class="sourceLineNo">327</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.327"></a>
-<span class="sourceLineNo">328</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.328"></a>
-<span class="sourceLineNo">329</span> * at which point they will switch to using mini DFS for storage.<a name="line.329"></a>
-<span class="sourceLineNo">330</span> *<a name="line.330"></a>
-<span class="sourceLineNo">331</span> * @param conf The configuration to use for further operations<a name="line.331"></a>
-<span class="sourceLineNo">332</span> */<a name="line.332"></a>
-<span class="sourceLineNo">333</span> public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span> super(conf);<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.336"></a>
-<span class="sourceLineNo">337</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> // Save this for when setting default file:// breaks things<a name="line.339"></a>
-<span class="sourceLineNo">340</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.341"></a>
-<span class="sourceLineNo">342</span> }<a name="line.342"></a>
-<span class="sourceLineNo">343</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span> // Every cluster is a local cluster until we start DFS<a name="line.346"></a>
-<span class="sourceLineNo">347</span> // Note that conf could be null, but this.conf will not be<a name="line.347"></a>
-<span class="sourceLineNo">348</span> String dataTestDir = getDataTestDir().toString();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> this.conf.set("fs.defaultFS","file:///");<a name="line.349"></a>
-<span class="sourceLineNo">350</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> // If the value for random ports isn't set set it to true, thus making<a name="line.353"></a>
-<span class="sourceLineNo">354</span> // tests opt-out for random port assignment<a name="line.354"></a>
-<span class="sourceLineNo">355</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.355"></a>
-<span class="sourceLineNo">356</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.356"></a>
-<span class="sourceLineNo">357</span> }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span> /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.360"></a>
-<span class="sourceLineNo">361</span> * @return a normal HBaseTestingUtility<a name="line.361"></a>
-<span class="sourceLineNo">362</span> */<a name="line.362"></a>
-<span class="sourceLineNo">363</span> @Deprecated<a name="line.363"></a>
-<span class="sourceLineNo">364</span> public static HBaseTestingUtility createLocalHTU() {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> return new HBaseTestingUtility();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span> /**<a name="line.368"></a>
-<span class="sourceLineNo">369</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.369"></a>
-<span class="sourceLineNo">370</span> * @return a normal HBaseTestingUtility<a name="line.370"></a>
-<span class="sourceLineNo">371</span> */<a name="line.371"></a>
-<span class="sourceLineNo">372</span> @Deprecated<a name="line.372"></a>
-<span class="sourceLineNo">373</span> public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return new HBaseTestingUtility(c);<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> /**<a name="line.377"></a>
-<span class="sourceLineNo">378</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> */<a name="line.379"></a>
-<span class="sourceLineNo">380</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.380"></a>
-<span class="sourceLineNo">381</span> closeRegionAndWAL((HRegion)r);<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> /**<a name="line.384"></a>
-<span class="sourceLineNo">385</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.385"></a>
-<span class="sourceLineNo">386</span> */<a name="line.386"></a>
-<span class="sourceLineNo">387</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> if (r == null) return;<a name="line.388"></a>
-<span class="sourceLineNo">389</span> r.close();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> if (r.getWAL() == null) return;<a name="line.390"></a>
-<span class="sourceLineNo">391</span> r.getWAL().close();<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span> /**<a name="line.394"></a>
-<span class="sourceLineNo">395</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.395"></a>
-<span class="sourceLineNo">396</span> * you use the returned Configuration since {@link Connection} instances<a name="line.396"></a>
-<span class="sourceLineNo">397</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.397"></a>
-<span class="sourceLineNo">398</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.398"></a>
-<span class="sourceLineNo">399</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.399"></a>
-<span class="sourceLineNo">400</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.400"></a>
-<span class="sourceLineNo">401</span> * make a copy and use that. Do<a name="line.401"></a>
-<span class="sourceLineNo">402</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.402"></a>
-<span class="sourceLineNo">403</span> * @return Instance of Configuration.<a name="line.403"></a>
-<span class="sourceLineNo">404</span> */<a name="line.404"></a>
-<span class="sourceLineNo">405</span> @Override<a name="line.405"></a>
-<span class="sourceLineNo">406</span> public Configuration getConfiguration() {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> return super.getConfiguration();<a name="line.407"></a>
-<span class="sourceLineNo">408</span> }<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span> this.hbaseCluster = hbaseCluster;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span> /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.415"></a>
-<span class="sourceLineNo">416</span> * Give it a random name so can have many concurrent tests running if<a name="line.416"></a>
-<span class="sourceLineNo">417</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.417"></a>
-<span class="sourceLineNo">418</span> * System property, as it's what minidfscluster bases<a name="line.418"></a>
-<span class="sourceLineNo">419</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.419"></a>
-<span class="sourceLineNo">420</span> * instances -- another instance could grab the temporary<a name="line.420"></a>
-<span class="sourceLineNo">421</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * single instance only is how the minidfscluster works.<a name="line.422"></a>
-<span class="sourceLineNo">423</span> *<a name="line.423"></a>
-<span class="sourceLineNo">424</span> * We also create the underlying directory for<a name="line.424"></a>
-<span class="sourceLineNo">425</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.425"></a>
-<span class="sourceLineNo">426</span> * in the conf, and as a system property for hadoop.tmp.dir<a name="line.426"></a>
-<span class="sourceLineNo">427</span> *<a name="line.427"></a>
-<span class="sourceLineNo">428</span> * @return The calculated data test build directory, if newly-created.<a name="line.428"></a>
-<span class="sourceLineNo">429</span> */<a name="line.429"></a>
-<span class="sourceLineNo">430</span> @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span> protected Path setupDataTestDir() {<a name="line.431"></a>
-<span class="sourceLineNo">432</span> Path testPath = super.setupDataTestDir();<a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (null == testPath) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> return null;<a name="line.434"></a>
-<span class="sourceLineNo">435</span> }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span> createSubDirAndSystemProperty(<a name="line.437"></a>
-<span class="sourceLineNo">438</span> "hadoop.log.dir",<a name="line.438"></a>
-<span class="sourceLineNo">439</span> testPath, "hadoop-log-dir");<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.441"></a>
-<span class="sourceLineNo">442</span> // we want our own value to ensure uniqueness on the same machine<a name="line.442"></a>
-<span class="sourceLineNo">443</span> createSubDirAndSystemProperty(<a name="line.443"></a>
-<span class="sourceLineNo">444</span> "hadoop.tmp.dir",<a name="line.444"></a>
-<span class="sourceLineNo">445</span> testPath, "hadoop-tmp-dir");<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.447"></a>
-<span class="sourceLineNo">448</span> createSubDir(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "mapreduce.cluster.local.dir",<a name="line.449"></a>
-<span class="sourceLineNo">450</span> testPath, "mapred-local-dir");<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span> return testPath;<a name="line.452"></a>
-<span class="sourceLineNo">453</span> }<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span> private void createSubDirAndSystemProperty(<a name="line.455"></a>
-<span class="sourceLineNo">456</span> String propertyName, Path parent, String subDirName){<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> String sysValue = System.getProperty(propertyName);<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> if (sysValue != null) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span> // There is already a value set. So we do nothing but hope<a name="line.461"></a>
-<span class="sourceLineNo">462</span> // that there will be no conflicts<a name="line.462"></a>
-<span class="sourceLineNo">463</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.463"></a>
-<span class="sourceLineNo">464</span> sysValue + " so I do NOT create it in " + parent);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> String confValue = conf.get(propertyName);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.466"></a>
-<span class="sourceLineNo">467</span> LOG.warn(<a name="line.467"></a>
-<span class="sourceLineNo">468</span> propertyName + " property value differs in configuration and system: "+<a name="line.468"></a>
-<span class="sourceLineNo">469</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.469"></a>
-<span class="sourceLineNo">470</span> " Erasing configuration value by system value."<a name="line.470"></a>
-<span class="sourceLineNo">471</span> );<a name="line.471"></a>
-<span class="sourceLineNo">472</span> }<a name="line.472"></a>
-<span class="sourceLineNo">473</span> conf.set(propertyName, sysValue);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> } else {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.475"></a>
-<span class="sourceLineNo">476</span> createSubDir(propertyName, parent, subDirName);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span> }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span> /**<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.482"></a>
-<span class="sourceLineNo">483</span> * for the test filesystem by default<a name="line.483"></a>
-<span class="sourceLineNo">484</span> * @see #setupDataTestDirOnTestFS()<a name="line.484"></a>
-<span class="sourceLineNo">485</span> * @see #getTestFileSystem()<a name="line.485"></a>
-<span class="sourceLineNo">486</span> */<a name="line.486"></a>
-<span class="sourceLineNo">487</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span> FileSystem fs = getTestFileSystem();<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span><a name="line.491"></a>
-<span class="sourceLineNo">492</span> /**<a name="line.492"></a>
-<span class="sourceLineNo">493</span> * @return META table descriptor<a name="line.493"></a>
-<span class="sourceLineNo">494</span> * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.494"></a>
-<span class="sourceLineNo">495</span> * use {@link #getMetaTableDescriptorBuilder()}<a name="line.495"></a>
-<span class="sourceLineNo">496</span> */<a name="line.496"></a>
-<span class="sourceLineNo">497</span> @Deprecated<a name="line.497"></a>
-<span class="sourceLineNo">498</span> public HTableDescriptor getMetaTableDescriptor() {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.499"></a>
-<span class="sourceLineNo">500</span> }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> /**<a name="line.502"></a>
-<span class="sourceLineNo">503</span> * @return META table descriptor<a name="line.503"></a>
-<span class="sourceLineNo">504</span> */<a name="line.504"></a>
-<span class="sourceLineNo">505</span> public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span> return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.507"></a>
-<span class="sourceLineNo">508</span> } catch (IOException e) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span> throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.509"></a>
-<span class="sourceLineNo">510</span> }<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> /**<a name="line.513"></a>
-<span class="sourceLineNo">514</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.514"></a>
-<span class="sourceLineNo">515</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.515"></a>
-<span class="sourceLineNo">516</span> * if the test relies on it.<a name="line.516"></a>
-<span class="sourceLineNo">517</span> * @return a unique path in the test filesystem<a name="line.517"></a>
-<span class="sourceLineNo">518</span> */<a name="line.518"></a>
-<span class="sourceLineNo">519</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.519"></a>
-<span class="sourceLineNo">520</span> if (dataTestDirOnTestFS == null) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span> setupDataTestDirOnTestFS();<a name="line.521"></a>
-<span class="sourceLineNo">522</span> }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span> return dataTestDirOnTestFS;<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> /**<a name="line.527"></a>
-<span class="sourceLineNo">528</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.528"></a>
-<span class="sourceLineNo">529</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.529"></a>
-<span class="sourceLineNo">530</span> * if the test relies on it.<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * @return a unique path in the test filesystem<a name="line.531"></a>
-<span class="sourceLineNo">532</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.532"></a>
-<span class="sourceLineNo">533</span> */<a name="line.533"></a>
-<span class="sourceLineNo">534</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span> /**<a name="line.538"></a>
-<span class="sourceLineNo">539</span> * Sets up a path in test filesystem to be used by tests.<a name="line.539"></a>
-<span class="sourceLineNo">540</span> * Creates a new directory if not already setup.<a name="line.540"></a>
-<span class="sourceLineNo">541</span> */<a name="line.541"></a>
-<span class="sourceLineNo">542</span> private void setupDataTestDirOnTestFS() throws IOException {<a name="line.542"></a>
-<span class="sourceLineNo">543</span> if (dataTestDirOnTestFS != null) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span> LOG.warn("Data test on test fs dir already setup in "<a name="line.544"></a>
-<span class="sourceLineNo">545</span> + dataTestDirOnTestFS.toString());<a name="line.545"></a>
-<span class="sourceLineNo">546</span> return;<a name="line.546"></a>
-<span class="sourceLineNo">547</span> }<a name="line.547"></a>
-<span class="sourceLineNo">548</span> dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.548"></a>
-<span class="sourceLineNo">549</span> }<a name="line.549"></a>
-<span class="sourceLineNo">550</span><a name="line.550"></a>
-<span class="sourceLineNo">551</span> /**<a name="line.551"></a>
-<span class="sourceLineNo">552</span> * Sets up a new path in test filesystem to be used by tests.<a name="line.552"></a>
-<span class="sourceLineNo">553</span> */<a name="line.553"></a>
-<span class="sourceLineNo">554</span> private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.554"></a>
-<span class="sourceLineNo">555</span> //The file system can be either local, mini dfs, or if the configuration<a name="line.555"></a>
-<span class="sourceLineNo">556</span> //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.556"></a>
-<span class="sourceLineNo">557</span> //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.557"></a>
-<span class="sourceLineNo">558</span> //the working directory, and create a unique sub dir there<a name="line.558"></a>
-<span class="sourceLineNo">559</span> FileSystem fs = getTestFileSystem();<a name="line.559"></a>
-<span class="sourceLineNo">560</span> Path newDataTestDir;<a name="line.560"></a>
-<span class="sourceLineNo">561</span> String randomStr = getRandomUUID().toString();<a name="line.561"></a>
-<span class="sourceLineNo">562</span> if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.563"></a>
-<span class="sourceLineNo">564</span> File dataTestDir = new File(newDataTestDir.toString());<a name="line.564"></a>
-<span class="sourceLineNo">565</span> if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.565"></a>
-<span class="sourceLineNo">566</span> } else {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> Path base = getBaseTestDirOnTestFS();<a name="line.567"></a>
-<span class="sourceLineNo">568</span> newDataTestDir = new Path(base, randomStr);<a name="line.568"></a>
-<span class="sourceLineNo">569</span> if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.569"></a>
-<span class="sourceLineNo">570</span> }<a name="line.570"></a>
-<span class="sourceLineNo">571</span> return newDataTestDir;<a name="line.571"></a>
-<span class="sourceLineNo">572</span> }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span> /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span> * Cleans the test data directory on the test filesystem.<a name="line.575"></a>
-<span class="sourceLineNo">576</span> * @return True if we removed the test dirs<a name="line.576"></a>
-<span class="sourceLineNo">577</span> * @throws IOException<a name="line.577"></a>
-<span class="sourceLineNo">578</span> */<a name="line.578"></a>
-<span class="sourceLineNo">579</span> public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span> boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> if (ret)<a name="line.581"></a>
-<span class="sourceLineNo">582</span> dataTestDirOnTestFS = null;<a name="line.582"></a>
-<span class="sourceLineNo">583</span> return ret;<a name="line.583"></a>
-<span class="sourceLineNo">584</span> }<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span> /**<a name="line.586"></a>
-<span class="sourceLineNo">587</span> * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.587"></a>
-<span class="sourceLineNo">588</span> * @return True if we removed child<a name="line.588"></a>
-<span class="sourceLineNo">589</span> * @throws IOException<a name="line.589"></a>
-<span class="sourceLineNo">590</span> */<a name="line.590"></a>
-<span class="sourceLineNo">591</span> public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return getTestFileSystem().delete(cpath, true);<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span> /**<a name="line.596"></a>
-<span class="sourceLineNo">597</span> * Start a minidfscluster.<a name="line.597"></a>
-<span class="sourceLineNo">598</span> * @param servers How many DNs to start.<a name="line.598"></a>
-<span class="sourceLineNo">599</span> * @throws Exception<a name="line.599"></a>
-<span class="sourceLineNo">600</span> * @see #shutdownMiniDFSCluster()<a name="line.600"></a>
-<span class="sourceLineNo">601</span> * @return The mini dfs cluster created.<a name="line.601"></a>
-<span class="sourceLineNo">602</span> */<a name="line.602"></a>
-<span class="sourceLineNo">603</span> public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.603"></a>
-<span class="sourceLineNo">604</span> return startMiniDFSCluster(servers, null);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> }<a name="line.605"></a>
-<span class="sourceLineNo">606</span><a name="line.606"></a>
-<span class="sourceLineNo">607</span> /**<a name="line.607"></a>
-<span class="sourceLineNo">608</span> * Start a minidfscluster.<a name="line.608"></a>
-<span class="sourceLineNo">609</span> * This is useful if you want to run datanode on distinct hosts for things<a name="line.609"></a>
-<span class="sourceLineNo">610</span> * like HDFS block location verification.<a name="line.610"></a>
-<span class="sourceLineNo">611</span> * If you start MiniDFSCluster without host names, all instances of the<a name="line.611"></a>
-<span class="sourceLineNo">612</span> * datanodes will have the same host name.<a name="line.612"></a>
-<span class="sourceLineNo">613</span> * @param hosts hostnames DNs to run on.<a name="line.613"></a>
-<span class="sourceLineNo">614</span> * @throws Exception<a name="line.614"></a>
-<span class="sourceLineNo">615</span> * @see #shutdownMiniDFSCluster()<a name="line.615"></a>
-<span class="sourceLineNo">616</span> * @return The mini dfs cluster created.<a name="line.616"></a>
-<span class="sourceLineNo">617</span> */<a name="line.617"></a>
-<span class="sourceLineNo">618</span> public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throws Exception {<a name="line.619"></a>
-<span class="sourceLineNo">620</span> if ( hosts != null && hosts.length != 0) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span> return startMiniDFSCluster(hosts.length, hosts);<a name="line.621"></a>
-<span class="sourceLineNo">622</span> } else {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> return startMiniDFSCluster(1, null);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> }<a name="line.624"></a>
-<span class="sourceLineNo">625</span> }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
-<span class="sourceLineNo">628</span> * Start a minidfscluster.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> * Can only create one.<a name="line.629"></a>
-<span class="sourceLineNo">630</span> * @param servers How many DNs to start.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> * @param hosts hostnames DNs to run on.<a name="line.631"></a>
-<span class="sourceLineNo">632</span> * @throws Exception<a name="line.632"></a>
-<span class="sourceLineNo">633</span> * @see #shutdownMiniDFSCluster()<a name="line.633"></a>
-<span class="sourceLineNo">634</span> * @return The mini dfs cluster created.<a name="line.634"></a>
-<span class="sourceLineNo">635</span> */<a name="line.635"></a>
-<span class="sourceLineNo">636</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.636"></a>
-<span class="sourceLineNo">637</span> throws Exception {<a name="line.637"></a>
-<span class="sourceLineNo">638</span> return startMiniDFSCluster(servers, null, hosts);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span> private void setFs() throws IOException {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> if(this.dfsCluster == null){<a name="line.642"></a>
-<span class="sourceLineNo">643</span> LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.643"></a>
-<span class="sourceLineNo">644</span> return;<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span> FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.646"></a>
-<span class="sourceLineNo">647</span> FSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.647"></a>
-<span class="sourceLineNo">648</span><a name="line.648"></a>
-<span class="sourceLineNo">649</span> // re-enable this check with dfs<a name="line.649"></a>
-<span class="sourceLineNo">650</span> conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.650"></a>
-<span class="sourceLineNo">651</span> }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String racks[], String hosts[])<a name="line.653"></a>
-<span class="sourceLineNo">654</span> throws Exception {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> createDirsAndSetProperties();<a name="line.655"></a>
-<span class="sourceLineNo">656</span> EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span> // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.658"></a>
-<span class="sourceLineNo">659</span> org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.util.MBeans.class).<a name="line.659"></a>
-<span class="sourceLineNo">660</span> setLevel(org.apache.log4j.Level.ERROR);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class).<a name="line.661"></a>
-<span class="sourceLineNo">662</span> setLevel(org.apache.log4j.Level.ERROR);<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span> TraceUtil.initTracer(conf);<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span> this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.666"></a>
-<span class="sourceLineNo">667</span> true, null, racks, hosts, null);<a name="line.667"></a>
-<span class="sourceLineNo">668</span><a name="line.668"></a>
-<span class="sourceLineNo">669</span> // Set this just-started cluster as our filesystem.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> setFs();<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span> // Wait for the cluster to be totally up<a name="line.672"></a>
-<span class="sourceLineNo">673</span> this.dfsCluster.waitClusterUp();<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span> //reset the test directory for test file system<a name="line.675"></a>
-<span class="sourceLineNo">676</span> dataTestDirOnTestFS = null;<a name="line.676"></a>
-<span class="sourceLineNo">677</span> String dataTestDir = getDataTestDir().toString();<a name="line.677"></a>
-<span class="sourceLineNo">678</span> conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.678"></a>
-<span class="sourceLineNo">679</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.679"></a>
-<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span> return this.dfsCluster;<a name="line.681"></a>
-<span class="sourceLineNo">682</span> }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span> public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> createDirsAndSetProperties();<a name="line.685"></a>
-<span class="sourceLineNo">686</span> dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.686"></a>
-<span class="sourceLineNo">687</span> null, null, null);<a name="line.687"></a>
-<span class="sourceLineNo">688</span> return dfsCluster;<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> /** This is used before starting HDFS and map-reduce mini-clusters */<a name="line.691"></a>
-<span class="sourceLineNo">692</span> private void createDirsAndSetProperties() throws IOException {<a name="line.692"></a>
-<span class="sourceLineNo">693</span> setupClusterTestDir();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.694"></a>
-<span class="sourceLineNo">695</span> System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.695"></a>
-<span class="sourceLineNo">696</span> createDirAndSetProperty("cache_data", "test.cache.data");<a name="line.696"></a>
-<span class="sourceLineNo">697</span> createDirAndSetProperty("hadoop_tmp", "hadoop.tmp.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span> hadoopLogDir = createDirAndSetProperty("hadoop_logs", "hadoop.log.dir");<a name="line.698"></a>
-<span class="sourceLineNo">699</span> createDirAndSetProperty("mapred_local", "mapreduce.cluster.local.dir");<a name="line.699"></a>
-<span class="sourceLineNo">700</span> createDirAndSetProperty("mapred_temp", "mapreduce.cluster.temp.dir");<a name="line.700"></a>
-<span class="sourceLineNo">701</span> enableShortCircuit();<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span> Path root = getDataTestDirOnTestFS("hadoop");<a name="line.703"></a>
-<span class="sourceLineNo">704</span> conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.704"></a>
-<span class="sourceLineNo">705</span> new Path(root, "mapred-output-dir").toString());<a name="line.705"></a>
-<span class="sourceLineNo">706</span> conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.706"></a>
-<span class="sourceLineNo">707</span> conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.707"></a>
-<span class="sourceLineNo">708</span> new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.708"></a>
-<span class="sourceLineNo">709</span> conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.709"></a>
-<span class="sourceLineNo">710</span> conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.710"></a>
-<span class="sourceLineNo">711</span> new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.711"></a>
-<span class="sourceLineNo">712</span> }<a name="line.712"></a>
+<span class="sourceLineNo">302</span> /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.303"></a>
+<span class="sourceLineNo">304</span> *<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> *<a name="line.308"></a>
+<span class="sourceLineNo">309</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.309"></a>
+<span class="sourceLineNo">310</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.310"></a>
+<span class="sourceLineNo">311</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * at which point they will switch to using mini DFS for storage.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public HBaseTestingUtility() {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> this(HBaseConfiguration.create());<a name="line.315"></a>
+<span class="sourceLineNo">316</span> }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> /**<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.319"></a>
+<span class="sourceLineNo">320</span> *<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.322"></a>
+<span class="sourceLineNo">323</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.323"></a>
+<span class="sourceLineNo">324</span> *<a name="line.324"></a>
+<span class="sourceLineNo">325</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.326"></a>
+<span class="sourceLineNo">327</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.327"></a>
+<span class="sourceLineNo">328</span> * at which point they will switch to using mini DFS for storage.<a name="line.328"></a>
+<span class="sourceLineNo">329</span> *<a name="line.329"></a>
+<span class="sourceLineNo">330</span> * @param conf The configuration to use for further operations<a name="line.330"></a>
+<span class="sourceLineNo">331</span> */<a name="line.331"></a>
+<span class="sourceLineNo">332</span> public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> super(conf);<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.335"></a>
+<span class="sourceLineNo">336</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> // Save this for when setting default file:// breaks things<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.343"></a>
+<span class="sourceLineNo">344</span> }<a name="line.344"></a>
+<span class="sourceLineNo">345</span> // Every cluster is a local cluster until we start DFS<a name="line.345"></a>
+<span class="sourceLineNo">346</span> // Note that conf could be null, but this.conf will not be<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String dataTestDir = getDataTestDir().toString();<a name="line.347"></a>
+<span class="sourceLineNo">348</span> this.conf.set("fs.defaultFS","file:///");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.349"></a>
+<span class="sourceLineNo">350</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.351"></a>
+<span class="sourceLineNo">352</span> // If the value for random ports isn't set set it to true, thus making<a name="line.352"></a>
+<span class="sourceLineNo">353</span> // tests opt-out for random port assignment<a name="line.353"></a>
+<span class="sourceLineNo">354</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.354"></a>
+<span class="sourceLineNo">355</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.355"></a>
+<span class="sourceLineNo">356</span> }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> /**<a name="line.358"></a>
+<span class="sourceLineNo">359</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @return a normal HBaseTestingUtility<a name="line.360"></a>
+<span class="sourceLineNo">361</span> */<a name="line.361"></a>
+<span class="sourceLineNo">362</span> @Deprecated<a name="line.362"></a>
+<span class="sourceLineNo">363</span> public static HBaseTestingUtility createLocalHTU() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span> return new HBaseTestingUtility();<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span> /**<a name="line.367"></a>
+<span class="sourceLineNo">368</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.368"></a>
+<span class="sourceLineNo">369</span> * @return a normal HBaseTestingUtility<a name="line.369"></a>
+<span class="sourceLineNo">370</span> */<a name="line.370"></a>
+<span class="sourceLineNo">371</span> @Deprecated<a name="line.371"></a>
+<span class="sourceLineNo">372</span> public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return new HBaseTestingUtility(c);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span> /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.377"></a>
+<span class="sourceLineNo">378</span> */<a name="line.378"></a>
+<span class="sourceLineNo">379</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> closeRegionAndWAL((HRegion)r);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.384"></a>
+<span class="sourceLineNo">385</span> */<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> if (r == null) return;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> r.close();<a name="line.388"></a>
+<span class="sourceLineNo">389</span> if (r.getWAL() == null) return;<a name="line.389"></a>
+<span class="sourceLineNo">390</span> r.getWAL().close();<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.394"></a>
+<span class="sourceLineNo">395</span> * you use the returned Configuration since {@link Connection} instances<a name="line.395"></a>
+<span class="sourceLineNo">396</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.396"></a>
+<span class="sourceLineNo">397</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.397"></a>
+<span class="sourceLineNo">398</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.398"></a>
+<span class="sourceLineNo">399</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.399"></a>
+<span class="sourceLineNo">400</span> * make a copy and use that. Do<a name="line.400"></a>
+<span class="sourceLineNo">401</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.401"></a>
+<span class="sourceLineNo">402</span> * @return Instance of Configuration.<a name="line.402"></a>
+<span class="sourceLineNo">403</span> */<a name="line.403"></a>
+<span class="sourceLineNo">404</span> @Override<a name="line.404"></a>
+<span class="sourceLineNo">405</span> public Configuration getConfiguration() {<a name="line.405"></a>
+<span class="sourceLineNo">406</span> return super.getConfiguration();<a name="line.406"></a>
+<span class="sourceLineNo">407</span> }<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> this.hbaseCluster = hbaseCluster;<a name="line.410"></a>
+<span class="sourceLineNo">411</span> }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span> /**<a name="line.413"></a>
+<span class="sourceLineNo">414</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.414"></a>
+<span class="sourceLineNo">415</span> * Give it a random name so can have many concurrent tests running if<a name="line.415"></a>
+<span class="sourceLineNo">416</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.416"></a>
+<span class="sourceLineNo">417</span> * System property, as it's what minidfscluster bases<a name="line.417"></a>
+<span class="sourceLineNo">418</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.418"></a>
+<span class="sourceLineNo">419</span> * instances -- another instance could grab the temporary<a name="line.419"></a>
+<span class="sourceLineNo">420</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> * single instance only is how the minidfscluster works.<a name="line.421"></a>
+<span class="sourceLineNo">422</span> *<a name="line.422"></a>
+<span class="sourceLineNo">423</span> * We also create the underlying directory for<a name="line.423"></a>
+<span class="sourceLineNo">424</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.424"></a>
+<span class="sourceLineNo">425</span> * in the conf, and as a system property for hadoop.tmp.dir<a name="line.425"></a>
+<span class="sourceLineNo">426</span> *<a name="line.426"></a>
+<span class="sourceLineNo">427</span> * @return The calculated data test build directory, if newly-created.<a name="line.427"></a>
+<span class="sourceLineNo">428</span> */<a name="line.428"></a>
+<span class="sourceLineNo">429</span> @Override<a name="line.429"></a>
+<span class="sourceLineNo">430</span> protected Path setupDataTestDir() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span> Path testPath = super.setupDataTestDir();<a name="line.431"></a>
+<span class="sourceLineNo">432</span> if (null == testPath) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span> return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span> }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span> createSubDirAndSystemProperty(<a name="line.436"></a>
+<span class="sourceLineNo">437</span> "hadoop.log.dir",<a name="line.437"></a>
+<span class="sourceLineNo">438</span> testPath, "hadoop-log-dir");<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.440"></a>
+<span class="sourceLineNo">441</span> // we want our own value to ensure uniqueness on the same machine<a name="line.441"></a>
+<span class="sourceLineNo">442</span> createSubDirAndSystemProperty(<a name="line.442"></a>
+<span class="sourceLineNo">443</span> "hadoop.tmp.dir",<a name="line.443"></a>
+<span class="sourceLineNo">444</span> testPath, "hadoop-tmp-dir");<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.446"></a>
+<span class="sourceLineNo">447</span> createSubDir(<a name="line.447"></a>
+<span class="sourceLineNo">448</span> "mapreduce.cluster.local.dir",<a name="line.448"></a>
+<span class="sourceLineNo">449</span> testPath, "mapred-local-dir");<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span> return testPath;<a name="line.451"></a>
+<span class="sourceLineNo">452</span> }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private void createSubDirAndSystemProperty(<a name="line.454"></a>
+<span class="sourceLineNo">455</span> String propertyName, Path parent, String subDirName){<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> String sysValue = System.getProperty(propertyName);<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span> if (sysValue != null) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span> // There is already a value set. So we do nothing but hope<a name="line.460"></a>
+<span class="sourceLineNo">461</span> // that there will be no conflicts<a name="line.461"></a>
+<span class="sourceLineNo">462</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.462"></a>
+<span class="sourceLineNo">463</span> sysValue + " so I do NOT create it in " + parent);<a name="line.463"></a>
+<span class="sourceLineNo">464</span> String confValue = conf.get(propertyName);<a name="line.464"></a>
+<span class="sourceLineNo">465</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.465"></a>
+<span class="sourceLineNo">466</span> LOG.warn(<a name="line.466"></a>
+<span class="sourceLineNo">467</span> propertyName + " property value differs in configuration and system: "+<a name="line.467"></a>
+<span class="sourceLineNo">468</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.468"></a>
+<span class="sourceLineNo">469</span> " Erasing configuration value by system value."<a name="line.469"></a>
+<span class="sourceLineNo">470</span> );<a name="line.470"></a>
+<span class="sourceLineNo">471</span> }<a name="line.471"></a>
+<span class="sourceLineNo">472</span> conf.set(propertyName, sysValue);<a name="line.472"></a>
+<span class="sourceLineNo">473</span> } else {<a name="line.473"></a>
+<span class="sourceLineNo">474</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.474"></a>
+<span class="sourceLineNo">475</span> createSubDir(propertyName, parent, subDirName);<a name="line.475"></a>
+<span class="sourceLineNo">476</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.476"></a>
+<span class="sourceLineNo">477</span> }<a name="line.477"></a>
+<span class="sourceLineNo">478</span> }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span> /**<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.481"></a>
+<span class="sourceLineNo">482</span> * for the test filesystem by default<a name="line.482"></a>
+<span class="sourceLineNo">483</span> * @see #setupDataTestDirOnTestFS()<a name="line.483"></a>
+<span class="sourceLineNo">484</span> * @see #getTestFileSystem()<a name="line.484"></a>
+<span class="sourceLineNo">485</span> */<a name="line.485"></a>
+<span class="sourceLineNo">486</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span> FileSystem fs = getTestFileSystem();<a name="line.487"></a>
+<span class="sourceLineNo">488</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.488"></a>
+<span class="sourceLineNo">489</span> }<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span> /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span> * @return META table descriptor<a name="line.492"></a>
+<span class="sourceLineNo">493</span> * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.493"></a>
+<span class="sourceLineNo">494</span> * use {@link #getMetaTableDescriptorBuilder()}<a name="line.494"></a>
+<span class="sourceLineNo">495</span> */<a name="line.495"></a>
+<span class="sourceLineNo">496</span> @Deprecated<a name="line.496"></a>
+<span class="sourceLineNo">497</span> public HTableDescriptor getMetaTableDescriptor() {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span> /**<a name="line.501"></a>
+<span class="sourceLineNo">502</span> * @return META table descriptor<a name="line.502"></a>
+<span class="sourceLineNo">503</span> */<a name="line.503"></a>
+<span class="sourceLineNo">504</span> public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.504"></a>
+<span class="sourceLineNo">505</span> try {<a name="line.505"></a>
+<span class="sourceLineNo">506</span> return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.506"></a>
+<span class="sourceLineNo">507</span> } catch (IOException e) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span> throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.508"></a>
+<span class="sourceLineNo">509</span> }<a name="line.509"></a>
+<span class="sourceLineNo">510</span> }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> /**<a name="line.512"></a>
+<span class="sourceLineNo">513</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.513"></a>
+<span class="sourceLineNo">514</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.514"></a>
+<span class="sourceLineNo">515</span> * if the test relies on it.<a name="line.515"></a>
+<span class="sourceLineNo">516</span> * @return a unique path in the test filesystem<a name="line.516"></a>
+<span class="sourceLineNo">517</span> */<a name="line.517"></a>
+<span class="sourceLineNo">518</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.518"></a>
+<span class="sourceLineNo">519</span> if (dataTestDirOnTestFS == null) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span> setupDataTestDirOnTestFS();<a name="line.520"></a>
+<span class="sourceLineNo">521</span> }<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span> return dataTestDirOnTestFS;<a name="line.523"></a>
+<span class="sourceLineNo">524</span> }<a name="line.524"></a>
+<span class="sourceLineNo">525</span><a name="line.525"></a>
+<span class="sourceLineNo">526</span> /**<a name="line.526"></a>
+<span class="sourceLineNo">527</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.527"></a>
+<span class="sourceLineNo">528</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.528"></a>
+<span class="sourceLineNo">529</span> * if the test relies on it.<a name="line.529"></a>
+<span class="sourceLineNo">530</span> * @return a unique path in the test filesystem<a name="line.530"></a>
+<span class="sourceLineNo">531</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.531"></a>
+<span class="sourceLineNo">532</span> */<a name="line.532"></a>
+<span class="sourceLineNo">533</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.534"></a>
+<span class="sourceLineNo">535</span> }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="lin
<TRUNCATED>
[06/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
index 8d98ec3..f2d5735 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
@@ -179,4148 +179,4147 @@
<span class="sourceLineNo">171</span> * avoiding port contention if another local HBase instance is already running).<a name="line.171"></a>
<span class="sourceLineNo">172</span> * <p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.172"></a>
<span class="sourceLineNo">173</span> * setting it to true.<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * Trigger pre commit.<a name="line.174"></a>
-<span class="sourceLineNo">175</span> */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>@InterfaceAudience.Public<a name="line.176"></a>
-<span class="sourceLineNo">177</span>@SuppressWarnings("deprecation")<a name="line.177"></a>
-<span class="sourceLineNo">178</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span> /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * used in mini dfs.<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * @deprecated can be used only with mini dfs<a name="line.184"></a>
-<span class="sourceLineNo">185</span> */<a name="line.185"></a>
-<span class="sourceLineNo">186</span> @Deprecated<a name="line.186"></a>
-<span class="sourceLineNo">187</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.189"></a>
-<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * The default number of regions per regionserver when creating a pre-split<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * table.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.194"></a>
+<span class="sourceLineNo">174</span> */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>@InterfaceAudience.Public<a name="line.175"></a>
+<span class="sourceLineNo">176</span>@SuppressWarnings("deprecation")<a name="line.176"></a>
+<span class="sourceLineNo">177</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span> /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * used in mini dfs.<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * @deprecated can be used only with mini dfs<a name="line.183"></a>
+<span class="sourceLineNo">184</span> */<a name="line.184"></a>
+<span class="sourceLineNo">185</span> @Deprecated<a name="line.185"></a>
+<span class="sourceLineNo">186</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
+<span class="sourceLineNo">189</span> /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * table.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> */<a name="line.192"></a>
+<span class="sourceLineNo">193</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.197"></a>
-<span class="sourceLineNo">198</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> private MiniDFSCluster dfsCluster = null;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span> private MiniMRCluster mrCluster = null;<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.205"></a>
-<span class="sourceLineNo">206</span> private volatile boolean miniClusterRunning;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span> private String hadoopLogDir;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.210"></a>
-<span class="sourceLineNo">211</span> * HBaseTestingUtility*/<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private Path dataTestDirOnTestFS = null;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span> /**<a name="line.214"></a>
-<span class="sourceLineNo">215</span> * Shared cluster connection.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> */<a name="line.216"></a>
-<span class="sourceLineNo">217</span> private volatile Connection connection;<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static String FS_URI;<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.222"></a>
-<span class="sourceLineNo">223</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Checks to see if a specific port is available.<a name="line.226"></a>
-<span class="sourceLineNo">227</span> *<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * @param port the port number to check for availability<a name="line.228"></a>
-<span class="sourceLineNo">229</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.229"></a>
-<span class="sourceLineNo">230</span> */<a name="line.230"></a>
-<span class="sourceLineNo">231</span> public static boolean available(int port) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span> ServerSocket ss = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> DatagramSocket ds = null;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> try {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> ss = new ServerSocket(port);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> ss.setReuseAddress(true);<a name="line.236"></a>
-<span class="sourceLineNo">237</span> ds = new DatagramSocket(port);<a name="line.237"></a>
-<span class="sourceLineNo">238</span> ds.setReuseAddress(true);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> return true;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> } catch (IOException e) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // Do nothing<a name="line.241"></a>
-<span class="sourceLineNo">242</span> } finally {<a name="line.242"></a>
-<span class="sourceLineNo">243</span> if (ds != null) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> ds.close();<a name="line.244"></a>
-<span class="sourceLineNo">245</span> }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> if (ss != null) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span> try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> ss.close();<a name="line.249"></a>
-<span class="sourceLineNo">250</span> } catch (IOException e) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> /* should not be thrown */<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span> }<a name="line.253"></a>
-<span class="sourceLineNo">254</span> }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span> return false;<a name="line.256"></a>
-<span class="sourceLineNo">257</span> }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span> /**<a name="line.259"></a>
-<span class="sourceLineNo">260</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.260"></a>
-<span class="sourceLineNo">261</span> * testing.<a name="line.261"></a>
-<span class="sourceLineNo">262</span> */<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.263"></a>
-<span class="sourceLineNo">264</span> List<Object[]> configurations = new ArrayList<>();<a name="line.264"></a>
-<span class="sourceLineNo">265</span> for (Compression.Algorithm comprAlgo :<a name="line.265"></a>
-<span class="sourceLineNo">266</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> for (BloomType bloomType : BloomType.values()) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span> }<a name="line.270"></a>
-<span class="sourceLineNo">271</span> return Collections.unmodifiableList(configurations);<a name="line.271"></a>
-<span class="sourceLineNo">272</span> }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span> /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span> * Create combination of memstoreTS and tags<a name="line.275"></a>
-<span class="sourceLineNo">276</span> */<a name="line.276"></a>
-<span class="sourceLineNo">277</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> List<Object[]> configurations = new ArrayList<>();<a name="line.278"></a>
-<span class="sourceLineNo">279</span> configurations.add(new Object[] { false, false });<a name="line.279"></a>
-<span class="sourceLineNo">280</span> configurations.add(new Object[] { false, true });<a name="line.280"></a>
-<span class="sourceLineNo">281</span> configurations.add(new Object[] { true, false });<a name="line.281"></a>
-<span class="sourceLineNo">282</span> configurations.add(new Object[] { true, true });<a name="line.282"></a>
-<span class="sourceLineNo">283</span> return Collections.unmodifiableList(configurations);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> List<Object[]> configurations = new ArrayList<>();<a name="line.287"></a>
-<span class="sourceLineNo">288</span> configurations.add(new Object[] { false, false, true });<a name="line.288"></a>
-<span class="sourceLineNo">289</span> configurations.add(new Object[] { false, false, false });<a name="line.289"></a>
-<span class="sourceLineNo">290</span> configurations.add(new Object[] { false, true, true });<a name="line.290"></a>
-<span class="sourceLineNo">291</span> configurations.add(new Object[] { false, true, false });<a name="line.291"></a>
-<span class="sourceLineNo">292</span> configurations.add(new Object[] { true, false, true });<a name="line.292"></a>
-<span class="sourceLineNo">293</span> configurations.add(new Object[] { true, false, false });<a name="line.293"></a>
-<span class="sourceLineNo">294</span> configurations.add(new Object[] { true, true, true });<a name="line.294"></a>
-<span class="sourceLineNo">295</span> configurations.add(new Object[] { true, true, false });<a name="line.295"></a>
-<span class="sourceLineNo">296</span> return Collections.unmodifiableList(configurations);<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.299"></a>
-<span class="sourceLineNo">300</span> bloomAndCompressionCombinations();<a name="line.300"></a>
+<span class="sourceLineNo">196</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span> private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
+<span class="sourceLineNo">202</span> private MiniMRCluster mrCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span> private volatile boolean miniClusterRunning;<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span> private String hadoopLogDir;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
+<span class="sourceLineNo">210</span> * HBaseTestingUtility*/<a name="line.210"></a>
+<span class="sourceLineNo">211</span> private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Shared cluster connection.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private volatile Connection connection;<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static String FS_URI;<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.221"></a>
+<span class="sourceLineNo">222</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span> * Checks to see if a specific port is available.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> *<a name="line.226"></a>
+<span class="sourceLineNo">227</span> * @param port the port number to check for availability<a name="line.227"></a>
+<span class="sourceLineNo">228</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.228"></a>
+<span class="sourceLineNo">229</span> */<a name="line.229"></a>
+<span class="sourceLineNo">230</span> public static boolean available(int port) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span> ServerSocket ss = null;<a name="line.231"></a>
+<span class="sourceLineNo">232</span> DatagramSocket ds = null;<a name="line.232"></a>
+<span class="sourceLineNo">233</span> try {<a name="line.233"></a>
+<span class="sourceLineNo">234</span> ss = new ServerSocket(port);<a name="line.234"></a>
+<span class="sourceLineNo">235</span> ss.setReuseAddress(true);<a name="line.235"></a>
+<span class="sourceLineNo">236</span> ds = new DatagramSocket(port);<a name="line.236"></a>
+<span class="sourceLineNo">237</span> ds.setReuseAddress(true);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> return true;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> } catch (IOException e) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> // Do nothing<a name="line.240"></a>
+<span class="sourceLineNo">241</span> } finally {<a name="line.241"></a>
+<span class="sourceLineNo">242</span> if (ds != null) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span> ds.close();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span> if (ss != null) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span> try {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> ss.close();<a name="line.248"></a>
+<span class="sourceLineNo">249</span> } catch (IOException e) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> /* should not be thrown */<a name="line.250"></a>
+<span class="sourceLineNo">251</span> }<a name="line.251"></a>
+<span class="sourceLineNo">252</span> }<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> return false;<a name="line.255"></a>
+<span class="sourceLineNo">256</span> }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span> /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * testing.<a name="line.260"></a>
+<span class="sourceLineNo">261</span> */<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> List<Object[]> configurations = new ArrayList<>();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> for (Compression.Algorithm comprAlgo :<a name="line.264"></a>
+<span class="sourceLineNo">265</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span> for (BloomType bloomType : BloomType.values()) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.267"></a>
+<span class="sourceLineNo">268</span> }<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span> return Collections.unmodifiableList(configurations);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span> /**<a name="line.273"></a>
+<span class="sourceLineNo">274</span> * Create combination of memstoreTS and tags<a name="line.274"></a>
+<span class="sourceLineNo">275</span> */<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> List<Object[]> configurations = new ArrayList<>();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> configurations.add(new Object[] { false, false });<a name="line.278"></a>
+<span class="sourceLineNo">279</span> configurations.add(new Object[] { false, true });<a name="line.279"></a>
+<span class="sourceLineNo">280</span> configurations.add(new Object[] { true, false });<a name="line.280"></a>
+<span class="sourceLineNo">281</span> configurations.add(new Object[] { true, true });<a name="line.281"></a>
+<span class="sourceLineNo">282</span> return Collections.unmodifiableList(configurations);<a name="line.282"></a>
+<span class="sourceLineNo">283</span> }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span> List<Object[]> configurations = new ArrayList<>();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> configurations.add(new Object[] { false, false, true });<a name="line.287"></a>
+<span class="sourceLineNo">288</span> configurations.add(new Object[] { false, false, false });<a name="line.288"></a>
+<span class="sourceLineNo">289</span> configurations.add(new Object[] { false, true, true });<a name="line.289"></a>
+<span class="sourceLineNo">290</span> configurations.add(new Object[] { false, true, false });<a name="line.290"></a>
+<span class="sourceLineNo">291</span> configurations.add(new Object[] { true, false, true });<a name="line.291"></a>
+<span class="sourceLineNo">292</span> configurations.add(new Object[] { true, false, false });<a name="line.292"></a>
+<span class="sourceLineNo">293</span> configurations.add(new Object[] { true, true, true });<a name="line.293"></a>
+<span class="sourceLineNo">294</span> configurations.add(new Object[] { true, true, false });<a name="line.294"></a>
+<span class="sourceLineNo">295</span> return Collections.unmodifiableList(configurations);<a name="line.295"></a>
+<span class="sourceLineNo">296</span> }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.298"></a>
+<span class="sourceLineNo">299</span> bloomAndCompressionCombinations();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.304"></a>
-<span class="sourceLineNo">305</span> *<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> *<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.311"></a>
-<span class="sourceLineNo">312</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.312"></a>
-<span class="sourceLineNo">313</span> * at which point they will switch to using mini DFS for storage.<a name="line.313"></a>
-<span class="sourceLineNo">314</span> */<a name="line.314"></a>
-<span class="sourceLineNo">315</span> public HBaseTestingUtility() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> this(HBaseConfiguration.create());<a name="line.316"></a>
-<span class="sourceLineNo">317</span> }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.320"></a>
-<span class="sourceLineNo">321</span> *<a name="line.321"></a>
-<span class="sourceLineNo">322</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.322"></a>
-<span class="sourceLineNo">323</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.323"></a>
-<span class="sourceLineNo">324</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.324"></a>
-<span class="sourceLineNo">325</span> *<a name="line.325"></a>
-<span class="sourceLineNo">326</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.326"></a>
-<span class="sourceLineNo">327</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.327"></a>
-<span class="sourceLineNo">328</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.328"></a>
-<span class="sourceLineNo">329</span> * at which point they will switch to using mini DFS for storage.<a name="line.329"></a>
-<span class="sourceLineNo">330</span> *<a name="line.330"></a>
-<span class="sourceLineNo">331</span> * @param conf The configuration to use for further operations<a name="line.331"></a>
-<span class="sourceLineNo">332</span> */<a name="line.332"></a>
-<span class="sourceLineNo">333</span> public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span> super(conf);<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.336"></a>
-<span class="sourceLineNo">337</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> // Save this for when setting default file:// breaks things<a name="line.339"></a>
-<span class="sourceLineNo">340</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.341"></a>
-<span class="sourceLineNo">342</span> }<a name="line.342"></a>
-<span class="sourceLineNo">343</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span> // Every cluster is a local cluster until we start DFS<a name="line.346"></a>
-<span class="sourceLineNo">347</span> // Note that conf could be null, but this.conf will not be<a name="line.347"></a>
-<span class="sourceLineNo">348</span> String dataTestDir = getDataTestDir().toString();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> this.conf.set("fs.defaultFS","file:///");<a name="line.349"></a>
-<span class="sourceLineNo">350</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> // If the value for random ports isn't set set it to true, thus making<a name="line.353"></a>
-<span class="sourceLineNo">354</span> // tests opt-out for random port assignment<a name="line.354"></a>
-<span class="sourceLineNo">355</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.355"></a>
-<span class="sourceLineNo">356</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.356"></a>
-<span class="sourceLineNo">357</span> }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span> /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.360"></a>
-<span class="sourceLineNo">361</span> * @return a normal HBaseTestingUtility<a name="line.361"></a>
-<span class="sourceLineNo">362</span> */<a name="line.362"></a>
-<span class="sourceLineNo">363</span> @Deprecated<a name="line.363"></a>
-<span class="sourceLineNo">364</span> public static HBaseTestingUtility createLocalHTU() {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> return new HBaseTestingUtility();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span> /**<a name="line.368"></a>
-<span class="sourceLineNo">369</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.369"></a>
-<span class="sourceLineNo">370</span> * @return a normal HBaseTestingUtility<a name="line.370"></a>
-<span class="sourceLineNo">371</span> */<a name="line.371"></a>
-<span class="sourceLineNo">372</span> @Deprecated<a name="line.372"></a>
-<span class="sourceLineNo">373</span> public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return new HBaseTestingUtility(c);<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> /**<a name="line.377"></a>
-<span class="sourceLineNo">378</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> */<a name="line.379"></a>
-<span class="sourceLineNo">380</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.380"></a>
-<span class="sourceLineNo">381</span> closeRegionAndWAL((HRegion)r);<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> /**<a name="line.384"></a>
-<span class="sourceLineNo">385</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.385"></a>
-<span class="sourceLineNo">386</span> */<a name="line.386"></a>
-<span class="sourceLineNo">387</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> if (r == null) return;<a name="line.388"></a>
-<span class="sourceLineNo">389</span> r.close();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> if (r.getWAL() == null) return;<a name="line.390"></a>
-<span class="sourceLineNo">391</span> r.getWAL().close();<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span> /**<a name="line.394"></a>
-<span class="sourceLineNo">395</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.395"></a>
-<span class="sourceLineNo">396</span> * you use the returned Configuration since {@link Connection} instances<a name="line.396"></a>
-<span class="sourceLineNo">397</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.397"></a>
-<span class="sourceLineNo">398</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.398"></a>
-<span class="sourceLineNo">399</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.399"></a>
-<span class="sourceLineNo">400</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.400"></a>
-<span class="sourceLineNo">401</span> * make a copy and use that. Do<a name="line.401"></a>
-<span class="sourceLineNo">402</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.402"></a>
-<span class="sourceLineNo">403</span> * @return Instance of Configuration.<a name="line.403"></a>
-<span class="sourceLineNo">404</span> */<a name="line.404"></a>
-<span class="sourceLineNo">405</span> @Override<a name="line.405"></a>
-<span class="sourceLineNo">406</span> public Configuration getConfiguration() {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> return super.getConfiguration();<a name="line.407"></a>
-<span class="sourceLineNo">408</span> }<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span> this.hbaseCluster = hbaseCluster;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span> /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.415"></a>
-<span class="sourceLineNo">416</span> * Give it a random name so can have many concurrent tests running if<a name="line.416"></a>
-<span class="sourceLineNo">417</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.417"></a>
-<span class="sourceLineNo">418</span> * System property, as it's what minidfscluster bases<a name="line.418"></a>
-<span class="sourceLineNo">419</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.419"></a>
-<span class="sourceLineNo">420</span> * instances -- another instance could grab the temporary<a name="line.420"></a>
-<span class="sourceLineNo">421</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * single instance only is how the minidfscluster works.<a name="line.422"></a>
-<span class="sourceLineNo">423</span> *<a name="line.423"></a>
-<span class="sourceLineNo">424</span> * We also create the underlying directory for<a name="line.424"></a>
-<span class="sourceLineNo">425</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.425"></a>
-<span class="sourceLineNo">426</span> * in the conf, and as a system property for hadoop.tmp.dir<a name="line.426"></a>
-<span class="sourceLineNo">427</span> *<a name="line.427"></a>
-<span class="sourceLineNo">428</span> * @return The calculated data test build directory, if newly-created.<a name="line.428"></a>
-<span class="sourceLineNo">429</span> */<a name="line.429"></a>
-<span class="sourceLineNo">430</span> @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span> protected Path setupDataTestDir() {<a name="line.431"></a>
-<span class="sourceLineNo">432</span> Path testPath = super.setupDataTestDir();<a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (null == testPath) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> return null;<a name="line.434"></a>
-<span class="sourceLineNo">435</span> }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span> createSubDirAndSystemProperty(<a name="line.437"></a>
-<span class="sourceLineNo">438</span> "hadoop.log.dir",<a name="line.438"></a>
-<span class="sourceLineNo">439</span> testPath, "hadoop-log-dir");<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.441"></a>
-<span class="sourceLineNo">442</span> // we want our own value to ensure uniqueness on the same machine<a name="line.442"></a>
-<span class="sourceLineNo">443</span> createSubDirAndSystemProperty(<a name="line.443"></a>
-<span class="sourceLineNo">444</span> "hadoop.tmp.dir",<a name="line.444"></a>
-<span class="sourceLineNo">445</span> testPath, "hadoop-tmp-dir");<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.447"></a>
-<span class="sourceLineNo">448</span> createSubDir(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "mapreduce.cluster.local.dir",<a name="line.449"></a>
-<span class="sourceLineNo">450</span> testPath, "mapred-local-dir");<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span> return testPath;<a name="line.452"></a>
-<span class="sourceLineNo">453</span> }<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span> private void createSubDirAndSystemProperty(<a name="line.455"></a>
-<span class="sourceLineNo">456</span> String propertyName, Path parent, String subDirName){<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> String sysValue = System.getProperty(propertyName);<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> if (sysValue != null) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span> // There is already a value set. So we do nothing but hope<a name="line.461"></a>
-<span class="sourceLineNo">462</span> // that there will be no conflicts<a name="line.462"></a>
-<span class="sourceLineNo">463</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.463"></a>
-<span class="sourceLineNo">464</span> sysValue + " so I do NOT create it in " + parent);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> String confValue = conf.get(propertyName);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.466"></a>
-<span class="sourceLineNo">467</span> LOG.warn(<a name="line.467"></a>
-<span class="sourceLineNo">468</span> propertyName + " property value differs in configuration and system: "+<a name="line.468"></a>
-<span class="sourceLineNo">469</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.469"></a>
-<span class="sourceLineNo">470</span> " Erasing configuration value by system value."<a name="line.470"></a>
-<span class="sourceLineNo">471</span> );<a name="line.471"></a>
-<span class="sourceLineNo">472</span> }<a name="line.472"></a>
-<span class="sourceLineNo">473</span> conf.set(propertyName, sysValue);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> } else {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.475"></a>
-<span class="sourceLineNo">476</span> createSubDir(propertyName, parent, subDirName);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span> }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span> /**<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.482"></a>
-<span class="sourceLineNo">483</span> * for the test filesystem by default<a name="line.483"></a>
-<span class="sourceLineNo">484</span> * @see #setupDataTestDirOnTestFS()<a name="line.484"></a>
-<span class="sourceLineNo">485</span> * @see #getTestFileSystem()<a name="line.485"></a>
-<span class="sourceLineNo">486</span> */<a name="line.486"></a>
-<span class="sourceLineNo">487</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span> FileSystem fs = getTestFileSystem();<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span><a name="line.491"></a>
-<span class="sourceLineNo">492</span> /**<a name="line.492"></a>
-<span class="sourceLineNo">493</span> * @return META table descriptor<a name="line.493"></a>
-<span class="sourceLineNo">494</span> * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.494"></a>
-<span class="sourceLineNo">495</span> * use {@link #getMetaTableDescriptorBuilder()}<a name="line.495"></a>
-<span class="sourceLineNo">496</span> */<a name="line.496"></a>
-<span class="sourceLineNo">497</span> @Deprecated<a name="line.497"></a>
-<span class="sourceLineNo">498</span> public HTableDescriptor getMetaTableDescriptor() {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.499"></a>
-<span class="sourceLineNo">500</span> }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> /**<a name="line.502"></a>
-<span class="sourceLineNo">503</span> * @return META table descriptor<a name="line.503"></a>
-<span class="sourceLineNo">504</span> */<a name="line.504"></a>
-<span class="sourceLineNo">505</span> public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span> return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.507"></a>
-<span class="sourceLineNo">508</span> } catch (IOException e) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span> throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.509"></a>
-<span class="sourceLineNo">510</span> }<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> /**<a name="line.513"></a>
-<span class="sourceLineNo">514</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.514"></a>
-<span class="sourceLineNo">515</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.515"></a>
-<span class="sourceLineNo">516</span> * if the test relies on it.<a name="line.516"></a>
-<span class="sourceLineNo">517</span> * @return a unique path in the test filesystem<a name="line.517"></a>
-<span class="sourceLineNo">518</span> */<a name="line.518"></a>
-<span class="sourceLineNo">519</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.519"></a>
-<span class="sourceLineNo">520</span> if (dataTestDirOnTestFS == null) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span> setupDataTestDirOnTestFS();<a name="line.521"></a>
-<span class="sourceLineNo">522</span> }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span> return dataTestDirOnTestFS;<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> /**<a name="line.527"></a>
-<span class="sourceLineNo">528</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.528"></a>
-<span class="sourceLineNo">529</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.529"></a>
-<span class="sourceLineNo">530</span> * if the test relies on it.<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * @return a unique path in the test filesystem<a name="line.531"></a>
-<span class="sourceLineNo">532</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.532"></a>
-<span class="sourceLineNo">533</span> */<a name="line.533"></a>
-<span class="sourceLineNo">534</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span> /**<a name="line.538"></a>
-<span class="sourceLineNo">539</span> * Sets up a path in test filesystem to be used by tests.<a name="line.539"></a>
-<span class="sourceLineNo">540</span> * Creates a new directory if not already setup.<a name="line.540"></a>
-<span class="sourceLineNo">541</span> */<a name="line.541"></a>
-<span class="sourceLineNo">542</span> private void setupDataTestDirOnTestFS() throws IOException {<a name="line.542"></a>
-<span class="sourceLineNo">543</span> if (dataTestDirOnTestFS != null) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span> LOG.warn("Data test on test fs dir already setup in "<a name="line.544"></a>
-<span class="sourceLineNo">545</span> + dataTestDirOnTestFS.toString());<a name="line.545"></a>
-<span class="sourceLineNo">546</span> return;<a name="line.546"></a>
-<span class="sourceLineNo">547</span> }<a name="line.547"></a>
-<span class="sourceLineNo">548</span> dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.548"></a>
-<span class="sourceLineNo">549</span> }<a name="line.549"></a>
-<span class="sourceLineNo">550</span><a name="line.550"></a>
-<span class="sourceLineNo">551</span> /**<a name="line.551"></a>
-<span class="sourceLineNo">552</span> * Sets up a new path in test filesystem to be used by tests.<a name="line.552"></a>
-<span class="sourceLineNo">553</span> */<a name="line.553"></a>
-<span class="sourceLineNo">554</span> private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.554"></a>
-<span class="sourceLineNo">555</span> //The file system can be either local, mini dfs, or if the configuration<a name="line.555"></a>
-<span class="sourceLineNo">556</span> //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.556"></a>
-<span class="sourceLineNo">557</span> //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.557"></a>
-<span class="sourceLineNo">558</span> //the working directory, and create a unique sub dir there<a name="line.558"></a>
-<span class="sourceLineNo">559</span> FileSystem fs = getTestFileSystem();<a name="line.559"></a>
-<span class="sourceLineNo">560</span> Path newDataTestDir;<a name="line.560"></a>
-<span class="sourceLineNo">561</span> String randomStr = getRandomUUID().toString();<a name="line.561"></a>
-<span class="sourceLineNo">562</span> if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.563"></a>
-<span class="sourceLineNo">564</span> File dataTestDir = new File(newDataTestDir.toString());<a name="line.564"></a>
-<span class="sourceLineNo">565</span> if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.565"></a>
-<span class="sourceLineNo">566</span> } else {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> Path base = getBaseTestDirOnTestFS();<a name="line.567"></a>
-<span class="sourceLineNo">568</span> newDataTestDir = new Path(base, randomStr);<a name="line.568"></a>
-<span class="sourceLineNo">569</span> if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.569"></a>
-<span class="sourceLineNo">570</span> }<a name="line.570"></a>
-<span class="sourceLineNo">571</span> return newDataTestDir;<a name="line.571"></a>
-<span class="sourceLineNo">572</span> }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span> /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span> * Cleans the test data directory on the test filesystem.<a name="line.575"></a>
-<span class="sourceLineNo">576</span> * @return True if we removed the test dirs<a name="line.576"></a>
-<span class="sourceLineNo">577</span> * @throws IOException<a name="line.577"></a>
-<span class="sourceLineNo">578</span> */<a name="line.578"></a>
-<span class="sourceLineNo">579</span> public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span> boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> if (ret)<a name="line.581"></a>
-<span class="sourceLineNo">582</span> dataTestDirOnTestFS = null;<a name="line.582"></a>
-<span class="sourceLineNo">583</span> return ret;<a name="line.583"></a>
-<span class="sourceLineNo">584</span> }<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span> /**<a name="line.586"></a>
-<span class="sourceLineNo">587</span> * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.587"></a>
-<span class="sourceLineNo">588</span> * @return True if we removed child<a name="line.588"></a>
-<span class="sourceLineNo">589</span> * @throws IOException<a name="line.589"></a>
-<span class="sourceLineNo">590</span> */<a name="line.590"></a>
-<span class="sourceLineNo">591</span> public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return getTestFileSystem().delete(cpath, true);<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span> /**<a name="line.596"></a>
-<span class="sourceLineNo">597</span> * Start a minidfscluster.<a name="line.597"></a>
-<span class="sourceLineNo">598</span> * @param servers How many DNs to start.<a name="line.598"></a>
-<span class="sourceLineNo">599</span> * @throws Exception<a name="line.599"></a>
-<span class="sourceLineNo">600</span> * @see #shutdownMiniDFSCluster()<a name="line.600"></a>
-<span class="sourceLineNo">601</span> * @return The mini dfs cluster created.<a name="line.601"></a>
-<span class="sourceLineNo">602</span> */<a name="line.602"></a>
-<span class="sourceLineNo">603</span> public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.603"></a>
-<span class="sourceLineNo">604</span> return startMiniDFSCluster(servers, null);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> }<a name="line.605"></a>
-<span class="sourceLineNo">606</span><a name="line.606"></a>
-<span class="sourceLineNo">607</span> /**<a name="line.607"></a>
-<span class="sourceLineNo">608</span> * Start a minidfscluster.<a name="line.608"></a>
-<span class="sourceLineNo">609</span> * This is useful if you want to run datanode on distinct hosts for things<a name="line.609"></a>
-<span class="sourceLineNo">610</span> * like HDFS block location verification.<a name="line.610"></a>
-<span class="sourceLineNo">611</span> * If you start MiniDFSCluster without host names, all instances of the<a name="line.611"></a>
-<span class="sourceLineNo">612</span> * datanodes will have the same host name.<a name="line.612"></a>
-<span class="sourceLineNo">613</span> * @param hosts hostnames DNs to run on.<a name="line.613"></a>
-<span class="sourceLineNo">614</span> * @throws Exception<a name="line.614"></a>
-<span class="sourceLineNo">615</span> * @see #shutdownMiniDFSCluster()<a name="line.615"></a>
-<span class="sourceLineNo">616</span> * @return The mini dfs cluster created.<a name="line.616"></a>
-<span class="sourceLineNo">617</span> */<a name="line.617"></a>
-<span class="sourceLineNo">618</span> public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throws Exception {<a name="line.619"></a>
-<span class="sourceLineNo">620</span> if ( hosts != null && hosts.length != 0) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span> return startMiniDFSCluster(hosts.length, hosts);<a name="line.621"></a>
-<span class="sourceLineNo">622</span> } else {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> return startMiniDFSCluster(1, null);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> }<a name="line.624"></a>
-<span class="sourceLineNo">625</span> }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
-<span class="sourceLineNo">628</span> * Start a minidfscluster.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> * Can only create one.<a name="line.629"></a>
-<span class="sourceLineNo">630</span> * @param servers How many DNs to start.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> * @param hosts hostnames DNs to run on.<a name="line.631"></a>
-<span class="sourceLineNo">632</span> * @throws Exception<a name="line.632"></a>
-<span class="sourceLineNo">633</span> * @see #shutdownMiniDFSCluster()<a name="line.633"></a>
-<span class="sourceLineNo">634</span> * @return The mini dfs cluster created.<a name="line.634"></a>
-<span class="sourceLineNo">635</span> */<a name="line.635"></a>
-<span class="sourceLineNo">636</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.636"></a>
-<span class="sourceLineNo">637</span> throws Exception {<a name="line.637"></a>
-<span class="sourceLineNo">638</span> return startMiniDFSCluster(servers, null, hosts);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span> private void setFs() throws IOException {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> if(this.dfsCluster == null){<a name="line.642"></a>
-<span class="sourceLineNo">643</span> LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.643"></a>
-<span class="sourceLineNo">644</span> return;<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span> FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.646"></a>
-<span class="sourceLineNo">647</span> FSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.647"></a>
-<span class="sourceLineNo">648</span><a name="line.648"></a>
-<span class="sourceLineNo">649</span> // re-enable this check with dfs<a name="line.649"></a>
-<span class="sourceLineNo">650</span> conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.650"></a>
-<span class="sourceLineNo">651</span> }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String racks[], String hosts[])<a name="line.653"></a>
-<span class="sourceLineNo">654</span> throws Exception {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> createDirsAndSetProperties();<a name="line.655"></a>
-<span class="sourceLineNo">656</span> EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span> // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.658"></a>
-<span class="sourceLineNo">659</span> org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.util.MBeans.class).<a name="line.659"></a>
-<span class="sourceLineNo">660</span> setLevel(org.apache.log4j.Level.ERROR);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class).<a name="line.661"></a>
-<span class="sourceLineNo">662</span> setLevel(org.apache.log4j.Level.ERROR);<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span> TraceUtil.initTracer(conf);<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span> this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.666"></a>
-<span class="sourceLineNo">667</span> true, null, racks, hosts, null);<a name="line.667"></a>
-<span class="sourceLineNo">668</span><a name="line.668"></a>
-<span class="sourceLineNo">669</span> // Set this just-started cluster as our filesystem.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> setFs();<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span> // Wait for the cluster to be totally up<a name="line.672"></a>
-<span class="sourceLineNo">673</span> this.dfsCluster.waitClusterUp();<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span> //reset the test directory for test file system<a name="line.675"></a>
-<span class="sourceLineNo">676</span> dataTestDirOnTestFS = null;<a name="line.676"></a>
-<span class="sourceLineNo">677</span> String dataTestDir = getDataTestDir().toString();<a name="line.677"></a>
-<span class="sourceLineNo">678</span> conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.678"></a>
-<span class="sourceLineNo">679</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.679"></a>
-<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span> return this.dfsCluster;<a name="line.681"></a>
-<span class="sourceLineNo">682</span> }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span> public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> createDirsAndSetProperties();<a name="line.685"></a>
-<span class="sourceLineNo">686</span> dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.686"></a>
-<span class="sourceLineNo">687</span> null, null, null);<a name="line.687"></a>
-<span class="sourceLineNo">688</span> return dfsCluster;<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> /** This is used before starting HDFS and map-reduce mini-clusters */<a name="line.691"></a>
-<span class="sourceLineNo">692</span> private void createDirsAndSetProperties() throws IOException {<a name="line.692"></a>
-<span class="sourceLineNo">693</span> setupClusterTestDir();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.694"></a>
-<span class="sourceLineNo">695</span> System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.695"></a>
-<span class="sourceLineNo">696</span> createDirAndSetProperty("cache_data", "test.cache.data");<a name="line.696"></a>
-<span class="sourceLineNo">697</span> createDirAndSetProperty("hadoop_tmp", "hadoop.tmp.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span> hadoopLogDir = createDirAndSetProperty("hadoop_logs", "hadoop.log.dir");<a name="line.698"></a>
-<span class="sourceLineNo">699</span> createDirAndSetProperty("mapred_local", "mapreduce.cluster.local.dir");<a name="line.699"></a>
-<span class="sourceLineNo">700</span> createDirAndSetProperty("mapred_temp", "mapreduce.cluster.temp.dir");<a name="line.700"></a>
-<span class="sourceLineNo">701</span> enableShortCircuit();<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span> Path root = getDataTestDirOnTestFS("hadoop");<a name="line.703"></a>
-<span class="sourceLineNo">704</span> conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.704"></a>
-<span class="sourceLineNo">705</span> new Path(root, "mapred-output-dir").toString());<a name="line.705"></a>
-<span class="sourceLineNo">706</span> conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.706"></a>
-<span class="sourceLineNo">707</span> conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.707"></a>
-<span class="sourceLineNo">708</span> new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.708"></a>
-<span class="sourceLineNo">709</span> conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.709"></a>
-<span class="sourceLineNo">710</span> conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.710"></a>
-<span class="sourceLineNo">711</span> new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.711"></a>
-<span class="sourceLineNo">712</span> }<a name="line.712"></a>
+<span class="sourceLineNo">302</span> /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.303"></a>
+<span class="sourceLineNo">304</span> *<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> *<a name="line.308"></a>
+<span class="sourceLineNo">309</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.309"></a>
+<span class="sourceLineNo">310</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.310"></a>
+<span class="sourceLineNo">311</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * at which point they will switch to using mini DFS for storage.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public HBaseTestingUtility() {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> this(HBaseConfiguration.create());<a name="line.315"></a>
+<span class="sourceLineNo">316</span> }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> /**<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.319"></a>
+<span class="sourceLineNo">320</span> *<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.322"></a>
+<span class="sourceLineNo">323</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.323"></a>
+<span class="sourceLineNo">324</span> *<a name="line.324"></a>
+<span class="sourceLineNo">325</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.326"></a>
+<span class="sourceLineNo">327</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.327"></a>
+<span class="sourceLineNo">328</span> * at which point they will switch to using mini DFS for storage.<a name="line.328"></a>
+<span class="sourceLineNo">329</span> *<a name="line.329"></a>
+<span class="sourceLineNo">330</span> * @param conf The configuration to use for further operations<a name="line.330"></a>
+<span class="sourceLineNo">331</span> */<a name="line.331"></a>
+<span class="sourceLineNo">332</span> public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> super(conf);<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.335"></a>
+<span class="sourceLineNo">336</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> // Save this for when setting default file:// breaks things<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.343"></a>
+<span class="sourceLineNo">344</span> }<a name="line.344"></a>
+<span class="sourceLineNo">345</span> // Every cluster is a local cluster until we start DFS<a name="line.345"></a>
+<span class="sourceLineNo">346</span> // Note that conf could be null, but this.conf will not be<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String dataTestDir = getDataTestDir().toString();<a name="line.347"></a>
+<span class="sourceLineNo">348</span> this.conf.set("fs.defaultFS","file:///");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.349"></a>
+<span class="sourceLineNo">350</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.351"></a>
+<span class="sourceLineNo">352</span> // If the value for random ports isn't set set it to true, thus making<a name="line.352"></a>
+<span class="sourceLineNo">353</span> // tests opt-out for random port assignment<a name="line.353"></a>
+<span class="sourceLineNo">354</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.354"></a>
+<span class="sourceLineNo">355</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.355"></a>
+<span class="sourceLineNo">356</span> }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> /**<a name="line.358"></a>
+<span class="sourceLineNo">359</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @return a normal HBaseTestingUtility<a name="line.360"></a>
+<span class="sourceLineNo">361</span> */<a name="line.361"></a>
+<span class="sourceLineNo">362</span> @Deprecated<a name="line.362"></a>
+<span class="sourceLineNo">363</span> public static HBaseTestingUtility createLocalHTU() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span> return new HBaseTestingUtility();<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span> /**<a name="line.367"></a>
+<span class="sourceLineNo">368</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.368"></a>
+<span class="sourceLineNo">369</span> * @return a normal HBaseTestingUtility<a name="line.369"></a>
+<span class="sourceLineNo">370</span> */<a name="line.370"></a>
+<span class="sourceLineNo">371</span> @Deprecated<a name="line.371"></a>
+<span class="sourceLineNo">372</span> public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return new HBaseTestingUtility(c);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span> /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.377"></a>
+<span class="sourceLineNo">378</span> */<a name="line.378"></a>
+<span class="sourceLineNo">379</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> closeRegionAndWAL((HRegion)r);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.384"></a>
+<span class="sourceLineNo">385</span> */<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> if (r == null) return;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> r.close();<a name="line.388"></a>
+<span class="sourceLineNo">389</span> if (r.getWAL() == null) return;<a name="line.389"></a>
+<span class="sourceLineNo">390</span> r.getWAL().close();<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.394"></a>
+<span class="sourceLineNo">395</span> * you use the returned Configuration since {@link Connection} instances<a name="line.395"></a>
+<span class="sourceLineNo">396</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.396"></a>
+<span class="sourceLineNo">397</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.397"></a>
+<span class="sourceLineNo">398</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.398"></a>
+<span class="sourceLineNo">399</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.399"></a>
+<span class="sourceLineNo">400</span> * make a copy and use that. Do<a name="line.400"></a>
+<span class="sourceLineNo">401</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.401"></a>
+<span class="sourceLineNo">402</span> * @return Instance of Configuration.<a name="line.402"></a>
+<span class="sourceLineNo">403</span> */<a name="line.403"></a>
+<span class="sourceLineNo">404</span> @Override<a name="line.404"></a>
+<span class="sourceLineNo">405</span> public Configuration getConfiguration() {<a name="line.405"></a>
+<span class="sourceLineNo">406</span> return super.getConfiguration();<a name="line.406"></a>
+<span class="sourceLineNo">407</span> }<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> this.hbaseCluster = hbaseCluster;<a name="line.410"></a>
+<span class="sourceLineNo">411</span> }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span> /**<a name="line.413"></a>
+<span class="sourceLineNo">414</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.414"></a>
+<span class="sourceLineNo">415</span> * Give it a random name so can have many concurrent tests running if<a name="line.415"></a>
+<span class="sourceLineNo">416</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.416"></a>
+<span class="sourceLineNo">417</span> * System property, as it's what minidfscluster bases<a name="line.417"></a>
+<span class="sourceLineNo">418</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.418"></a>
+<span class="sourceLineNo">419</span> * instances -- another instance could grab the temporary<a name="line.419"></a>
+<span class="sourceLineNo">420</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> * single instance only is how the minidfscluster works.<a name="line.421"></a>
+<span class="sourceLineNo">422</span> *<a name="line.422"></a>
+<span class="sourceLineNo">423</span> * We also create the underlying directory for<a name="line.423"></a>
+<span class="sourceLineNo">424</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.424"></a>
+<span class="sourceLineNo">425</span> * in the conf, and as a system property for hadoop.tmp.dir<a name="line.425"></a>
+<span class="sourceLineNo">426</span> *<a name="line.426"></a>
+<span class="sourceLineNo">427</span> * @return The calculated data test build directory, if newly-created.<a name="line.427"></a>
+<span class="sourceLineNo">428</span> */<a name="line.428"></a>
+<span class="sourceLineNo">429</span> @Override<a name="line.429"></a>
+<span class="sourceLineNo">430</span> protected Path setupDataTestDir() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span> Path testPath = super.setupDataTestDir();<a name="line.431"></a>
+<span class="sourceLineNo">432</span> if (null == testPath) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span> return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span> }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span> createSubDirAndSystemProperty(<a name="line.436"></a>
+<span class="sourceLineNo">437</span> "hadoop.log.dir",<a name="line.437"></a>
+<span class="sourceLineNo">438</span> testPath, "hadoop-log-dir");<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.440"></a>
+<span class="sourceLineNo">441</span> // we want our own value to ensure uniqueness on the same machine<a name="line.441"></a>
+<span class="sourceLineNo">442</span> createSubDirAndSystemProperty(<a name="line.442"></a>
+<span class="sourceLineNo">443</span> "hadoop.tmp.dir",<a name="line.443"></a>
+<span class="sourceLineNo">444</span> testPath, "hadoop-tmp-dir");<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.446"></a>
+<span class="sourceLineNo">447</span> createSubDir(<a name="line.447"></a>
+<span class="sourceLineNo">448</span> "mapreduce.cluster.local.dir",<a name="line.448"></a>
+<span class="sourceLineNo">449</span> testPath, "mapred-local-dir");<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span> return testPath;<a name="line.451"></a>
+<span class="sourceLineNo">452</span> }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private void createSubDirAndSystemProperty(<a name="line.454"></a>
+<span class="sourceLineNo">455</span> String propertyName, Path parent, String subDirName){<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> String sysValue = System.getProperty(propertyName);<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span> if (sysValue != null) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span> // There is already a value set. So we do nothing but hope<a name="line.460"></a>
+<span class="sourceLineNo">461</span> // that there will be no conflicts<a name="line.461"></a>
+<span class="sourceLineNo">462</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.462"></a>
+<span class="sourceLineNo">463</span> sysValue + " so I do NOT create it in " + parent);<a name="line.463"></a>
+<span class="sourceLineNo">464</span> String confValue = conf.get(propertyName);<a name="line.464"></a>
+<span class="sourceLineNo">465</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.465"></a>
+<span class="sourceLineNo">466</span> LOG.warn(<a name="line.466"></a>
+<span class="sourceLineNo">467</span> propertyName + " property value differs in configuration and system: "+<a name="line.467"></a>
+<span class="sourceLineNo">468</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.468"></a>
+<span class="sourceLineNo">469</span> " Erasing configuration value by system value."<a name="line.469"></a>
+<span class="sourceLineNo">470</span> );<a name="line.470"></a>
+<span class="sourceLineNo">471</span> }<a name="line.471"></a>
+<span class="sourceLineNo">472</span> conf.set(propertyName, sysValue);<a name="line.472"></a>
+<span class="sourceLineNo">473</span> } else {<a name="line.473"></a>
+<span class="sourceLineNo">474</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.474"></a>
+<span class="sourceLineNo">475</span> createSubDir(propertyName, parent, subDirName);<a name="line.475"></a>
+<span class="sourceLineNo">476</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.476"></a>
+<span class="sourceLineNo">477</span> }<a name="line.477"></a>
+<span class="sourceLineNo">478</span> }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span> /**<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.481"></a>
+<span class="sourceLineNo">482</span> * for the test filesystem by default<a name="line.482"></a>
+<span class="sourceLineNo">483</span> * @see #setupDataTestDirOnTestFS()<a name="line.483"></a>
+<span class="sourceLineNo">484</span> * @see #getTestFileSystem()<a name="line.484"></a>
+<span class="sourceLineNo">485</span> */<a name="line.485"></a>
+<span class="sourceLineNo">486</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span> FileSystem fs = getTestFileSystem();<a name="line.487"></a>
+<span class="sourceLineNo">488</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.488"></a>
+<span class="sourceLineNo">489</span> }<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span> /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span> * @return META table descriptor<a name="line.492"></a>
+<span class="sourceLineNo">493</span> * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.493"></a>
+<span class="sourceLineNo">494</span> * use {@link #getMetaTableDescriptorBuilder()}<a name="line.494"></a>
+<span class="sourceLineNo">495</span> */<a name="line.495"></a>
+<span class="sourceLineNo">496</span> @Deprecated<a name="line.496"></a>
+<span class="sourceLineNo">497</span> public HTableDescriptor getMetaTableDescriptor() {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span> /**<a name="line.501"></a>
+<span class="sourceLineNo">502</span> * @return META table descriptor<a name="line.502"></a>
+<span class="sourceLineNo">503</span> */<a name="line.503"></a>
+<span class="sourceLineNo">504</span> public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.504"></a>
+<span class="sourceLineNo">505</span> try {<a name="line.505"></a>
+<span class="sourceLineNo">506</span> return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.506"></a>
+<span class="sourceLineNo">507</span> } catch (IOException e) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span> throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.508"></a>
+<span class="sourceLineNo">509</span> }<a name="line.509"></a>
+<span class="sourceLineNo">510</span> }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> /**<a name="line.512"></a>
+<span class="sourceLineNo">513</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.513"></a>
+<span class="sourceLineNo">514</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.514"></a>
+<span class="sourceLineNo">515</span> * if the test relies on it.<a name="line.515"></a>
+<span class="sourceLineNo">516</span> * @return a unique path in the test filesystem<a name="line.516"></a>
+<span class="sourceLineNo">517</span> */<a name="line.517"></a>
+<span class="sourceLineNo">518</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.518"></a>
+<span class="sourceLineNo">519</span> if (dataTestDirOnTestFS == null) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span> setupDataTestDirOnTestFS();<a name="line.520"></a>
+<span class="sourceLineNo">521</span> }<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span> return dataTestDirOnTestFS;<a name="line.523"></a>
+<span class="sourceLineNo">524</span> }<a name="line.524"></a>
+<span class="sourceLineNo">525</span><a name="line.525"></a>
+<span class="sourceLineNo">526</span> /**<a name="line.526"></a>
+<span class="sourceLineNo">527</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.527"></a>
+<span class="sourceLineNo">528</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.528"></a>
+<span class="sourceLineNo">529</span> * if the test relies on it.<a name="line.529"></a>
+<span class="sourceLineNo">530</span> * @return a unique path in the test filesystem<a name="line.530"></a>
+<span class="sourceLineNo">531</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.531"></a>
+<span class="sourceLineNo">532</span> */<a name="line.532"></a>
+<span class="sourceLineNo">533</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.534"></a>
+<span class="s
<TRUNCATED>
[28/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
index 4daf6ee..03f4a8b 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -1174,7 +1174,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>init</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.671">init</a>(int numThreads,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.669">init</a>(int numThreads,
boolean abortOnCorruption)
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">Initialize the procedure executor, but do not start workers. We will start them later.
@@ -1198,7 +1198,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>startWorkers</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.716">startWorkers</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.714">startWorkers</a>()
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">Start the workers.</div>
<dl>
@@ -1213,7 +1213,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.735">stop</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.733">stop</a>()</pre>
</li>
</ul>
<a name="join--">
@@ -1222,7 +1222,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>join</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.746">join</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.744">join</a>()</pre>
</li>
</ul>
<a name="refreshConfiguration-org.apache.hadoop.conf.Configuration-">
@@ -1231,7 +1231,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>refreshConfiguration</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.777">refreshConfiguration</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.775">refreshConfiguration</a>(org.apache.hadoop.conf.Configuration conf)</pre>
</li>
</ul>
<a name="isRunning--">
@@ -1240,7 +1240,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isRunning</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.786">isRunning</a>()</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.784">isRunning</a>()</pre>
</li>
</ul>
<a name="getWorkerThreadCount--">
@@ -1249,7 +1249,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getWorkerThreadCount</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.793">getWorkerThreadCount</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.791">getWorkerThreadCount</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the current number of worker threads.</dd>
@@ -1262,7 +1262,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getCorePoolSize</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.800">getCorePoolSize</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.798">getCorePoolSize</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the core pool size settings.</dd>
@@ -1275,7 +1275,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getActiveExecutorCount</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.804">getActiveExecutorCount</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.802">getActiveExecutorCount</a>()</pre>
</li>
</ul>
<a name="getEnvironment--">
@@ -1284,7 +1284,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getEnvironment</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.808">getEnvironment</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.806">getEnvironment</a>()</pre>
</li>
</ul>
<a name="getStore--">
@@ -1293,7 +1293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getStore</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.812">getStore</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.810">getStore</a>()</pre>
</li>
</ul>
<a name="getScheduler--">
@@ -1302,7 +1302,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getScheduler</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureScheduler.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureScheduler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.816">getScheduler</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureScheduler.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureScheduler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.814">getScheduler</a>()</pre>
</li>
</ul>
<a name="setKeepAliveTime-long-java.util.concurrent.TimeUnit-">
@@ -1311,7 +1311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>setKeepAliveTime</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.820">setKeepAliveTime</a>(long keepAliveTime,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.818">setKeepAliveTime</a>(long keepAliveTime,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a> timeUnit)</pre>
</li>
</ul>
@@ -1321,7 +1321,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getKeepAliveTime</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.825">getKeepAliveTime</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a> timeUnit)</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.823">getKeepAliveTime</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a> timeUnit)</pre>
</li>
</ul>
<a name="addChore-org.apache.hadoop.hbase.procedure2.ProcedureInMemoryChore-">
@@ -1330,7 +1330,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>addChore</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.837">addChore</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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> chore)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.835">addChore</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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> chore)</pre>
<div class="block">Add a chore procedure to the executor</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1344,7 +1344,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeChore</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.847">removeChore</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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> chore)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.845">removeChore</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/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> chore)</pre>
<div class="block">Remove a chore procedure from the executor</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1360,7 +1360,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>createNonceKey</h4>
-<pre>public <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/ProcedureExecutor.html#line.861">createNonceKey</a>(long nonceGroup,
+<pre>public <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/ProcedureExecutor.html#line.859">createNonceKey</a>(long nonceGroup,
long nonce)</pre>
<div class="block">Create a NoneKey from the specified nonceGroup and nonce.</div>
<dl>
@@ -1378,7 +1378,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>registerNonce</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.876">registerNonce</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a> nonceKey)</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.874">registerNonce</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a> nonceKey)</pre>
<div class="block">Register a nonce for a procedure that is going to be submitted.
A procId will be reserved and on submitProcedure(),
the procedure with the specified nonce will take the reserved ProcId.
@@ -1399,7 +1399,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>unregisterNonceIfProcedureWasNotSubmitted</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.907">unregisterNonceIfProcedureWasNotSubmitted</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a> nonceKey)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.905">unregisterNonceIfProcedureWasNotSubmitted</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a> nonceKey)</pre>
<div class="block">Remove the NonceKey if the procedure was not submitted to the executor.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1413,7 +1413,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>setFailureResultForNonce</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.981">setFailureResultForNonce</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a> nonceKey,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.979">setFailureResultForNonce</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a> nonceKey,
<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> procName,
<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> procOwner,
<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> exception)</pre>
@@ -1434,7 +1434,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>submitProcedure</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1006">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1004">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
<div class="block">Add a new root-procedure to the executor.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1450,7 +1450,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>bypassProcedure</h4>
-<pre>public <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><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1045">bypassProcedure</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><<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>> pids,
+<pre>public <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><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1043">bypassProcedure</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><<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>> pids,
long lockWait,
boolean force,
boolean recursive)
@@ -1501,7 +1501,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>bypassProcedure</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1055">bypassProcedure</a>(long pid,
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1053">bypassProcedure</a>(long pid,
long lockWait,
boolean override,
boolean recursive)
@@ -1518,7 +1518,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>submitProcedure</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1162">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc,
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1160">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc,
<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a> nonceKey)</pre>
<div class="block">Add a new root-procedure to the executor.</div>
<dl>
@@ -1536,7 +1536,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>submitProcedures</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1193">submitProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>[] procs)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1191">submitProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>[] procs)</pre>
<div class="block">Add a set of new root-procedure to the executor.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1550,7 +1550,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>prepareProcedure</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1216">prepareProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1214">prepareProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
</li>
</ul>
<a name="pushProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1559,7 +1559,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>pushProcedure</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1225">pushProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1223">pushProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
</li>
</ul>
<a name="abort-long-">
@@ -1568,7 +1568,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>abort</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1249">abort</a>(long procId)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1247">abort</a>(long procId)</pre>
<div class="block">Send an abort notification the specified procedure.
Depending on the procedure implementation the abort can be considered or ignored.</div>
<dl>
@@ -1585,7 +1585,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>abort</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1260">abort</a>(long procId,
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1258">abort</a>(long procId,
boolean mayInterruptIfRunning)</pre>
<div class="block">Send an abort notification to the specified procedure.
Depending on the procedure implementation, the abort can be considered or ignored.</div>
@@ -1604,7 +1604,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getProcedure</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1274">getProcedure</a>(long procId)</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1272">getProcedure</a>(long procId)</pre>
</li>
</ul>
<a name="getProcedure-java.lang.Class-long-">
@@ -1613,7 +1613,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getProcedure</h4>
-<pre>public <T extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>> T <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1278">getProcedure</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><T> clazz,
+<pre>public <T extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>> T <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1276">getProcedure</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><T> clazz,
long procId)</pre>
</li>
</ul>
@@ -1623,7 +1623,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getResult</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1286">getResult</a>(long procId)</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1284">getResult</a>(long procId)</pre>
</li>
</ul>
<a name="isFinished-long-">
@@ -1632,7 +1632,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isFinished</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1302">isFinished</a>(long procId)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1300">isFinished</a>(long procId)</pre>
<div class="block">Return true if the procedure is finished.
The state may be "completed successfully" or "failed and rolledback".
Use getResult() to check the state or get the result data.</div>
@@ -1650,7 +1650,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isStarted</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1311">isStarted</a>(long procId)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1309">isStarted</a>(long procId)</pre>
<div class="block">Return true if the procedure is started.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1666,7 +1666,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeResult</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1323">removeResult</a>(long procId)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1321">removeResult</a>(long procId)</pre>
<div class="block">Mark the specified completed procedure, as ready to remove.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1680,7 +1680,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getResultOrProcedure</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1335">getResultOrProcedure</a>(long procId)</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1333">getResultOrProcedure</a>(long procId)</pre>
</li>
</ul>
<a name="isProcedureOwner-long-org.apache.hadoop.hbase.security.User-">
@@ -1689,7 +1689,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isProcedureOwner</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1351">isProcedureOwner</a>(long procId,
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1349">isProcedureOwner</a>(long procId,
<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> user)</pre>
<div class="block">Check if the user is this procedure's owner</div>
<dl>
@@ -1708,7 +1708,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getActiveProceduresNoCopy</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1377">getActiveProceduresNoCopy</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1375">getActiveProceduresNoCopy</a>()</pre>
<div class="block">Should only be used when starting up, where the procedure workers have not been started.
<p/>
If the procedure works has been started, the return values maybe changed when you are
@@ -1722,7 +1722,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getProcedures</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1385">getProcedures</a>()</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1383">getProcedures</a>()</pre>
<div class="block">Get procedures.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1736,7 +1736,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>registerListener</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1401">registerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a> listener)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1399">registerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a> listener)</pre>
</li>
</ul>
<a name="unregisterListener-org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecutorListener-">
@@ -1745,7 +1745,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>unregisterListener</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1405">unregisterListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a> listener)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1403">unregisterListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a> listener)</pre>
</li>
</ul>
<a name="sendProcedureLoadedNotification-long-">
@@ -1754,7 +1754,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>sendProcedureLoadedNotification</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1409">sendProcedureLoadedNotification</a>(long procId)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1407">sendProcedureLoadedNotification</a>(long procId)</pre>
</li>
</ul>
<a name="sendProcedureAddedNotification-long-">
@@ -1763,7 +1763,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>sendProcedureAddedNotification</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1421">sendProcedureAddedNotification</a>(long procId)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1419">sendProcedureAddedNotification</a>(long procId)</pre>
</li>
</ul>
<a name="sendProcedureFinishedNotification-long-">
@@ -1772,7 +1772,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>sendProcedureFinishedNotification</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1433">sendProcedureFinishedNotification</a>(long procId)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1431">sendProcedureFinishedNotification</a>(long procId)</pre>
</li>
</ul>
<a name="nextProcId--">
@@ -1781,7 +1781,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>nextProcId</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1448">nextProcId</a>()</pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1446">nextProcId</a>()</pre>
</li>
</ul>
<a name="getLastProcId--">
@@ -1790,7 +1790,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getLastProcId</h4>
-<pre>protected long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1465">getLastProcId</a>()</pre>
+<pre>protected long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1463">getLastProcId</a>()</pre>
</li>
</ul>
<a name="getActiveProcIds--">
@@ -1799,7 +1799,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getActiveProcIds</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<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="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1470">getActiveProcIds</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<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="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1468">getActiveProcIds</a>()</pre>
</li>
</ul>
<a name="getRootProcedureId-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1808,7 +1808,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRootProcedureId</h4>
-<pre><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="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1474">getRootProcedureId</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
+<pre><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="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1472">getRootProcedureId</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
</li>
</ul>
<a name="executeProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1817,7 +1817,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>executeProcedure</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1481">executeProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1479">executeProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
</li>
</ul>
<a name="acquireLock-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1826,7 +1826,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>acquireLock</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1577">acquireLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1575">acquireLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
</li>
</ul>
<a name="releaseLock-org.apache.hadoop.hbase.procedure2.Procedure-boolean-">
@@ -1835,7 +1835,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>releaseLock</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1587">releaseLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1585">releaseLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc,
boolean force)</pre>
</li>
</ul>
@@ -1845,7 +1845,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>executeRollback</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1600">executeRollback</a>(long rootProcId,
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1598">executeRollback</a>(long rootProcId,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procStack)</pre>
<div class="block">Execute the rollback of the full procedure stack. Once the procedure is rolledback, the
root-procedure will be visible as finished to user, and the result will be the fatal exception.</div>
@@ -1857,7 +1857,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>cleanupAfterRollbackOneStep</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1668">cleanupAfterRollbackOneStep</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1666">cleanupAfterRollbackOneStep</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
</li>
</ul>
<a name="executeRollback-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1866,7 +1866,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>executeRollback</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1698">executeRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1696">executeRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
<div class="block">Execute the rollback of the procedure step.
It updates the store with the new state (stack index)
or will remove completly the procedure in case it is a child.</div>
@@ -1878,7 +1878,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>yieldProcedure</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1726">yieldProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1724">yieldProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
</li>
</ul>
<a name="execProcedure-org.apache.hadoop.hbase.procedure2.RootProcedureState-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1887,7 +1887,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>execProcedure</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1760">execProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procStack,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1758">execProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procStack,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procedure)</pre>
<div class="block">Executes <code>procedure</code>
<ul>
@@ -1924,7 +1924,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>kill</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1888">kill</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> msg)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1886">kill</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> msg)</pre>
</li>
</ul>
<a name="initializeChildren-org.apache.hadoop.hbase.procedure2.RootProcedureState-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">
@@ -1933,7 +1933,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>initializeChildren</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1894">initializeChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procStack,
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1892">initializeChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procStack,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procedure,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>[] subprocs)</pre>
</li>
@@ -1944,7 +1944,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>submitChildrenProcedures</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1930">submitChildrenProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>[] subprocs)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1928">submitChildrenProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>[] subprocs)</pre>
</li>
</ul>
<a name="countDownChildren-org.apache.hadoop.hbase.procedure2.RootProcedureState-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1953,7 +1953,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>countDownChildren</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1940">countDownChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procStack,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1938">countDownChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procStack,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procedure)</pre>
</li>
</ul>
@@ -1963,7 +1963,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>updateStoreOnExec</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1959">updateStoreOnExec</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procStack,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1957">updateStoreOnExec</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procStack,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> procedure,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>>[] subprocs)</pre>
</li>
@@ -1974,7 +1974,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>handleInterruptedException</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1985">handleInterruptedException</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1983">handleInterruptedException</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc,
<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> e)</pre>
</li>
</ul>
@@ -1984,7 +1984,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>execCompletionCleanup</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1994">execCompletionCleanup</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1992">execCompletionCleanup</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
</li>
</ul>
<a name="procedureFinished-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1993,7 +1993,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>procedureFinished</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2011">procedureFinished</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2009">procedureFinished</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> proc)</pre>
</li>
</ul>
<a name="getProcStack-long-">
@@ -2002,7 +2002,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getProcStack</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2038">getProcStack</a>(long rootProcId)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2036">getProcStack</a>(long rootProcId)</pre>
</li>
</ul>
<a name="getProcedureScheduler--">
@@ -2011,7 +2011,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>getProcedureScheduler</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureScheduler.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureScheduler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2043">getProcedureScheduler</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureScheduler.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureScheduler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2041">getProcedureScheduler</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 577acd7..3de8cda 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,10 +216,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
index 77af791..0b38cf1 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
@@ -138,8 +138,8 @@ var activeTableTab = "activeTableTab";
<tr id="i1" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#isNextFinished--">isNextFinished</a></span>()</code>
-<div class="block">Calling this method does not need to converting the protobuf message to the Procedure class,
- so if it returns true we can call <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--"><code>skipNext()</code></a> to skip the procedure without
+<div class="block">Calling this method does not need to convert the protobuf message to the Procedure class, so
+ if it returns true we can call <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--"><code>skipNext()</code></a> to skip the procedure without
deserializing.</div>
</td>
</tr>
@@ -212,8 +212,8 @@ var activeTableTab = "activeTableTab";
<li class="blockList">
<h4>isNextFinished</h4>
<pre>boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#line.93">isNextFinished</a>()</pre>
-<div class="block">Calling this method does not need to converting the protobuf message to the Procedure class,
- so if it returns true we can call <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--"><code>skipNext()</code></a> to skip the procedure without
+<div class="block">Calling this method does not need to convert the protobuf message to the Procedure class, so
+ if it returns true we can call <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--"><code>skipNext()</code></a> to skip the procedure without
deserializing. This could increase the performance.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureTree.Iter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureTree.Iter.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureTree.Iter.html
index 70c95a1..bdeb212 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureTree.Iter.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureTree.Iter.html
@@ -195,8 +195,8 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
<tr id="i2" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureTree.Iter.html#isNextFinished--">isNextFinished</a></span>()</code>
-<div class="block">Calling this method does not need to converting the protobuf message to the Procedure class,
- so if it returns true we can call <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--"><code>ProcedureStore.ProcedureIterator.skipNext()</code></a> to skip the procedure without
+<div class="block">Calling this method does not need to convert the protobuf message to the Procedure class, so
+ if it returns true we can call <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--"><code>ProcedureStore.ProcedureIterator.skipNext()</code></a> to skip the procedure without
deserializing.</div>
</td>
</tr>
@@ -350,8 +350,8 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
<h4>isNextFinished</h4>
<pre>public boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureTree.Iter.html#line.256">isNextFinished</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#isNextFinished--">ProcedureStore.ProcedureIterator</a></code></span></div>
-<div class="block">Calling this method does not need to converting the protobuf message to the Procedure class,
- so if it returns true we can call <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--"><code>ProcedureStore.ProcedureIterator.skipNext()</code></a> to skip the procedure without
+<div class="block">Calling this method does not need to convert the protobuf message to the Procedure class, so
+ if it returns true we can call <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--"><code>ProcedureStore.ProcedureIterator.skipNext()</code></a> to skip the procedure without
deserializing. This could increase the performance.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 958cfdb..9a00666 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -230,12 +230,12 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
</ul>
</li>
</ul>
[15/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
index 2945c58..8de499d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
@@ -93,8 +93,8 @@
<span class="sourceLineNo">085</span> boolean hasNext();<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span> /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * Calling this method does not need to converting the protobuf message to the Procedure class,<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * so if it returns true we can call {@link #skipNext()} to skip the procedure without<a name="line.89"></a>
+<span class="sourceLineNo">088</span> * Calling this method does not need to convert the protobuf message to the Procedure class, so<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * if it returns true we can call {@link #skipNext()} to skip the procedure without<a name="line.89"></a>
<span class="sourceLineNo">090</span> * deserializing. This could increase the performance.<a name="line.90"></a>
<span class="sourceLineNo">091</span> * @return true if the iterator next element is a completed procedure.<a name="line.91"></a>
<span class="sourceLineNo">092</span> */<a name="line.92"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
index 2945c58..8de499d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
@@ -93,8 +93,8 @@
<span class="sourceLineNo">085</span> boolean hasNext();<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span> /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * Calling this method does not need to converting the protobuf message to the Procedure class,<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * so if it returns true we can call {@link #skipNext()} to skip the procedure without<a name="line.89"></a>
+<span class="sourceLineNo">088</span> * Calling this method does not need to convert the protobuf message to the Procedure class, so<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * if it returns true we can call {@link #skipNext()} to skip the procedure without<a name="line.89"></a>
<span class="sourceLineNo">090</span> * deserializing. This could increase the performance.<a name="line.90"></a>
<span class="sourceLineNo">091</span> * @return true if the iterator next element is a completed procedure.<a name="line.91"></a>
<span class="sourceLineNo">092</span> */<a name="line.92"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
index 2945c58..8de499d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
@@ -93,8 +93,8 @@
<span class="sourceLineNo">085</span> boolean hasNext();<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span> /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * Calling this method does not need to converting the protobuf message to the Procedure class,<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * so if it returns true we can call {@link #skipNext()} to skip the procedure without<a name="line.89"></a>
+<span class="sourceLineNo">088</span> * Calling this method does not need to convert the protobuf message to the Procedure class, so<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * if it returns true we can call {@link #skipNext()} to skip the procedure without<a name="line.89"></a>
<span class="sourceLineNo">090</span> * deserializing. This could increase the performance.<a name="line.90"></a>
<span class="sourceLineNo">091</span> * @return true if the iterator next element is a completed procedure.<a name="line.91"></a>
<span class="sourceLineNo">092</span> */<a name="line.92"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
index 2945c58..8de499d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
@@ -93,8 +93,8 @@
<span class="sourceLineNo">085</span> boolean hasNext();<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span> /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * Calling this method does not need to converting the protobuf message to the Procedure class,<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * so if it returns true we can call {@link #skipNext()} to skip the procedure without<a name="line.89"></a>
+<span class="sourceLineNo">088</span> * Calling this method does not need to convert the protobuf message to the Procedure class, so<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * if it returns true we can call {@link #skipNext()} to skip the procedure without<a name="line.89"></a>
<span class="sourceLineNo">090</span> * deserializing. This could increase the performance.<a name="line.90"></a>
<span class="sourceLineNo">091</span> * @return true if the iterator next element is a completed procedure.<a name="line.91"></a>
<span class="sourceLineNo">092</span> */<a name="line.92"></a>
[20/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
index 688bd4e..37bf508 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
@@ -589,1651 +589,1649 @@
<span class="sourceLineNo">581</span> LOG.debug("Loading {}", proc);<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span> Long rootProcId = getRootProcedureId(proc);<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (rootProcId == null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.585"></a>
-<span class="sourceLineNo">586</span> scheduler.addBack(proc);<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (proc.hasParent()) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.591"></a>
-<span class="sourceLineNo">592</span> // corrupted procedures are handled later at step 3<a name="line.592"></a>
-<span class="sourceLineNo">593</span> if (parent != null && !proc.isFinished()) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> parent.incChildrenLatch();<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.598"></a>
-<span class="sourceLineNo">599</span> procStack.loadStack(proc);<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span> proc.setRootProcId(rootProcId);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> switch (proc.getState()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> case RUNNABLE:<a name="line.603"></a>
-<span class="sourceLineNo">604</span> runnableList.add(proc);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> break;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> case WAITING:<a name="line.606"></a>
-<span class="sourceLineNo">607</span> waitingList.add(proc);<a name="line.607"></a>
-<span class="sourceLineNo">608</span> break;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> case WAITING_TIMEOUT:<a name="line.609"></a>
-<span class="sourceLineNo">610</span> waitingTimeoutList.add(proc);<a name="line.610"></a>
-<span class="sourceLineNo">611</span> break;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> case FAILED:<a name="line.612"></a>
-<span class="sourceLineNo">613</span> failedList.add(proc);<a name="line.613"></a>
-<span class="sourceLineNo">614</span> break;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> case ROLLEDBACK:<a name="line.615"></a>
-<span class="sourceLineNo">616</span> case INITIALIZING:<a name="line.616"></a>
-<span class="sourceLineNo">617</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> LOG.error(msg);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throw new UnsupportedOperationException(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> default:<a name="line.620"></a>
-<span class="sourceLineNo">621</span> break;<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> // 4. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> waitingList.forEach(proc -> {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> if (!proc.hasChildren()) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> // Normally, WAITING procedures should be waken by its children.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> // But, there is a case that, all the children are successful and before<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // they can wake up their parent procedure, the master was killed.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // are not loaded because of their SUCCESS state.<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // So we need to continue to run this WAITING procedure. But before<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // will throw:<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.637"></a>
-<span class="sourceLineNo">638</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> runnableList.add(proc);<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span> });<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span> // 5. Push the procedures to the timeout executor<a name="line.643"></a>
-<span class="sourceLineNo">644</span> waitingTimeoutList.forEach(proc -> {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> proc.afterReplay(getEnvironment());<a name="line.645"></a>
-<span class="sourceLineNo">646</span> timeoutExecutor.add(proc);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> });<a name="line.647"></a>
-<span class="sourceLineNo">648</span> // 6. restore locks<a name="line.648"></a>
-<span class="sourceLineNo">649</span> restoreLocks();<a name="line.649"></a>
-<span class="sourceLineNo">650</span> // 7. Push the procedure to the scheduler<a name="line.650"></a>
-<span class="sourceLineNo">651</span> failedList.forEach(scheduler::addBack);<a name="line.651"></a>
-<span class="sourceLineNo">652</span> runnableList.forEach(p -> {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> p.afterReplay(getEnvironment());<a name="line.653"></a>
-<span class="sourceLineNo">654</span> if (!p.hasParent()) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.655"></a>
-<span class="sourceLineNo">656</span> }<a name="line.656"></a>
-<span class="sourceLineNo">657</span> scheduler.addBack(p);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> });<a name="line.658"></a>
-<span class="sourceLineNo">659</span> }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span> /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.662"></a>
-<span class="sourceLineNo">663</span> * <p/><a name="line.663"></a>
-<span class="sourceLineNo">664</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.664"></a>
-<span class="sourceLineNo">665</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.665"></a>
-<span class="sourceLineNo">666</span> * pending and in-progress procedures.<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * @param numThreads number of threads available for procedure execution.<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * is found on replay. otherwise false.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> // We have numThreads executor + one timer thread used for timing out<a name="line.672"></a>
-<span class="sourceLineNo">673</span> // procedures and triggering periodic procedures.<a name="line.673"></a>
-<span class="sourceLineNo">674</span> this.corePoolSize = numThreads;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> this.maxPoolSize = 10 * numThreads;<a name="line.675"></a>
-<span class="sourceLineNo">676</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.676"></a>
-<span class="sourceLineNo">677</span> corePoolSize, maxPoolSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.679"></a>
-<span class="sourceLineNo">680</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span> // Create the workers<a name="line.682"></a>
-<span class="sourceLineNo">683</span> workerId.set(0);<a name="line.683"></a>
-<span class="sourceLineNo">684</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.684"></a>
-<span class="sourceLineNo">685</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">584</span> // The orphan procedures will be passed to handleCorrupted, so add an assert here<a name="line.584"></a>
+<span class="sourceLineNo">585</span> assert rootProcId != null;<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (proc.hasParent()) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.588"></a>
+<span class="sourceLineNo">589</span> if (parent != null && !proc.isFinished()) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> parent.incChildrenLatch();<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> procStack.loadStack(proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span> proc.setRootProcId(rootProcId);<a name="line.597"></a>
+<span class="sourceLineNo">598</span> switch (proc.getState()) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> case RUNNABLE:<a name="line.599"></a>
+<span class="sourceLineNo">600</span> runnableList.add(proc);<a name="line.600"></a>
+<span class="sourceLineNo">601</span> break;<a name="line.601"></a>
+<span class="sourceLineNo">602</span> case WAITING:<a name="line.602"></a>
+<span class="sourceLineNo">603</span> waitingList.add(proc);<a name="line.603"></a>
+<span class="sourceLineNo">604</span> break;<a name="line.604"></a>
+<span class="sourceLineNo">605</span> case WAITING_TIMEOUT:<a name="line.605"></a>
+<span class="sourceLineNo">606</span> waitingTimeoutList.add(proc);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> break;<a name="line.607"></a>
+<span class="sourceLineNo">608</span> case FAILED:<a name="line.608"></a>
+<span class="sourceLineNo">609</span> failedList.add(proc);<a name="line.609"></a>
+<span class="sourceLineNo">610</span> break;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> case ROLLEDBACK:<a name="line.611"></a>
+<span class="sourceLineNo">612</span> case INITIALIZING:<a name="line.612"></a>
+<span class="sourceLineNo">613</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.613"></a>
+<span class="sourceLineNo">614</span> LOG.error(msg);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> throw new UnsupportedOperationException(msg);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> default:<a name="line.616"></a>
+<span class="sourceLineNo">617</span> break;<a name="line.617"></a>
+<span class="sourceLineNo">618</span> }<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span> // 3. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.621"></a>
+<span class="sourceLineNo">622</span> waitingList.forEach(proc -> {<a name="line.622"></a>
+<span class="sourceLineNo">623</span> if (!proc.hasChildren()) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // Normally, WAITING procedures should be waken by its children.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // But, there is a case that, all the children are successful and before<a name="line.625"></a>
+<span class="sourceLineNo">626</span> // they can wake up their parent procedure, the master was killed.<a name="line.626"></a>
+<span class="sourceLineNo">627</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.627"></a>
+<span class="sourceLineNo">628</span> // are not loaded because of their SUCCESS state.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // So we need to continue to run this WAITING procedure. But before<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // will throw:<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.633"></a>
+<span class="sourceLineNo">634</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> runnableList.add(proc);<a name="line.635"></a>
+<span class="sourceLineNo">636</span> } else {<a name="line.636"></a>
+<span class="sourceLineNo">637</span> proc.afterReplay(getEnvironment());<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span> });<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span> // 4. Push the procedures to the timeout executor<a name="line.641"></a>
+<span class="sourceLineNo">642</span> waitingTimeoutList.forEach(proc -> {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> proc.afterReplay(getEnvironment());<a name="line.643"></a>
+<span class="sourceLineNo">644</span> timeoutExecutor.add(proc);<a name="line.644"></a>
+<span class="sourceLineNo">645</span> });<a name="line.645"></a>
+<span class="sourceLineNo">646</span> // 5. restore locks<a name="line.646"></a>
+<span class="sourceLineNo">647</span> restoreLocks();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> // 6. Push the procedure to the scheduler<a name="line.648"></a>
+<span class="sourceLineNo">649</span> failedList.forEach(scheduler::addBack);<a name="line.649"></a>
+<span class="sourceLineNo">650</span> runnableList.forEach(p -> {<a name="line.650"></a>
+<span class="sourceLineNo">651</span> p.afterReplay(getEnvironment());<a name="line.651"></a>
+<span class="sourceLineNo">652</span> if (!p.hasParent()) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> scheduler.addBack(p);<a name="line.655"></a>
+<span class="sourceLineNo">656</span> });<a name="line.656"></a>
+<span class="sourceLineNo">657</span> }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span> /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.660"></a>
+<span class="sourceLineNo">661</span> * <p/><a name="line.661"></a>
+<span class="sourceLineNo">662</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.662"></a>
+<span class="sourceLineNo">663</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.663"></a>
+<span class="sourceLineNo">664</span> * pending and in-progress procedures.<a name="line.664"></a>
+<span class="sourceLineNo">665</span> * @param numThreads number of threads available for procedure execution.<a name="line.665"></a>
+<span class="sourceLineNo">666</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.666"></a>
+<span class="sourceLineNo">667</span> * is found on replay. otherwise false.<a name="line.667"></a>
+<span class="sourceLineNo">668</span> */<a name="line.668"></a>
+<span class="sourceLineNo">669</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> // We have numThreads executor + one timer thread used for timing out<a name="line.670"></a>
+<span class="sourceLineNo">671</span> // procedures and triggering periodic procedures.<a name="line.671"></a>
+<span class="sourceLineNo">672</span> this.corePoolSize = numThreads;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> this.maxPoolSize = 10 * numThreads;<a name="line.673"></a>
+<span class="sourceLineNo">674</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.674"></a>
+<span class="sourceLineNo">675</span> corePoolSize, maxPoolSize);<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.677"></a>
+<span class="sourceLineNo">678</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span> // Create the workers<a name="line.680"></a>
+<span class="sourceLineNo">681</span> workerId.set(0);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.682"></a>
+<span class="sourceLineNo">683</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> long st, et;<a name="line.687"></a>
<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> long st, et;<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> // Acquire the store lease.<a name="line.691"></a>
-<span class="sourceLineNo">692</span> st = System.nanoTime();<a name="line.692"></a>
-<span class="sourceLineNo">693</span> store.recoverLease();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> et = System.nanoTime();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.695"></a>
-<span class="sourceLineNo">696</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span> // start the procedure scheduler<a name="line.698"></a>
-<span class="sourceLineNo">699</span> scheduler.start();<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> // TODO: Split in two steps.<a name="line.701"></a>
-<span class="sourceLineNo">702</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.702"></a>
-<span class="sourceLineNo">703</span> // The first one will make sure that we have the latest id,<a name="line.703"></a>
-<span class="sourceLineNo">704</span> // so we can start the threads and accept new procedures.<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // The second step will do the actual load of old procedures.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> st = System.nanoTime();<a name="line.706"></a>
-<span class="sourceLineNo">707</span> load(abortOnCorruption);<a name="line.707"></a>
-<span class="sourceLineNo">708</span> et = System.nanoTime();<a name="line.708"></a>
-<span class="sourceLineNo">709</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.709"></a>
-<span class="sourceLineNo">710</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.710"></a>
-<span class="sourceLineNo">711</span> }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></a>
-<span class="sourceLineNo">713</span> /**<a name="line.713"></a>
-<span class="sourceLineNo">714</span> * Start the workers.<a name="line.714"></a>
-<span class="sourceLineNo">715</span> */<a name="line.715"></a>
-<span class="sourceLineNo">716</span> public void startWorkers() throws IOException {<a name="line.716"></a>
-<span class="sourceLineNo">717</span> if (!running.compareAndSet(false, true)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Already running");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span> // Start the executors. Here we must have the lastProcId set.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.722"></a>
-<span class="sourceLineNo">723</span> timeoutExecutor.start();<a name="line.723"></a>
-<span class="sourceLineNo">724</span> for (WorkerThread worker: workerThreads) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span> worker.start();<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> // Internal chores<a name="line.728"></a>
-<span class="sourceLineNo">729</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span> // Add completed cleaner chore<a name="line.731"></a>
-<span class="sourceLineNo">732</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.732"></a>
-<span class="sourceLineNo">733</span> }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span> public void stop() {<a name="line.735"></a>
-<span class="sourceLineNo">736</span> if (!running.getAndSet(false)) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span> return;<a name="line.737"></a>
-<span class="sourceLineNo">738</span> }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span> LOG.info("Stopping");<a name="line.740"></a>
-<span class="sourceLineNo">741</span> scheduler.stop();<a name="line.741"></a>
-<span class="sourceLineNo">742</span> timeoutExecutor.sendStopSignal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> @VisibleForTesting<a name="line.745"></a>
-<span class="sourceLineNo">746</span> public void join() {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> assert !isRunning() : "expected not running";<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span> // stop the timeout executor<a name="line.749"></a>
-<span class="sourceLineNo">750</span> timeoutExecutor.awaitTermination();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span> // stop the worker threads<a name="line.752"></a>
-<span class="sourceLineNo">753</span> for (WorkerThread worker: workerThreads) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span> worker.awaitTermination();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span> // Destroy the Thread Group for the executors<a name="line.757"></a>
-<span class="sourceLineNo">758</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.758"></a>
-<span class="sourceLineNo">759</span> try {<a name="line.759"></a>
-<span class="sourceLineNo">760</span> threadGroup.destroy();<a name="line.760"></a>
-<span class="sourceLineNo">761</span> } catch (IllegalThreadStateException e) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.threadGroup, e.getMessage());<a name="line.763"></a>
-<span class="sourceLineNo">764</span> // This dumps list of threads on STDOUT.<a name="line.764"></a>
-<span class="sourceLineNo">765</span> this.threadGroup.list();<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span> // reset the in-memory state for testing<a name="line.768"></a>
-<span class="sourceLineNo">769</span> completed.clear();<a name="line.769"></a>
-<span class="sourceLineNo">770</span> rollbackStack.clear();<a name="line.770"></a>
-<span class="sourceLineNo">771</span> procedures.clear();<a name="line.771"></a>
-<span class="sourceLineNo">772</span> nonceKeysToProcIdsMap.clear();<a name="line.772"></a>
-<span class="sourceLineNo">773</span> scheduler.clear();<a name="line.773"></a>
-<span class="sourceLineNo">774</span> lastProcId.set(-1);<a name="line.774"></a>
-<span class="sourceLineNo">775</span> }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span> public void refreshConfiguration(final Configuration conf) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span> this.conf = conf;<a name="line.778"></a>
-<span class="sourceLineNo">779</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.779"></a>
-<span class="sourceLineNo">780</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span> }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">689</span> // Acquire the store lease.<a name="line.689"></a>
+<span class="sourceLineNo">690</span> st = System.nanoTime();<a name="line.690"></a>
+<span class="sourceLineNo">691</span> store.recoverLease();<a name="line.691"></a>
+<span class="sourceLineNo">692</span> et = System.nanoTime();<a name="line.692"></a>
+<span class="sourceLineNo">693</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.693"></a>
+<span class="sourceLineNo">694</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> // start the procedure scheduler<a name="line.696"></a>
+<span class="sourceLineNo">697</span> scheduler.start();<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> // TODO: Split in two steps.<a name="line.699"></a>
+<span class="sourceLineNo">700</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.700"></a>
+<span class="sourceLineNo">701</span> // The first one will make sure that we have the latest id,<a name="line.701"></a>
+<span class="sourceLineNo">702</span> // so we can start the threads and accept new procedures.<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // The second step will do the actual load of old procedures.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> st = System.nanoTime();<a name="line.704"></a>
+<span class="sourceLineNo">705</span> load(abortOnCorruption);<a name="line.705"></a>
+<span class="sourceLineNo">706</span> et = System.nanoTime();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.707"></a>
+<span class="sourceLineNo">708</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.708"></a>
+<span class="sourceLineNo">709</span> }<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span> /**<a name="line.711"></a>
+<span class="sourceLineNo">712</span> * Start the workers.<a name="line.712"></a>
+<span class="sourceLineNo">713</span> */<a name="line.713"></a>
+<span class="sourceLineNo">714</span> public void startWorkers() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span> if (!running.compareAndSet(false, true)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Already running");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> return;<a name="line.717"></a>
+<span class="sourceLineNo">718</span> }<a name="line.718"></a>
+<span class="sourceLineNo">719</span> // Start the executors. Here we must have the lastProcId set.<a name="line.719"></a>
+<span class="sourceLineNo">720</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.720"></a>
+<span class="sourceLineNo">721</span> timeoutExecutor.start();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (WorkerThread worker: workerThreads) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> worker.start();<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span> // Internal chores<a name="line.726"></a>
+<span class="sourceLineNo">727</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.727"></a>
+<span class="sourceLineNo">728</span><a name="line.728"></a>
+<span class="sourceLineNo">729</span> // Add completed cleaner chore<a name="line.729"></a>
+<span class="sourceLineNo">730</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.730"></a>
+<span class="sourceLineNo">731</span> }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span> public void stop() {<a name="line.733"></a>
+<span class="sourceLineNo">734</span> if (!running.getAndSet(false)) {<a name="line.734"></a>
+<span class="sourceLineNo">735</span> return;<a name="line.735"></a>
+<span class="sourceLineNo">736</span> }<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span> LOG.info("Stopping");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> scheduler.stop();<a name="line.739"></a>
+<span class="sourceLineNo">740</span> timeoutExecutor.sendStopSignal();<a name="line.740"></a>
+<span class="sourceLineNo">741</span> }<a name="line.741"></a>
+<span class="sourceLineNo">742</span><a name="line.742"></a>
+<span class="sourceLineNo">743</span> @VisibleForTesting<a name="line.743"></a>
+<span class="sourceLineNo">744</span> public void join() {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> assert !isRunning() : "expected not running";<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span> // stop the timeout executor<a name="line.747"></a>
+<span class="sourceLineNo">748</span> timeoutExecutor.awaitTermination();<a name="line.748"></a>
+<span class="sourceLineNo">749</span><a name="line.749"></a>
+<span class="sourceLineNo">750</span> // stop the worker threads<a name="line.750"></a>
+<span class="sourceLineNo">751</span> for (WorkerThread worker: workerThreads) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span> worker.awaitTermination();<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> // Destroy the Thread Group for the executors<a name="line.755"></a>
+<span class="sourceLineNo">756</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> try {<a name="line.757"></a>
+<span class="sourceLineNo">758</span> threadGroup.destroy();<a name="line.758"></a>
+<span class="sourceLineNo">759</span> } catch (IllegalThreadStateException e) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.threadGroup, e.getMessage());<a name="line.761"></a>
+<span class="sourceLineNo">762</span> // This dumps list of threads on STDOUT.<a name="line.762"></a>
+<span class="sourceLineNo">763</span> this.threadGroup.list();<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span><a name="line.765"></a>
+<span class="sourceLineNo">766</span> // reset the in-memory state for testing<a name="line.766"></a>
+<span class="sourceLineNo">767</span> completed.clear();<a name="line.767"></a>
+<span class="sourceLineNo">768</span> rollbackStack.clear();<a name="line.768"></a>
+<span class="sourceLineNo">769</span> procedures.clear();<a name="line.769"></a>
+<span class="sourceLineNo">770</span> nonceKeysToProcIdsMap.clear();<a name="line.770"></a>
+<span class="sourceLineNo">771</span> scheduler.clear();<a name="line.771"></a>
+<span class="sourceLineNo">772</span> lastProcId.set(-1);<a name="line.772"></a>
+<span class="sourceLineNo">773</span> }<a name="line.773"></a>
+<span class="sourceLineNo">774</span><a name="line.774"></a>
+<span class="sourceLineNo">775</span> public void refreshConfiguration(final Configuration conf) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span> this.conf = conf;<a name="line.776"></a>
+<span class="sourceLineNo">777</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.777"></a>
+<span class="sourceLineNo">778</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.778"></a>
+<span class="sourceLineNo">779</span> }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span> // ==========================================================================<a name="line.781"></a>
+<span class="sourceLineNo">782</span> // Accessors<a name="line.782"></a>
<span class="sourceLineNo">783</span> // ==========================================================================<a name="line.783"></a>
-<span class="sourceLineNo">784</span> // Accessors<a name="line.784"></a>
-<span class="sourceLineNo">785</span> // ==========================================================================<a name="line.785"></a>
-<span class="sourceLineNo">786</span> public boolean isRunning() {<a name="line.786"></a>
-<span class="sourceLineNo">787</span> return running.get();<a name="line.787"></a>
-<span class="sourceLineNo">788</span> }<a name="line.788"></a>
-<span class="sourceLineNo">789</span><a name="line.789"></a>
-<span class="sourceLineNo">790</span> /**<a name="line.790"></a>
-<span class="sourceLineNo">791</span> * @return the current number of worker threads.<a name="line.791"></a>
-<span class="sourceLineNo">792</span> */<a name="line.792"></a>
-<span class="sourceLineNo">793</span> public int getWorkerThreadCount() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span> return workerThreads.size();<a name="line.794"></a>
-<span class="sourceLineNo">795</span> }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span> /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span> * @return the core pool size settings.<a name="line.798"></a>
-<span class="sourceLineNo">799</span> */<a name="line.799"></a>
-<span class="sourceLineNo">800</span> public int getCorePoolSize() {<a name="line.800"></a>
-<span class="sourceLineNo">801</span> return corePoolSize;<a name="line.801"></a>
-<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span> public int getActiveExecutorCount() {<a name="line.804"></a>
-<span class="sourceLineNo">805</span> return activeExecutorCount.get();<a name="line.805"></a>
-<span class="sourceLineNo">806</span> }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span> public TEnvironment getEnvironment() {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.environment;<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> public ProcedureStore getStore() {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> return this.store;<a name="line.813"></a>
-<span class="sourceLineNo">814</span> }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span> ProcedureScheduler getScheduler() {<a name="line.816"></a>
-<span class="sourceLineNo">817</span> return scheduler;<a name="line.817"></a>
-<span class="sourceLineNo">818</span> }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.821"></a>
-<span class="sourceLineNo">822</span> this.scheduler.signalAll();<a name="line.822"></a>
-<span class="sourceLineNo">823</span> }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
+<span class="sourceLineNo">784</span> public boolean isRunning() {<a name="line.784"></a>
+<span class="sourceLineNo">785</span> return running.get();<a name="line.785"></a>
+<span class="sourceLineNo">786</span> }<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span> /**<a name="line.788"></a>
+<span class="sourceLineNo">789</span> * @return the current number of worker threads.<a name="line.789"></a>
+<span class="sourceLineNo">790</span> */<a name="line.790"></a>
+<span class="sourceLineNo">791</span> public int getWorkerThreadCount() {<a name="line.791"></a>
+<span class="sourceLineNo">792</span> return workerThreads.size();<a name="line.792"></a>
+<span class="sourceLineNo">793</span> }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span> * @return the core pool size settings.<a name="line.796"></a>
+<span class="sourceLineNo">797</span> */<a name="line.797"></a>
+<span class="sourceLineNo">798</span> public int getCorePoolSize() {<a name="line.798"></a>
+<span class="sourceLineNo">799</span> return corePoolSize;<a name="line.799"></a>
+<span class="sourceLineNo">800</span> }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span> public int getActiveExecutorCount() {<a name="line.802"></a>
+<span class="sourceLineNo">803</span> return activeExecutorCount.get();<a name="line.803"></a>
+<span class="sourceLineNo">804</span> }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span> public TEnvironment getEnvironment() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.environment;<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> public ProcedureStore getStore() {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> return this.store;<a name="line.811"></a>
+<span class="sourceLineNo">812</span> }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span> ProcedureScheduler getScheduler() {<a name="line.814"></a>
+<span class="sourceLineNo">815</span> return scheduler;<a name="line.815"></a>
+<span class="sourceLineNo">816</span> }<a name="line.816"></a>
+<span class="sourceLineNo">817</span><a name="line.817"></a>
+<span class="sourceLineNo">818</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.819"></a>
+<span class="sourceLineNo">820</span> this.scheduler.signalAll();<a name="line.820"></a>
+<span class="sourceLineNo">821</span> }<a name="line.821"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span><a name="line.826"></a>
+<span class="sourceLineNo">827</span> // ==========================================================================<a name="line.827"></a>
+<span class="sourceLineNo">828</span> // Submit/Remove Chores<a name="line.828"></a>
<span class="sourceLineNo">829</span> // ==========================================================================<a name="line.829"></a>
-<span class="sourceLineNo">830</span> // Submit/Remove Chores<a name="line.830"></a>
-<span class="sourceLineNo">831</span> // ==========================================================================<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span> * Add a chore procedure to the executor<a name="line.834"></a>
-<span class="sourceLineNo">835</span> * @param chore the chore to add<a name="line.835"></a>
-<span class="sourceLineNo">836</span> */<a name="line.836"></a>
-<span class="sourceLineNo">837</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.837"></a>
-<span class="sourceLineNo">838</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.838"></a>
-<span class="sourceLineNo">839</span> timeoutExecutor.add(chore);<a name="line.839"></a>
-<span class="sourceLineNo">840</span> }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span> /**<a name="line.842"></a>
-<span class="sourceLineNo">843</span> * Remove a chore procedure from the executor<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * @param chore the chore to remove<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return whether the chore is removed, or it will be removed later<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> chore.setState(ProcedureState.SUCCESS);<a name="line.848"></a>
-<span class="sourceLineNo">849</span> return timeoutExecutor.remove(chore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span> }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span> /**<a name="line.831"></a>
+<span class="sourceLineNo">832</span> * Add a chore procedure to the executor<a name="line.832"></a>
+<span class="sourceLineNo">833</span> * @param chore the chore to add<a name="line.833"></a>
+<span class="sourceLineNo">834</span> */<a name="line.834"></a>
+<span class="sourceLineNo">835</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.835"></a>
+<span class="sourceLineNo">836</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.836"></a>
+<span class="sourceLineNo">837</span> timeoutExecutor.add(chore);<a name="line.837"></a>
+<span class="sourceLineNo">838</span> }<a name="line.838"></a>
+<span class="sourceLineNo">839</span><a name="line.839"></a>
+<span class="sourceLineNo">840</span> /**<a name="line.840"></a>
+<span class="sourceLineNo">841</span> * Remove a chore procedure from the executor<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * @param chore the chore to remove<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return whether the chore is removed, or it will be removed later<a name="line.843"></a>
+<span class="sourceLineNo">844</span> */<a name="line.844"></a>
+<span class="sourceLineNo">845</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span> chore.setState(ProcedureState.SUCCESS);<a name="line.846"></a>
+<span class="sourceLineNo">847</span> return timeoutExecutor.remove(chore);<a name="line.847"></a>
+<span class="sourceLineNo">848</span> }<a name="line.848"></a>
+<span class="sourceLineNo">849</span><a name="line.849"></a>
+<span class="sourceLineNo">850</span> // ==========================================================================<a name="line.850"></a>
+<span class="sourceLineNo">851</span> // Nonce Procedure helpers<a name="line.851"></a>
<span class="sourceLineNo">852</span> // ==========================================================================<a name="line.852"></a>
-<span class="sourceLineNo">853</span> // Nonce Procedure helpers<a name="line.853"></a>
-<span class="sourceLineNo">854</span> // ==========================================================================<a name="line.854"></a>
-<span class="sourceLineNo">855</span> /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.856"></a>
-<span class="sourceLineNo">857</span> * @param nonceGroup<a name="line.857"></a>
-<span class="sourceLineNo">858</span> * @param nonce<a name="line.858"></a>
-<span class="sourceLineNo">859</span> * @return the generated NonceKey<a name="line.859"></a>
-<span class="sourceLineNo">860</span> */<a name="line.860"></a>
-<span class="sourceLineNo">861</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.862"></a>
-<span class="sourceLineNo">863</span> }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span> /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.866"></a>
-<span class="sourceLineNo">867</span> * A procId will be reserved and on submitProcedure(),<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.868"></a>
-<span class="sourceLineNo">869</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.870"></a>
-<span class="sourceLineNo">871</span> * and submit the procedure.<a name="line.871"></a>
-<span class="sourceLineNo">872</span> *<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.873"></a>
-<span class="sourceLineNo">874</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.874"></a>
-<span class="sourceLineNo">875</span> */<a name="line.875"></a>
-<span class="sourceLineNo">876</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> if (nonceKey == null) return -1;<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span> // check if we have already a Reserved ID for the nonce<a name="line.879"></a>
-<span class="sourceLineNo">880</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (oldProcId == null) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.882"></a>
-<span class="sourceLineNo">883</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.883"></a>
-<span class="sourceLineNo">884</span> final long newProcId = nextProcId();<a name="line.884"></a>
-<span class="sourceLineNo">885</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> if (oldProcId == null) return -1;<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span><a name="line.888"></a>
-<span class="sourceLineNo">889</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.889"></a>
-<span class="sourceLineNo">890</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.890"></a>
-<span class="sourceLineNo">891</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.891"></a>
-<span class="sourceLineNo">892</span> while (isRunning() &&<a name="line.892"></a>
-<span class="sourceLineNo">893</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.893"></a>
-<span class="sourceLineNo">894</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> if (traceEnabled) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.896"></a>
-<span class="sourceLineNo">897</span> }<a name="line.897"></a>
-<span class="sourceLineNo">898</span> Threads.sleep(100);<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span> return oldProcId.longValue();<a name="line.900"></a>
-<span class="sourceLineNo">901</span> }<a name="line.901"></a>
-<span class="sourceLineNo">902</span><a name="line.902"></a>
-<span class="sourceLineNo">903</span> /**<a name="line.903"></a>
-<span class="sourceLineNo">904</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.904"></a>
-<span class="sourceLineNo">905</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.905"></a>
-<span class="sourceLineNo">906</span> */<a name="line.906"></a>
-<span class="sourceLineNo">907</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.907"></a>
-<span class="sourceLineNo">908</span> if (nonceKey == null) return;<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.910"></a>
-<span class="sourceLineNo">911</span> if (procId == null) return;<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span> // if the procedure was not submitted, remove the nonce<a name="line.913"></a>
-<span class="sourceLineNo">914</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.915"></a>
-<span class="sourceLineNo">916</span> }<a name="line.916"></a>
-<span class="sourceLineNo">917</span> }<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.919"></a>
-<span class="sourceLineNo">920</span> private String procName;<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span> public FailedProcedure() {<a name="line.922"></a>
-<span class="sourceLineNo">923</span> }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.925"></a>
-<span class="sourceLineNo">926</span> NonceKey nonceKey, IOException exception) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span> this.procName = procName;<a name="line.927"></a>
-<span class="sourceLineNo">928</span> setProcId(procId);<a name="line.928"></a>
-<span class="sourceLineNo">929</span> setState(ProcedureState.ROLLEDBACK);<a name="line.929"></a>
-<span class="sourceLineNo">930</span> setOwner(owner);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> setNonceKey(nonceKey);<a name="line.931"></a>
-<span class="sourceLineNo">932</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.932"></a>
-<span class="sourceLineNo">933</span> setSubmittedTime(currentTime);<a name="line.933"></a>
-<span class="sourceLineNo">934</span> setLastUpdate(currentTime);<a name="line.934"></a>
-<span class="sourceLineNo">935</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.935"></a>
-<span class="sourceLineNo">936</span> }<a name="line.936"></a>
-<span class="sourceLineNo">937</span><a name="line.937"></a>
-<span class="sourceLineNo">938</span> @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span> public String getProcName() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span> return procName;<a name="line.940"></a>
-<span class="sourceLineNo">941</span> }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span> @Override<a name="line.943"></a>
-<span class="sourceLineNo">944</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.944"></a>
-<span class="sourceLineNo">945</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.945"></a>
-<span class="sourceLineNo">946</span> InterruptedException {<a name="line.946"></a>
-<span class="sourceLineNo">947</span> throw new UnsupportedOperationException();<a name="line.947"></a>
-<span class="sourceLineNo">948</span> }<a name="line.948"></a>
-<span class="sourceLineNo">949</span><a name="line.949"></a>
-<span class="sourceLineNo">950</span> @Override<a name="line.950"></a>
-<span class="sourceLineNo">951</span> protected void rollback(TEnvironment env)<a name="line.951"></a>
-<span class="sourceLineNo">952</span> throws IOException, InterruptedException {<a name="line.952"></a>
-<span class="sourceLineNo">953</span> throw new UnsupportedOperationException();<a name="line.953"></a>
-<span class="sourceLineNo">954</span> }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span> @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span> protected boolean abort(TEnvironment env) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span> throw new UnsupportedOperationException();<a name="line.958"></a>
-<span class="sourceLineNo">959</span> }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span> @Override<a name="line.961"></a>
-<span class="sourceLineNo">962</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.962"></a>
-<span class="sourceLineNo">963</span> throws IOException {<a name="line.963"></a>
-<span class="sourceLineNo">964</span> }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span> @Override<a name="line.966"></a>
-<span class="sourceLineNo">967</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.967"></a>
-<span class="sourceLineNo">968</span> throws IOException {<a name="line.968"></a>
-<span class="sourceLineNo">969</span> }<a name="line.969"></a>
-<span class="sourceLineNo">970</span> }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span> /**<a name="line.972"></a>
-<span class="sourceLineNo">973</span> * If the failure failed before submitting it, we may want to give back the<a name="line.973"></a>
-<span class="sourceLineNo">974</span> * same error to the requests with the same nonceKey.<a name="line.974"></a>
-<span class="sourceLineNo">975</span> *<a name="line.975"></a>
-<span class="sourceLineNo">976</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.976"></a>
-<span class="sourceLineNo">977</span> * @param procName name of the procedure, used to inform the user<a name="line.977"></a>
-<span class="sourceLineNo">978</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.978"></a>
-<span class="sourceLineNo">979</span> * @param exception the failure to report to the user<a name="line.979"></a>
-<span class="sourceLineNo">980</span> */<a name="line.980"></a>
-<span class="sourceLineNo">981</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.981"></a>
-<span class="sourceLineNo">982</span> IOException exception) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span> if (nonceKey == null) {<a name="line.983"></a>
-<span class="sourceLineNo">984</span> return;<a name="line.984"></a>
-<span class="sourceLineNo">985</span> }<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.987"></a>
-<span class="sourceLineNo">988</span> if (procId == null || completed.containsKey(procId)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span> return;<a name="line.989"></a>
-<span class="sourceLineNo">990</span> }<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span> Procedure<TEnvironment> proc =<a name="line.992"></a>
-<span class="sourceLineNo">993</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.993"></a>
-<span class="sourceLineNo">994</span><a name="line.994"></a>
-<span class="sourceLineNo">995</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.995"></a>
-<span class="sourceLineNo">996</span> }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">853</span> /**<a name="line.853"></a>
+<span class="sourceLineNo">854</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.854"></a>
+<span class="sourceLineNo">855</span> * @param nonceGroup<a name="line.855"></a>
+<span class="sourceLineNo">856</span> * @param nonce<a name="line.856"></a>
+<span class="sourceLineNo">857</span> * @return the generated NonceKey<a name="line.857"></a>
+<span class="sourceLineNo">858</span> */<a name="line.858"></a>
+<span class="sourceLineNo">859</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.860"></a>
+<span class="sourceLineNo">861</span> }<a name="line.861"></a>
+<span class="sourceLineNo">862</span><a name="line.862"></a>
+<span class="sourceLineNo">863</span> /**<a name="line.863"></a>
+<span class="sourceLineNo">864</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.864"></a>
+<span class="sourceLineNo">865</span> * A procId will be reserved and on submitProcedure(),<a name="line.865"></a>
+<span class="sourceLineNo">866</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.866"></a>
+<span class="sourceLineNo">867</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.867"></a>
+<span class="sourceLineNo">868</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.868"></a>
+<span class="sourceLineNo">869</span> * and submit the procedure.<a name="line.869"></a>
+<span class="sourceLineNo">870</span> *<a name="line.870"></a>
+<span class="sourceLineNo">871</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.871"></a>
+<span class="sourceLineNo">872</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.872"></a>
+<span class="sourceLineNo">873</span> */<a name="line.873"></a>
+<span class="sourceLineNo">874</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.874"></a>
+<span class="sourceLineNo">875</span> if (nonceKey == null) return -1;<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span> // check if we have already a Reserved ID for the nonce<a name="line.877"></a>
+<span class="sourceLineNo">878</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.878"></a>
+<span class="sourceLineNo">879</span> if (oldProcId == null) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.880"></a>
+<span class="sourceLineNo">881</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.881"></a>
+<span class="sourceLineNo">882</span> final long newProcId = nextProcId();<a name="line.882"></a>
+<span class="sourceLineNo">883</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.883"></a>
+<span class="sourceLineNo">884</span> if (oldProcId == null) return -1;<a name="line.884"></a>
+<span class="sourceLineNo">885</span> }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.887"></a>
+<span class="sourceLineNo">888</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.888"></a>
+<span class="sourceLineNo">889</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.889"></a>
+<span class="sourceLineNo">890</span> while (isRunning() &&<a name="line.890"></a>
+<span class="sourceLineNo">891</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.891"></a>
+<span class="sourceLineNo">892</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> if (traceEnabled) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> Threads.sleep(100);<a name="line.896"></a>
+<span class="sourceLineNo">897</span> }<a name="line.897"></a>
+<span class="sourceLineNo">898</span> return oldProcId.longValue();<a name="line.898"></a>
+<span class="sourceLineNo">899</span> }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span> /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.903"></a>
+<span class="sourceLineNo">904</span> */<a name="line.904"></a>
+<span class="sourceLineNo">905</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span> if (nonceKey == null) return;<a name="line.906"></a>
+<span class="sourceLineNo">907</span><a name="line.907"></a>
+<span class="sourceLineNo">908</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.908"></a>
+<span class="sourceLineNo">909</span> if (procId == null) return;<a name="line.909"></a>
+<span class="sourceLineNo">910</span><a name="line.910"></a>
+<span class="sourceLineNo">911</span> // if the procedure was not submitted, remove the nonce<a name="line.911"></a>
+<span class="sourceLineNo">912</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.912"></a>
+<span class="sourceLineNo">913</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.913"></a>
+<span class="sourceLineNo">914</span> }<a name="line.914"></a>
+<span class="sourceLineNo">915</span> }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.917"></a>
+<span class="sourceLineNo">918</span> private String procName;<a name="line.918"></a>
+<span class="sourceLineNo">919</span><a name="line.919"></a>
+<span class="sourceLineNo">920</span> public FailedProcedure() {<a name="line.920"></a>
+<span class="sourceLineNo">921</span> }<a name="line.921"></a>
+<span class="sourceLineNo">922</span><a name="line.922"></a>
+<span class="sourceLineNo">923</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.923"></a>
+<span class="sourceLineNo">924</span> NonceKey nonceKey, IOException exception) {<a name="line.924"></a>
+<span class="sourceLineNo">925</span> this.procName = procName;<a name="line.925"></a>
+<span class="sourceLineNo">926</span> setProcId(procId);<a name="line.926"></a>
+<span class="sourceLineNo">927</span> setState(ProcedureState.ROLLEDBACK);<a name="line.927"></a>
+<span class="sourceLineNo">928</span> setOwner(owner);<a name="line.928"></a>
+<span class="sourceLineNo">929</span> setNonceKey(nonceKey);<a name="line.929"></a>
+<span class="sourceLineNo">930</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.930"></a>
+<span class="sourceLineNo">931</span> setSubmittedTime(currentTime);<a name="line.931"></a>
+<span class="sourceLineNo">932</span> setLastUpdate(currentTime);<a name="line.932"></a>
+<span class="sourceLineNo">933</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.933"></a>
+<span class="sourceLineNo">934</span> }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span> @Override<a name="line.936"></a>
+<span class="sourceLineNo">937</span> public String getProcName() {<a name="line.937"></a>
+<span class="sourceLineNo">938</span> return procName;<a name="line.938"></a>
+<span class="sourceLineNo">939</span> }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span> @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.942"></a>
+<span class="sourceLineNo">943</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.943"></a>
+<span class="sourceLineNo">944</span> InterruptedException {<a name="line.944"></a>
+<span class="sourceLineNo">945</span> throw new UnsupportedOperationException();<a name="line.945"></a>
+<span class="sourceLineNo">946</span> }<a name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span> @Override<a name="line.948"></a>
+<span class="sourceLineNo">949</span> protected void rollback(TEnvironment env)<a name="line.949"></a>
+<span class="sourceLineNo">950</span> throws IOException, InterruptedException {<a name="line.950"></a>
+<span class="sourceLineNo">951</span> throw new UnsupportedOperationException();<a name="line.951"></a>
+<span class="sourceLineNo">952</span> }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span> @Override<a name="line.954"></a>
+<span class="sourceLineNo">955</span> protected boolean abort(TEnvironment env) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span> throw new UnsupportedOperationException();<a name="line.956"></a>
+<span class="sourceLineNo">957</span> }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span> @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.960"></a>
+<span class="sourceLineNo">961</span> throws IOException {<a name="line.961"></a>
+<span class="sourceLineNo">962</span> }<a name="line.962"></a>
+<span class="sourceLineNo">963</span><a name="line.963"></a>
+<span class="sourceLineNo">964</span> @Override<a name="line.964"></a>
+<span class="sourceLineNo">965</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.965"></a>
+<span class="sourceLineNo">966</span> throws IOException {<a name="line.966"></a>
+<span class="sourceLineNo">967</span> }<a name="line.967"></a>
+<span class="sourceLineNo">968</span> }<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span> /**<a name="line.970"></a>
+<span class="sourceLineNo">971</span> * If the failure failed before submitting it, we may want to give back the<a name="line.971"></a>
+<span class="sourceLineNo">972</span> * same error to the requests with the same nonceKey.<a name="line.972"></a>
+<span class="sourceLineNo">973</span> *<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * @param procName name of the procedure, used to inform the user<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * @param exception the failure to report to the user<a name="line.977"></a>
+<span class="sourceLineNo">978</span> */<a name="line.978"></a>
+<span class="sourceLineNo">979</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.979"></a>
+<span class="sourceLineNo">980</span> IOException exception) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span> if (nonceKey == null) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span> return;<a name="line.982"></a>
+<span class="sourceLineNo">983</span> }<a name="line.983"></a>
+<span class="sourceLineNo">984</span><a name="line.984"></a>
+<span class="sourceLineNo">985</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.985"></a>
+<span class="sourceLineNo">986</span> if (procId == null || completed.containsKey(procId)) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span> return;<a name="line.987"></a>
+<span class="sourceLineNo">988</span> }<a name="line.988"></a>
+<span class="sourceLineNo">989</span><a name="line.989"></a>
+<span class="sourceLineNo">990</span> Procedure<TEnvironment> proc =<a name="line.990"></a>
+<span class="sourceLineNo">991</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.991"></a>
+<span class="sourceLineNo">992</span><a name="line.992"></a>
+<span class="sourceLineNo">993</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.993"></a>
+<span class="sourceLineNo">994</span> }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span> // ==========================================================================<a name="line.996"></a>
+<span class="sourceLineNo">997</span> // Submit/Abort Procedure<a name="line.997"></a>
<span class="sourceLineNo">998</span> // ==========================================================================<a name="line.998"></a>
-<span class="sourceLineNo">999</span> // Submit/Abort Procedure<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> // ==========================================================================<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> /**<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> * Add a new root-procedure to the executor.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> * @param proc the new procedure to execute.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> * @return the procedure id, that can be used to monitor the operation<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> */<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> public long submitProcedure(Procedure<TEnvironment> proc) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> return submitProcedure(proc, null);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span><a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> /**<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> * Bypass a procedure. If the procedure is set to bypass, all the logic in<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> * execute/rollback will be ignored and it will return success, whatever.<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> * It is used to recover buggy stuck procedures, releasing the lock resources<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> * and letting other procedures run. Bypassing one procedure (and its ancestors will<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> * be bypassed automatically) may leave the cluster in a middle state, e.g. region<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> * not assigned, or some hdfs files left behind. After getting rid of those stuck procedures,<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> * the operators may have to do some clean up on hdfs or schedule some assign procedures<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> * to let region online. DO AT YOUR OWN RISK.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> * <p><a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> * A procedure can be bypassed only if<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span> * 1. The procedure is in state of RUNNABLE, WAITING, WAITING_TIMEOUT<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> * or it is a root procedure without any child.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * 2. No other worker thread is executing it<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> * 3. No child procedure has been submitted<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> *<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> * <p><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> * If all the requirements are meet, the procedure and its ancestors will be<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> * bypassed and persisted to WAL.<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> *<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span> * <p><a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> * If the procedure is in WAITING state, will set it to RUNNABLE add it to run queue.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> * TODO: What about WAITING_TIMEOUT?<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> * @param pids the procedure id<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> * @param lockWait time to wait lock<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> * @param force if force set to true, we will bypass the procedure even if it is executing.<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> * This is for procedures which can't break out during executing(due to bug, mostly)<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> * In this case, bypassing the procedure is not enough, since it is already stuck<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> * there. We need to restart the master after bypassing, and letting the problematic<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span> * procedure to execute wth bypass=true, so in that condition, the procedure can be<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> * successfully bypassed.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> * @param recursive We will do an expensive search for children of each pid. EXPENSIVE!<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> * @return true if bypass success<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> * @throws IOException IOException<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span> */<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> public List<Boolean> bypassProcedure(List<Long> pids, long lockWait, boolean force,<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span> boolean recursive)<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> throws IOException {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> List<Boolean> result = new ArrayList<Boolean>(pids.size());<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> for(long pid: pids) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span> result.add(bypassProcedure(pid, lockWait, force, recursive));<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> return result;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span> }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> boolean bypassProcedure(long pid, long lockWait, boolean override, boolean recursive)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span> throws IOException {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> Preconditions.checkArgument(lockWait > 0, "lockWait should be positive");<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span> final Procedure<TEnvironment> procedure = getProcedure(pid);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span> if (procedure == null) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> LOG.debug("Procedure pid={} does not exist, skipping bypass", pid);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> return false;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span> }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span><a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> LOG.debug("Begin bypass {} with lockWait={}, override={}, recursive={}",<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span> procedure, lockWait, override, recursive);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> IdLock.Entry lockEntry = procExecutionLock.tryLockEntry(procedure.getProcId(), lockWait);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> if (lockEntry == null && !override) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> LOG.debug("Waited {} ms, but {} is still running, skipping bypass with force={}",<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> lockWait, procedure, override);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> } else if (lockEntry == null) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> LOG.debug("Waited {} ms, but {} is still running, begin bypass with force={}",<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span> lockWait, procedure, override);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // check whether the procedure is already finished<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> if (procedure.isFinished()) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> LOG.debug("{} is already finished, skipping bypass", procedure);<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> return false;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> if (procedure.hasChildren()) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> if (recursive) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> // EXPENSIVE. Checks each live procedure of which there could be many!!!<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span> // Is there another way to get children of a procedure?<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> LOG.info("Recursive bypass on children of pid={}", procedure.getProcId());<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> this.procedures.forEachValue(1 /*Single-threaded*/,<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> // Transformer<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> v -> v.getParentProcId() == procedure.getProcId()? v: null,<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> // Consumer<a name="line.1090
<TRUNCATED>
[27/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
index c97436d..5da5c49 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2273">HStore.StoreFlusherImpl</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2266">HStore.StoreFlusherImpl</a>
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="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFlushContext</a></pre>
</li>
@@ -279,7 +279,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>tracker</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2275">tracker</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2268">tracker</a></pre>
</li>
</ul>
<a name="cacheFlushSeqNum">
@@ -288,7 +288,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>cacheFlushSeqNum</h4>
-<pre>private final long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2276">cacheFlushSeqNum</a></pre>
+<pre>private final long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2269">cacheFlushSeqNum</a></pre>
</li>
</ul>
<a name="snapshot">
@@ -297,7 +297,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>snapshot</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSnapshot</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2277">snapshot</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSnapshot</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2270">snapshot</a></pre>
</li>
</ul>
<a name="tempFiles">
@@ -306,7 +306,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>tempFiles</h4>
-<pre>private <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><org.apache.hadoop.fs.Path> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2278">tempFiles</a></pre>
+<pre>private <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><org.apache.hadoop.fs.Path> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2271">tempFiles</a></pre>
</li>
</ul>
<a name="committedFiles">
@@ -315,7 +315,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>committedFiles</h4>
-<pre>private <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><org.apache.hadoop.fs.Path> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2279">committedFiles</a></pre>
+<pre>private <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><org.apache.hadoop.fs.Path> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2272">committedFiles</a></pre>
</li>
</ul>
<a name="cacheFlushCount">
@@ -324,7 +324,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>cacheFlushCount</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2280">cacheFlushCount</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2273">cacheFlushCount</a></pre>
</li>
</ul>
<a name="cacheFlushSize">
@@ -333,7 +333,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>cacheFlushSize</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2281">cacheFlushSize</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2274">cacheFlushSize</a></pre>
</li>
</ul>
<a name="outputFileSize">
@@ -342,7 +342,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockListLast">
<li class="blockList">
<h4>outputFileSize</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2282">outputFileSize</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2275">outputFileSize</a></pre>
</li>
</ul>
</li>
@@ -359,7 +359,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockListLast">
<li class="blockList">
<h4>StoreFlusherImpl</h4>
-<pre>private <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2284">StoreFlusherImpl</a>(long cacheFlushSeqNum,
+<pre>private <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2277">StoreFlusherImpl</a>(long cacheFlushSeqNum,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a> tracker)</pre>
</li>
</ul>
@@ -377,7 +377,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>prepare</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2294">prepare</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2287">prepare</a>()</pre>
<div class="block">This is not thread safe. The caller should have a lock on the region or the store.
If necessary, the lock can be added with the patch provided in HBASE-10087</div>
<dl>
@@ -394,7 +394,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>flushCache</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2304">flushCache</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2297">flushCache</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
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"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html#flushCache-org.apache.hadoop.hbase.monitoring.MonitoredTask-">StoreFlushContext</a></code></span></div>
<div class="block">Flush the cache (create the new store file)
@@ -415,7 +415,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>commit</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2313">commit</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2306">commit</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
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"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html#commit-org.apache.hadoop.hbase.monitoring.MonitoredTask-">StoreFlushContext</a></code></span></div>
<div class="block">Commit the flush - add the store file to the store and clear the
@@ -440,7 +440,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>getOutputFileSize</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2356">getOutputFileSize</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2349">getOutputFileSize</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html#getOutputFileSize--">getOutputFileSize</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFlushContext</a></code></dd>
@@ -455,7 +455,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>getCommittedFiles</h4>
-<pre>public <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><org.apache.hadoop.fs.Path> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2361">getCommittedFiles</a>()</pre>
+<pre>public <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><org.apache.hadoop.fs.Path> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2354">getCommittedFiles</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html#getCommittedFiles--">StoreFlushContext</a></code></span></div>
<div class="block">Returns the newly committed files from the flush. Called only if commit returns true</div>
<dl>
@@ -472,7 +472,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockList">
<li class="blockList">
<h4>replayFlush</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2374">replayFlush</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><<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>> fileNames,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2367">replayFlush</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><<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>> fileNames,
boolean dropMemstoreSnapshot)
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">Similar to commit, but called in secondary region replicas for replaying the
@@ -495,7 +495,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
<ul class="blockListLast">
<li class="blockList">
<h4>abort</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2406">abort</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2399">abort</a>()
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">Abort the snapshot preparation. Drops the snapshot if any.</div>
<dl>
[13/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
index 5b9d987..b595018 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
@@ -310,2495 +310,2488 @@
<span class="sourceLineNo">302</span> }<a name="line.302"></a>
<span class="sourceLineNo">303</span><a name="line.303"></a>
<span class="sourceLineNo">304</span> this.storeEngine = createStoreEngine(this, this.conf, this.comparator);<a name="line.304"></a>
-<span class="sourceLineNo">305</span> this.storeEngine.getStoreFileManager().loadFiles(loadStoreFiles());<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Initialize checksum type from name. The names are CRC32, CRC32C, etc.<a name="line.307"></a>
-<span class="sourceLineNo">308</span> this.checksumType = getChecksumType(conf);<a name="line.308"></a>
-<span class="sourceLineNo">309</span> // Initialize bytes per checksum<a name="line.309"></a>
-<span class="sourceLineNo">310</span> this.bytesPerChecksum = getBytesPerChecksum(conf);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> flushRetriesNumber = conf.getInt(<a name="line.311"></a>
-<span class="sourceLineNo">312</span> "hbase.hstore.flush.retries.number", DEFAULT_FLUSH_RETRIES_NUMBER);<a name="line.312"></a>
-<span class="sourceLineNo">313</span> pauseTime = conf.getInt(HConstants.HBASE_SERVER_PAUSE, HConstants.DEFAULT_HBASE_SERVER_PAUSE);<a name="line.313"></a>
-<span class="sourceLineNo">314</span> if (flushRetriesNumber <= 0) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> throw new IllegalArgumentException(<a name="line.315"></a>
-<span class="sourceLineNo">316</span> "hbase.hstore.flush.retries.number must be > 0, not "<a name="line.316"></a>
-<span class="sourceLineNo">317</span> + flushRetriesNumber);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> cryptoContext = EncryptionUtil.createEncryptionContext(conf, family);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> int confPrintThreshold =<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.conf.getInt("hbase.region.store.parallel.put.print.threshold", 50);<a name="line.322"></a>
-<span class="sourceLineNo">323</span> if (confPrintThreshold < 10) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> confPrintThreshold = 10;<a name="line.324"></a>
+<span class="sourceLineNo">305</span> List<HStoreFile> hStoreFiles = loadStoreFiles();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> // Move the storeSize calculation out of loadStoreFiles() method, because the secondary read<a name="line.306"></a>
+<span class="sourceLineNo">307</span> // replica's refreshStoreFiles() will also use loadStoreFiles() to refresh its store files and<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // update the storeSize in the completeCompaction(..) finally (just like compaction) , so<a name="line.308"></a>
+<span class="sourceLineNo">309</span> // no need calculate the storeSize twice.<a name="line.309"></a>
+<span class="sourceLineNo">310</span> this.storeSize.addAndGet(getStorefilesSize(hStoreFiles, sf -> true));<a name="line.310"></a>
+<span class="sourceLineNo">311</span> this.totalUncompressedBytes.addAndGet(getTotalUmcompressedBytes(hStoreFiles));<a name="line.311"></a>
+<span class="sourceLineNo">312</span> this.storeEngine.getStoreFileManager().loadFiles(hStoreFiles);<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // Initialize checksum type from name. The names are CRC32, CRC32C, etc.<a name="line.314"></a>
+<span class="sourceLineNo">315</span> this.checksumType = getChecksumType(conf);<a name="line.315"></a>
+<span class="sourceLineNo">316</span> // Initialize bytes per checksum<a name="line.316"></a>
+<span class="sourceLineNo">317</span> this.bytesPerChecksum = getBytesPerChecksum(conf);<a name="line.317"></a>
+<span class="sourceLineNo">318</span> flushRetriesNumber = conf.getInt(<a name="line.318"></a>
+<span class="sourceLineNo">319</span> "hbase.hstore.flush.retries.number", DEFAULT_FLUSH_RETRIES_NUMBER);<a name="line.319"></a>
+<span class="sourceLineNo">320</span> pauseTime = conf.getInt(HConstants.HBASE_SERVER_PAUSE, HConstants.DEFAULT_HBASE_SERVER_PAUSE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> if (flushRetriesNumber <= 0) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span> throw new IllegalArgumentException(<a name="line.322"></a>
+<span class="sourceLineNo">323</span> "hbase.hstore.flush.retries.number must be > 0, not "<a name="line.323"></a>
+<span class="sourceLineNo">324</span> + flushRetriesNumber);<a name="line.324"></a>
<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> this.parallelPutCountPrintThreshold = confPrintThreshold;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> LOG.info("Store={}, memstore type={}, storagePolicy={}, verifyBulkLoads={}, "<a name="line.327"></a>
-<span class="sourceLineNo">328</span> + "parallelPutCountPrintThreshold={}, encoding={}, compression={}",<a name="line.328"></a>
-<span class="sourceLineNo">329</span> getColumnFamilyName(), memstore.getClass().getSimpleName(), policyName, verifyBulkLoads,<a name="line.329"></a>
-<span class="sourceLineNo">330</span> parallelPutCountPrintThreshold, family.getDataBlockEncoding(),<a name="line.330"></a>
-<span class="sourceLineNo">331</span> family.getCompressionType());<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span> /**<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @return MemStore Instance to use in this store.<a name="line.335"></a>
-<span class="sourceLineNo">336</span> */<a name="line.336"></a>
-<span class="sourceLineNo">337</span> private MemStore getMemstore() {<a name="line.337"></a>
-<span class="sourceLineNo">338</span> MemStore ms = null;<a name="line.338"></a>
-<span class="sourceLineNo">339</span> // Check if in-memory-compaction configured. Note MemoryCompactionPolicy is an enum!<a name="line.339"></a>
-<span class="sourceLineNo">340</span> MemoryCompactionPolicy inMemoryCompaction = null;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> if (this.getTableName().isSystemTable()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span> inMemoryCompaction = MemoryCompactionPolicy.valueOf(<a name="line.342"></a>
-<span class="sourceLineNo">343</span> conf.get("hbase.systemtables.compacting.memstore.type", "NONE"));<a name="line.343"></a>
-<span class="sourceLineNo">344</span> } else {<a name="line.344"></a>
-<span class="sourceLineNo">345</span> inMemoryCompaction = family.getInMemoryCompaction();<a name="line.345"></a>
-<span class="sourceLineNo">346</span> }<a name="line.346"></a>
-<span class="sourceLineNo">347</span> if (inMemoryCompaction == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> inMemoryCompaction =<a name="line.348"></a>
-<span class="sourceLineNo">349</span> MemoryCompactionPolicy.valueOf(conf.get(CompactingMemStore.COMPACTING_MEMSTORE_TYPE_KEY,<a name="line.349"></a>
-<span class="sourceLineNo">350</span> CompactingMemStore.COMPACTING_MEMSTORE_TYPE_DEFAULT).toUpperCase());<a name="line.350"></a>
-<span class="sourceLineNo">351</span> }<a name="line.351"></a>
-<span class="sourceLineNo">352</span> switch (inMemoryCompaction) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> case NONE:<a name="line.353"></a>
-<span class="sourceLineNo">354</span> ms = ReflectionUtils.newInstance(DefaultMemStore.class,<a name="line.354"></a>
-<span class="sourceLineNo">355</span> new Object[] { conf, this.comparator,<a name="line.355"></a>
-<span class="sourceLineNo">356</span> this.getHRegion().getRegionServicesForStores()});<a name="line.356"></a>
-<span class="sourceLineNo">357</span> break;<a name="line.357"></a>
-<span class="sourceLineNo">358</span> default:<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Class<? extends CompactingMemStore> clz = conf.getClass(MEMSTORE_CLASS_NAME,<a name="line.359"></a>
-<span class="sourceLineNo">360</span> CompactingMemStore.class, CompactingMemStore.class);<a name="line.360"></a>
-<span class="sourceLineNo">361</span> ms = ReflectionUtils.newInstance(clz, new Object[]{conf, this.comparator, this,<a name="line.361"></a>
-<span class="sourceLineNo">362</span> this.getHRegion().getRegionServicesForStores(), inMemoryCompaction});<a name="line.362"></a>
-<span class="sourceLineNo">363</span> }<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return ms;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span> * Creates the cache config.<a name="line.368"></a>
-<span class="sourceLineNo">369</span> * @param family The current column family.<a name="line.369"></a>
-<span class="sourceLineNo">370</span> */<a name="line.370"></a>
-<span class="sourceLineNo">371</span> protected void createCacheConf(final ColumnFamilyDescriptor family) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> this.cacheConf = new CacheConfig(conf, family);<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span> /**<a name="line.375"></a>
-<span class="sourceLineNo">376</span> * Creates the store engine configured for the given Store.<a name="line.376"></a>
-<span class="sourceLineNo">377</span> * @param store The store. An unfortunate dependency needed due to it<a name="line.377"></a>
-<span class="sourceLineNo">378</span> * being passed to coprocessors via the compactor.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> * @param conf Store configuration.<a name="line.379"></a>
-<span class="sourceLineNo">380</span> * @param kvComparator KVComparator for storeFileManager.<a name="line.380"></a>
-<span class="sourceLineNo">381</span> * @return StoreEngine to use.<a name="line.381"></a>
-<span class="sourceLineNo">382</span> */<a name="line.382"></a>
-<span class="sourceLineNo">383</span> protected StoreEngine<?, ?, ?, ?> createStoreEngine(HStore store, Configuration conf,<a name="line.383"></a>
-<span class="sourceLineNo">384</span> CellComparator kvComparator) throws IOException {<a name="line.384"></a>
-<span class="sourceLineNo">385</span> return StoreEngine.create(store, conf, comparator);<a name="line.385"></a>
-<span class="sourceLineNo">386</span> }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span> /**<a name="line.388"></a>
-<span class="sourceLineNo">389</span> * @param family<a name="line.389"></a>
-<span class="sourceLineNo">390</span> * @return TTL in seconds of the specified family<a name="line.390"></a>
-<span class="sourceLineNo">391</span> */<a name="line.391"></a>
-<span class="sourceLineNo">392</span> public static long determineTTLFromFamily(final ColumnFamilyDescriptor family) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span> // HCD.getTimeToLive returns ttl in seconds. Convert to milliseconds.<a name="line.393"></a>
-<span class="sourceLineNo">394</span> long ttl = family.getTimeToLive();<a name="line.394"></a>
-<span class="sourceLineNo">395</span> if (ttl == HConstants.FOREVER) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span> // Default is unlimited ttl.<a name="line.396"></a>
-<span class="sourceLineNo">397</span> ttl = Long.MAX_VALUE;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } else if (ttl == -1) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> ttl = Long.MAX_VALUE;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> } else {<a name="line.400"></a>
-<span class="sourceLineNo">401</span> // Second -> ms adjust for user data<a name="line.401"></a>
-<span class="sourceLineNo">402</span> ttl *= 1000;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return ttl;<a name="line.404"></a>
-<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span> @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span> public String getColumnFamilyName() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> return this.family.getNameAsString();<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public TableName getTableName() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return this.getRegionInfo().getTable();<a name="line.414"></a>
-<span class="sourceLineNo">415</span> }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span> @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span> public FileSystem getFileSystem() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span> return this.fs.getFileSystem();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span> public HRegionFileSystem getRegionFileSystem() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span> return this.fs;<a name="line.423"></a>
-<span class="sourceLineNo">424</span> }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span> /* Implementation of StoreConfigInformation */<a name="line.426"></a>
-<span class="sourceLineNo">427</span> @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span> public long getStoreFileTtl() {<a name="line.428"></a>
-<span class="sourceLineNo">429</span> // TTL only applies if there's no MIN_VERSIONs setting on the column.<a name="line.429"></a>
-<span class="sourceLineNo">430</span> return (this.scanInfo.getMinVersions() == 0) ? this.scanInfo.getTtl() : Long.MAX_VALUE;<a name="line.430"></a>
+<span class="sourceLineNo">326</span> cryptoContext = EncryptionUtil.createEncryptionContext(conf, family);<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span> int confPrintThreshold =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> this.conf.getInt("hbase.region.store.parallel.put.print.threshold", 50);<a name="line.329"></a>
+<span class="sourceLineNo">330</span> if (confPrintThreshold < 10) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> confPrintThreshold = 10;<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span> this.parallelPutCountPrintThreshold = confPrintThreshold;<a name="line.333"></a>
+<span class="sourceLineNo">334</span> LOG.info("Store={}, memstore type={}, storagePolicy={}, verifyBulkLoads={}, "<a name="line.334"></a>
+<span class="sourceLineNo">335</span> + "parallelPutCountPrintThreshold={}, encoding={}, compression={}",<a name="line.335"></a>
+<span class="sourceLineNo">336</span> getColumnFamilyName(), memstore.getClass().getSimpleName(), policyName, verifyBulkLoads,<a name="line.336"></a>
+<span class="sourceLineNo">337</span> parallelPutCountPrintThreshold, family.getDataBlockEncoding(),<a name="line.337"></a>
+<span class="sourceLineNo">338</span> family.getCompressionType());<a name="line.338"></a>
+<span class="sourceLineNo">339</span> }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * @return MemStore Instance to use in this store.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> */<a name="line.343"></a>
+<span class="sourceLineNo">344</span> private MemStore getMemstore() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> MemStore ms = null;<a name="line.345"></a>
+<span class="sourceLineNo">346</span> // Check if in-memory-compaction configured. Note MemoryCompactionPolicy is an enum!<a name="line.346"></a>
+<span class="sourceLineNo">347</span> MemoryCompactionPolicy inMemoryCompaction = null;<a name="line.347"></a>
+<span class="sourceLineNo">348</span> if (this.getTableName().isSystemTable()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> inMemoryCompaction = MemoryCompactionPolicy.valueOf(<a name="line.349"></a>
+<span class="sourceLineNo">350</span> conf.get("hbase.systemtables.compacting.memstore.type", "NONE"));<a name="line.350"></a>
+<span class="sourceLineNo">351</span> } else {<a name="line.351"></a>
+<span class="sourceLineNo">352</span> inMemoryCompaction = family.getInMemoryCompaction();<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span> if (inMemoryCompaction == null) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span> inMemoryCompaction =<a name="line.355"></a>
+<span class="sourceLineNo">356</span> MemoryCompactionPolicy.valueOf(conf.get(CompactingMemStore.COMPACTING_MEMSTORE_TYPE_KEY,<a name="line.356"></a>
+<span class="sourceLineNo">357</span> CompactingMemStore.COMPACTING_MEMSTORE_TYPE_DEFAULT).toUpperCase());<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> switch (inMemoryCompaction) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span> case NONE:<a name="line.360"></a>
+<span class="sourceLineNo">361</span> ms = ReflectionUtils.newInstance(DefaultMemStore.class,<a name="line.361"></a>
+<span class="sourceLineNo">362</span> new Object[] { conf, this.comparator,<a name="line.362"></a>
+<span class="sourceLineNo">363</span> this.getHRegion().getRegionServicesForStores()});<a name="line.363"></a>
+<span class="sourceLineNo">364</span> break;<a name="line.364"></a>
+<span class="sourceLineNo">365</span> default:<a name="line.365"></a>
+<span class="sourceLineNo">366</span> Class<? extends CompactingMemStore> clz = conf.getClass(MEMSTORE_CLASS_NAME,<a name="line.366"></a>
+<span class="sourceLineNo">367</span> CompactingMemStore.class, CompactingMemStore.class);<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ms = ReflectionUtils.newInstance(clz, new Object[]{conf, this.comparator, this,<a name="line.368"></a>
+<span class="sourceLineNo">369</span> this.getHRegion().getRegionServicesForStores(), inMemoryCompaction});<a name="line.369"></a>
+<span class="sourceLineNo">370</span> }<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return ms;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> /**<a name="line.374"></a>
+<span class="sourceLineNo">375</span> * Creates the cache config.<a name="line.375"></a>
+<span class="sourceLineNo">376</span> * @param family The current column family.<a name="line.376"></a>
+<span class="sourceLineNo">377</span> */<a name="line.377"></a>
+<span class="sourceLineNo">378</span> protected void createCacheConf(final ColumnFamilyDescriptor family) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> this.cacheConf = new CacheConfig(conf, family);<a name="line.379"></a>
+<span class="sourceLineNo">380</span> }<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span> /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span> * Creates the store engine configured for the given Store.<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * @param store The store. An unfortunate dependency needed due to it<a name="line.384"></a>
+<span class="sourceLineNo">385</span> * being passed to coprocessors via the compactor.<a name="line.385"></a>
+<span class="sourceLineNo">386</span> * @param conf Store configuration.<a name="line.386"></a>
+<span class="sourceLineNo">387</span> * @param kvComparator KVComparator for storeFileManager.<a name="line.387"></a>
+<span class="sourceLineNo">388</span> * @return StoreEngine to use.<a name="line.388"></a>
+<span class="sourceLineNo">389</span> */<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected StoreEngine<?, ?, ?, ?> createStoreEngine(HStore store, Configuration conf,<a name="line.390"></a>
+<span class="sourceLineNo">391</span> CellComparator kvComparator) throws IOException {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> return StoreEngine.create(store, conf, comparator);<a name="line.392"></a>
+<span class="sourceLineNo">393</span> }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span> /**<a name="line.395"></a>
+<span class="sourceLineNo">396</span> * @param family<a name="line.396"></a>
+<span class="sourceLineNo">397</span> * @return TTL in seconds of the specified family<a name="line.397"></a>
+<span class="sourceLineNo">398</span> */<a name="line.398"></a>
+<span class="sourceLineNo">399</span> public static long determineTTLFromFamily(final ColumnFamilyDescriptor family) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span> // HCD.getTimeToLive returns ttl in seconds. Convert to milliseconds.<a name="line.400"></a>
+<span class="sourceLineNo">401</span> long ttl = family.getTimeToLive();<a name="line.401"></a>
+<span class="sourceLineNo">402</span> if (ttl == HConstants.FOREVER) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span> // Default is unlimited ttl.<a name="line.403"></a>
+<span class="sourceLineNo">404</span> ttl = Long.MAX_VALUE;<a name="line.404"></a>
+<span class="sourceLineNo">405</span> } else if (ttl == -1) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span> ttl = Long.MAX_VALUE;<a name="line.406"></a>
+<span class="sourceLineNo">407</span> } else {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> // Second -> ms adjust for user data<a name="line.408"></a>
+<span class="sourceLineNo">409</span> ttl *= 1000;<a name="line.409"></a>
+<span class="sourceLineNo">410</span> }<a name="line.410"></a>
+<span class="sourceLineNo">411</span> return ttl;<a name="line.411"></a>
+<span class="sourceLineNo">412</span> }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span> @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span> public String getColumnFamilyName() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span> return this.family.getNameAsString();<a name="line.416"></a>
+<span class="sourceLineNo">417</span> }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span> @Override<a name="line.419"></a>
+<span class="sourceLineNo">420</span> public TableName getTableName() {<a name="line.420"></a>
+<span class="sourceLineNo">421</span> return this.getRegionInfo().getTable();<a name="line.421"></a>
+<span class="sourceLineNo">422</span> }<a name="line.422"></a>
+<span class="sourceLineNo">423</span><a name="line.423"></a>
+<span class="sourceLineNo">424</span> @Override<a name="line.424"></a>
+<span class="sourceLineNo">425</span> public FileSystem getFileSystem() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span> return this.fs.getFileSystem();<a name="line.426"></a>
+<span class="sourceLineNo">427</span> }<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span> public HRegionFileSystem getRegionFileSystem() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> return this.fs;<a name="line.430"></a>
<span class="sourceLineNo">431</span> }<a name="line.431"></a>
<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span> public long getMemStoreFlushSize() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span> // TODO: Why is this in here? The flushsize of the region rather than the store? St.Ack<a name="line.435"></a>
-<span class="sourceLineNo">436</span> return this.region.memstoreFlushSize;<a name="line.436"></a>
-<span class="sourceLineNo">437</span> }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span> @Override<a name="line.439"></a>
-<span class="sourceLineNo">440</span> public MemStoreSize getFlushableSize() {<a name="line.440"></a>
-<span class="sourceLineNo">441</span> return this.memstore.getFlushableSize();<a name="line.441"></a>
-<span class="sourceLineNo">442</span> }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span> @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span> public MemStoreSize getSnapshotSize() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> return this.memstore.getSnapshotSize();<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span> public long getCompactionCheckMultiplier() {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> return this.compactionCheckMultiplier;<a name="line.451"></a>
-<span class="sourceLineNo">452</span> }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span> @Override<a name="line.454"></a>
-<span class="sourceLineNo">455</span> public long getBlockingFileCount() {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> return blockingFileCount;<a name="line.456"></a>
-<span class="sourceLineNo">457</span> }<a name="line.457"></a>
-<span class="sourceLineNo">458</span> /* End implementation of StoreConfigInformation */<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> /**<a name="line.460"></a>
-<span class="sourceLineNo">461</span> * Returns the configured bytesPerChecksum value.<a name="line.461"></a>
-<span class="sourceLineNo">462</span> * @param conf The configuration<a name="line.462"></a>
-<span class="sourceLineNo">463</span> * @return The bytesPerChecksum that is set in the configuration<a name="line.463"></a>
-<span class="sourceLineNo">464</span> */<a name="line.464"></a>
-<span class="sourceLineNo">465</span> public static int getBytesPerChecksum(Configuration conf) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> return conf.getInt(HConstants.BYTES_PER_CHECKSUM,<a name="line.466"></a>
-<span class="sourceLineNo">467</span> HFile.DEFAULT_BYTES_PER_CHECKSUM);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span> /**<a name="line.470"></a>
-<span class="sourceLineNo">471</span> * Returns the configured checksum algorithm.<a name="line.471"></a>
-<span class="sourceLineNo">472</span> * @param conf The configuration<a name="line.472"></a>
-<span class="sourceLineNo">473</span> * @return The checksum algorithm that is set in the configuration<a name="line.473"></a>
-<span class="sourceLineNo">474</span> */<a name="line.474"></a>
-<span class="sourceLineNo">475</span> public static ChecksumType getChecksumType(Configuration conf) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span> String checksumName = conf.get(HConstants.CHECKSUM_TYPE_NAME);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> if (checksumName == null) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span> return ChecksumType.getDefaultChecksumType();<a name="line.478"></a>
-<span class="sourceLineNo">479</span> } else {<a name="line.479"></a>
-<span class="sourceLineNo">480</span> return ChecksumType.nameToType(checksumName);<a name="line.480"></a>
-<span class="sourceLineNo">481</span> }<a name="line.481"></a>
-<span class="sourceLineNo">482</span> }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span> /**<a name="line.484"></a>
-<span class="sourceLineNo">485</span> * @return how many bytes to write between status checks<a name="line.485"></a>
-<span class="sourceLineNo">486</span> */<a name="line.486"></a>
-<span class="sourceLineNo">487</span> public static int getCloseCheckInterval() {<a name="line.487"></a>
-<span class="sourceLineNo">488</span> return closeCheckInterval;<a name="line.488"></a>
+<span class="sourceLineNo">433</span> /* Implementation of StoreConfigInformation */<a name="line.433"></a>
+<span class="sourceLineNo">434</span> @Override<a name="line.434"></a>
+<span class="sourceLineNo">435</span> public long getStoreFileTtl() {<a name="line.435"></a>
+<span class="sourceLineNo">436</span> // TTL only applies if there's no MIN_VERSIONs setting on the column.<a name="line.436"></a>
+<span class="sourceLineNo">437</span> return (this.scanInfo.getMinVersions() == 0) ? this.scanInfo.getTtl() : Long.MAX_VALUE;<a name="line.437"></a>
+<span class="sourceLineNo">438</span> }<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span> @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span> public long getMemStoreFlushSize() {<a name="line.441"></a>
+<span class="sourceLineNo">442</span> // TODO: Why is this in here? The flushsize of the region rather than the store? St.Ack<a name="line.442"></a>
+<span class="sourceLineNo">443</span> return this.region.memstoreFlushSize;<a name="line.443"></a>
+<span class="sourceLineNo">444</span> }<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span> @Override<a name="line.446"></a>
+<span class="sourceLineNo">447</span> public MemStoreSize getFlushableSize() {<a name="line.447"></a>
+<span class="sourceLineNo">448</span> return this.memstore.getFlushableSize();<a name="line.448"></a>
+<span class="sourceLineNo">449</span> }<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
+<span class="sourceLineNo">452</span> public MemStoreSize getSnapshotSize() {<a name="line.452"></a>
+<span class="sourceLineNo">453</span> return this.memstore.getSnapshotSize();<a name="line.453"></a>
+<span class="sourceLineNo">454</span> }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span> @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span> public long getCompactionCheckMultiplier() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span> return this.compactionCheckMultiplier;<a name="line.458"></a>
+<span class="sourceLineNo">459</span> }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span> @Override<a name="line.461"></a>
+<span class="sourceLineNo">462</span> public long getBlockingFileCount() {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> return blockingFileCount;<a name="line.463"></a>
+<span class="sourceLineNo">464</span> }<a name="line.464"></a>
+<span class="sourceLineNo">465</span> /* End implementation of StoreConfigInformation */<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span> /**<a name="line.467"></a>
+<span class="sourceLineNo">468</span> * Returns the configured bytesPerChecksum value.<a name="line.468"></a>
+<span class="sourceLineNo">469</span> * @param conf The configuration<a name="line.469"></a>
+<span class="sourceLineNo">470</span> * @return The bytesPerChecksum that is set in the configuration<a name="line.470"></a>
+<span class="sourceLineNo">471</span> */<a name="line.471"></a>
+<span class="sourceLineNo">472</span> public static int getBytesPerChecksum(Configuration conf) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span> return conf.getInt(HConstants.BYTES_PER_CHECKSUM,<a name="line.473"></a>
+<span class="sourceLineNo">474</span> HFile.DEFAULT_BYTES_PER_CHECKSUM);<a name="line.474"></a>
+<span class="sourceLineNo">475</span> }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span> /**<a name="line.477"></a>
+<span class="sourceLineNo">478</span> * Returns the configured checksum algorithm.<a name="line.478"></a>
+<span class="sourceLineNo">479</span> * @param conf The configuration<a name="line.479"></a>
+<span class="sourceLineNo">480</span> * @return The checksum algorithm that is set in the configuration<a name="line.480"></a>
+<span class="sourceLineNo">481</span> */<a name="line.481"></a>
+<span class="sourceLineNo">482</span> public static ChecksumType getChecksumType(Configuration conf) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span> String checksumName = conf.get(HConstants.CHECKSUM_TYPE_NAME);<a name="line.483"></a>
+<span class="sourceLineNo">484</span> if (checksumName == null) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> return ChecksumType.getDefaultChecksumType();<a name="line.485"></a>
+<span class="sourceLineNo">486</span> } else {<a name="line.486"></a>
+<span class="sourceLineNo">487</span> return ChecksumType.nameToType(checksumName);<a name="line.487"></a>
+<span class="sourceLineNo">488</span> }<a name="line.488"></a>
<span class="sourceLineNo">489</span> }<a name="line.489"></a>
<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span> @Override<a name="line.491"></a>
-<span class="sourceLineNo">492</span> public ColumnFamilyDescriptor getColumnFamilyDescriptor() {<a name="line.492"></a>
-<span class="sourceLineNo">493</span> return this.family;<a name="line.493"></a>
-<span class="sourceLineNo">494</span> }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span> @Override<a name="line.496"></a>
-<span class="sourceLineNo">497</span> public OptionalLong getMaxSequenceId() {<a name="line.497"></a>
-<span class="sourceLineNo">498</span> return StoreUtils.getMaxSequenceIdInList(this.getStorefiles());<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public OptionalLong getMaxMemStoreTS() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> return StoreUtils.getMaxMemStoreTSInList(this.getStorefiles());<a name="line.503"></a>
-<span class="sourceLineNo">504</span> }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span> /**<a name="line.506"></a>
-<span class="sourceLineNo">507</span> * @param tabledir {@link Path} to where the table is being stored<a name="line.507"></a>
-<span class="sourceLineNo">508</span> * @param hri {@link RegionInfo} for the region.<a name="line.508"></a>
-<span class="sourceLineNo">509</span> * @param family {@link ColumnFamilyDescriptor} describing the column family<a name="line.509"></a>
-<span class="sourceLineNo">510</span> * @return Path to family/Store home directory.<a name="line.510"></a>
-<span class="sourceLineNo">511</span> */<a name="line.511"></a>
-<span class="sourceLineNo">512</span> @Deprecated<a name="line.512"></a>
-<span class="sourceLineNo">513</span> public static Path getStoreHomedir(final Path tabledir,<a name="line.513"></a>
-<span class="sourceLineNo">514</span> final RegionInfo hri, final byte[] family) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span> return getStoreHomedir(tabledir, hri.getEncodedName(), family);<a name="line.515"></a>
-<span class="sourceLineNo">516</span> }<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span> * @param tabledir {@link Path} to where the table is being stored<a name="line.519"></a>
-<span class="sourceLineNo">520</span> * @param encodedName Encoded region name.<a name="line.520"></a>
-<span class="sourceLineNo">521</span> * @param family {@link ColumnFamilyDescriptor} describing the column family<a name="line.521"></a>
-<span class="sourceLineNo">522</span> * @return Path to family/Store home directory.<a name="line.522"></a>
-<span class="sourceLineNo">523</span> */<a name="line.523"></a>
-<span class="sourceLineNo">524</span> @Deprecated<a name="line.524"></a>
-<span class="sourceLineNo">525</span> public static Path getStoreHomedir(final Path tabledir,<a name="line.525"></a>
-<span class="sourceLineNo">526</span> final String encodedName, final byte[] family) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span> return new Path(tabledir, new Path(encodedName, Bytes.toString(family)));<a name="line.527"></a>
-<span class="sourceLineNo">528</span> }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> /**<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * @return the data block encoder<a name="line.531"></a>
-<span class="sourceLineNo">532</span> */<a name="line.532"></a>
-<span class="sourceLineNo">533</span> public HFileDataBlockEncoder getDataBlockEncoder() {<a name="line.533"></a>
-<span class="sourceLineNo">534</span> return dataBlockEncoder;<a name="line.534"></a>
+<span class="sourceLineNo">491</span> /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span> * @return how many bytes to write between status checks<a name="line.492"></a>
+<span class="sourceLineNo">493</span> */<a name="line.493"></a>
+<span class="sourceLineNo">494</span> public static int getCloseCheckInterval() {<a name="line.494"></a>
+<span class="sourceLineNo">495</span> return closeCheckInterval;<a name="line.495"></a>
+<span class="sourceLineNo">496</span> }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span> @Override<a name="line.498"></a>
+<span class="sourceLineNo">499</span> public ColumnFamilyDescriptor getColumnFamilyDescriptor() {<a name="line.499"></a>
+<span class="sourceLineNo">500</span> return this.family;<a name="line.500"></a>
+<span class="sourceLineNo">501</span> }<a name="line.501"></a>
+<span class="sourceLineNo">502</span><a name="line.502"></a>
+<span class="sourceLineNo">503</span> @Override<a name="line.503"></a>
+<span class="sourceLineNo">504</span> public OptionalLong getMaxSequenceId() {<a name="line.504"></a>
+<span class="sourceLineNo">505</span> return StoreUtils.getMaxSequenceIdInList(this.getStorefiles());<a name="line.505"></a>
+<span class="sourceLineNo">506</span> }<a name="line.506"></a>
+<span class="sourceLineNo">507</span><a name="line.507"></a>
+<span class="sourceLineNo">508</span> @Override<a name="line.508"></a>
+<span class="sourceLineNo">509</span> public OptionalLong getMaxMemStoreTS() {<a name="line.509"></a>
+<span class="sourceLineNo">510</span> return StoreUtils.getMaxMemStoreTSInList(this.getStorefiles());<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span> /**<a name="line.513"></a>
+<span class="sourceLineNo">514</span> * @param tabledir {@link Path} to where the table is being stored<a name="line.514"></a>
+<span class="sourceLineNo">515</span> * @param hri {@link RegionInfo} for the region.<a name="line.515"></a>
+<span class="sourceLineNo">516</span> * @param family {@link ColumnFamilyDescriptor} describing the column family<a name="line.516"></a>
+<span class="sourceLineNo">517</span> * @return Path to family/Store home directory.<a name="line.517"></a>
+<span class="sourceLineNo">518</span> */<a name="line.518"></a>
+<span class="sourceLineNo">519</span> @Deprecated<a name="line.519"></a>
+<span class="sourceLineNo">520</span> public static Path getStoreHomedir(final Path tabledir,<a name="line.520"></a>
+<span class="sourceLineNo">521</span> final RegionInfo hri, final byte[] family) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span> return getStoreHomedir(tabledir, hri.getEncodedName(), family);<a name="line.522"></a>
+<span class="sourceLineNo">523</span> }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span> /**<a name="line.525"></a>
+<span class="sourceLineNo">526</span> * @param tabledir {@link Path} to where the table is being stored<a name="line.526"></a>
+<span class="sourceLineNo">527</span> * @param encodedName Encoded region name.<a name="line.527"></a>
+<span class="sourceLineNo">528</span> * @param family {@link ColumnFamilyDescriptor} describing the column family<a name="line.528"></a>
+<span class="sourceLineNo">529</span> * @return Path to family/Store home directory.<a name="line.529"></a>
+<span class="sourceLineNo">530</span> */<a name="line.530"></a>
+<span class="sourceLineNo">531</span> @Deprecated<a name="line.531"></a>
+<span class="sourceLineNo">532</span> public static Path getStoreHomedir(final Path tabledir,<a name="line.532"></a>
+<span class="sourceLineNo">533</span> final String encodedName, final byte[] family) {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return new Path(tabledir, new Path(encodedName, Bytes.toString(family)));<a name="line.534"></a>
<span class="sourceLineNo">535</span> }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
<span class="sourceLineNo">537</span> /**<a name="line.537"></a>
-<span class="sourceLineNo">538</span> * Should be used only in tests.<a name="line.538"></a>
-<span class="sourceLineNo">539</span> * @param blockEncoder the block delta encoder to use<a name="line.539"></a>
-<span class="sourceLineNo">540</span> */<a name="line.540"></a>
-<span class="sourceLineNo">541</span> void setDataBlockEncoderInTest(HFileDataBlockEncoder blockEncoder) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span> this.dataBlockEncoder = blockEncoder;<a name="line.542"></a>
-<span class="sourceLineNo">543</span> }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span> /**<a name="line.545"></a>
-<span class="sourceLineNo">546</span> * Creates an unsorted list of StoreFile loaded in parallel<a name="line.546"></a>
-<span class="sourceLineNo">547</span> * from the given directory.<a name="line.547"></a>
-<span class="sourceLineNo">548</span> * @throws IOException<a name="line.548"></a>
-<span class="sourceLineNo">549</span> */<a name="line.549"></a>
-<span class="sourceLineNo">550</span> private List<HStoreFile> loadStoreFiles() throws IOException {<a name="line.550"></a>
-<span class="sourceLineNo">551</span> Collection<StoreFileInfo> files = fs.getStoreFiles(getColumnFamilyName());<a name="line.551"></a>
-<span class="sourceLineNo">552</span> return openStoreFiles(files);<a name="line.552"></a>
-<span class="sourceLineNo">553</span> }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span> private List<HStoreFile> openStoreFiles(Collection<StoreFileInfo> files) throws IOException {<a name="line.555"></a>
-<span class="sourceLineNo">556</span> if (CollectionUtils.isEmpty(files)) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span> return Collections.emptyList();<a name="line.557"></a>
-<span class="sourceLineNo">558</span> }<a name="line.558"></a>
-<span class="sourceLineNo">559</span> // initialize the thread pool for opening store files in parallel..<a name="line.559"></a>
-<span class="sourceLineNo">560</span> ThreadPoolExecutor storeFileOpenerThreadPool =<a name="line.560"></a>
-<span class="sourceLineNo">561</span> this.region.getStoreFileOpenAndCloseThreadPool("StoreFileOpenerThread-"<a name="line.561"></a>
-<span class="sourceLineNo">562</span> + this.region.getRegionInfo().getEncodedName() + "-" + this.getColumnFamilyName());<a name="line.562"></a>
-<span class="sourceLineNo">563</span> CompletionService<HStoreFile> completionService = new ExecutorCompletionService<>(storeFileOpenerThreadPool);<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span> int totalValidStoreFile = 0;<a name="line.565"></a>
-<span class="sourceLineNo">566</span> for (StoreFileInfo storeFileInfo : files) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> // open each store file in parallel<a name="line.567"></a>
-<span class="sourceLineNo">568</span> completionService.submit(() -> this.createStoreFileAndReader(storeFileInfo));<a name="line.568"></a>
-<span class="sourceLineNo">569</span> totalValidStoreFile++;<a name="line.569"></a>
-<span class="sourceLineNo">570</span> }<a name="line.570"></a>
+<span class="sourceLineNo">538</span> * @return the data block encoder<a name="line.538"></a>
+<span class="sourceLineNo">539</span> */<a name="line.539"></a>
+<span class="sourceLineNo">540</span> public HFileDataBlockEncoder getDataBlockEncoder() {<a name="line.540"></a>
+<span class="sourceLineNo">541</span> return dataBlockEncoder;<a name="line.541"></a>
+<span class="sourceLineNo">542</span> }<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span> /**<a name="line.544"></a>
+<span class="sourceLineNo">545</span> * Should be used only in tests.<a name="line.545"></a>
+<span class="sourceLineNo">546</span> * @param blockEncoder the block delta encoder to use<a name="line.546"></a>
+<span class="sourceLineNo">547</span> */<a name="line.547"></a>
+<span class="sourceLineNo">548</span> void setDataBlockEncoderInTest(HFileDataBlockEncoder blockEncoder) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> this.dataBlockEncoder = blockEncoder;<a name="line.549"></a>
+<span class="sourceLineNo">550</span> }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span> /**<a name="line.552"></a>
+<span class="sourceLineNo">553</span> * Creates an unsorted list of StoreFile loaded in parallel<a name="line.553"></a>
+<span class="sourceLineNo">554</span> * from the given directory.<a name="line.554"></a>
+<span class="sourceLineNo">555</span> * @throws IOException<a name="line.555"></a>
+<span class="sourceLineNo">556</span> */<a name="line.556"></a>
+<span class="sourceLineNo">557</span> private List<HStoreFile> loadStoreFiles() throws IOException {<a name="line.557"></a>
+<span class="sourceLineNo">558</span> Collection<StoreFileInfo> files = fs.getStoreFiles(getColumnFamilyName());<a name="line.558"></a>
+<span class="sourceLineNo">559</span> return openStoreFiles(files);<a name="line.559"></a>
+<span class="sourceLineNo">560</span> }<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span> private List<HStoreFile> openStoreFiles(Collection<StoreFileInfo> files) throws IOException {<a name="line.562"></a>
+<span class="sourceLineNo">563</span> if (CollectionUtils.isEmpty(files)) {<a name="line.563"></a>
+<span class="sourceLineNo">564</span> return Collections.emptyList();<a name="line.564"></a>
+<span class="sourceLineNo">565</span> }<a name="line.565"></a>
+<span class="sourceLineNo">566</span> // initialize the thread pool for opening store files in parallel..<a name="line.566"></a>
+<span class="sourceLineNo">567</span> ThreadPoolExecutor storeFileOpenerThreadPool =<a name="line.567"></a>
+<span class="sourceLineNo">568</span> this.region.getStoreFileOpenAndCloseThreadPool("StoreFileOpenerThread-"<a name="line.568"></a>
+<span class="sourceLineNo">569</span> + this.region.getRegionInfo().getEncodedName() + "-" + this.getColumnFamilyName());<a name="line.569"></a>
+<span class="sourceLineNo">570</span> CompletionService<HStoreFile> completionService = new ExecutorCompletionService<>(storeFileOpenerThreadPool);<a name="line.570"></a>
<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span> ArrayList<HStoreFile> results = new ArrayList<>(files.size());<a name="line.572"></a>
-<span class="sourceLineNo">573</span> IOException ioe = null;<a name="line.573"></a>
-<span class="sourceLineNo">574</span> try {<a name="line.574"></a>
-<span class="sourceLineNo">575</span> for (int i = 0; i < totalValidStoreFile; i++) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span> try {<a name="line.576"></a>
-<span class="sourceLineNo">577</span> HStoreFile storeFile = completionService.take().get();<a name="line.577"></a>
-<span class="sourceLineNo">578</span> if (storeFile != null) {<a name="line.578"></a>
-<span class="sourceLineNo">579</span> long length = storeFile.getReader().length();<a name="line.579"></a>
-<span class="sourceLineNo">580</span> this.storeSize.addAndGet(length);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> this.totalUncompressedBytes<a name="line.581"></a>
-<span class="sourceLineNo">582</span> .addAndGet(storeFile.getReader().getTotalUncompressedBytes());<a name="line.582"></a>
-<span class="sourceLineNo">583</span> LOG.debug("loaded {}", storeFile);<a name="line.583"></a>
-<span class="sourceLineNo">584</span> results.add(storeFile);<a name="line.584"></a>
-<span class="sourceLineNo">585</span> }<a name="line.585"></a>
-<span class="sourceLineNo">586</span> } catch (InterruptedException e) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span> if (ioe == null) ioe = new InterruptedIOException(e.getMessage());<a name="line.587"></a>
-<span class="sourceLineNo">588</span> } catch (ExecutionException e) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> if (ioe == null) ioe = new IOException(e.getCause());<a name="line.589"></a>
-<span class="sourceLineNo">590</span> }<a name="line.590"></a>
-<span class="sourceLineNo">591</span> }<a name="line.591"></a>
-<span class="sourceLineNo">592</span> } finally {<a name="line.592"></a>
-<span class="sourceLineNo">593</span> storeFileOpenerThreadPool.shutdownNow();<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> if (ioe != null) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span> // close StoreFile readers<a name="line.596"></a>
-<span class="sourceLineNo">597</span> boolean evictOnClose =<a name="line.597"></a>
-<span class="sourceLineNo">598</span> cacheConf != null? cacheConf.shouldEvictOnClose(): true;<a name="line.598"></a>
-<span class="sourceLineNo">599</span> for (HStoreFile file : results) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span> try {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> if (file != null) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> file.closeStoreFile(evictOnClose);<a name="line.602"></a>
-<span class="sourceLineNo">603</span> }<a name="line.603"></a>
-<span class="sourceLineNo">604</span> } catch (IOException e) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span> LOG.warn("Could not close store file", e);<a name="line.605"></a>
-<span class="sourceLineNo">606</span> }<a name="line.606"></a>
-<span class="sourceLineNo">607</span> }<a name="line.607"></a>
-<span class="sourceLineNo">608</span> throw ioe;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span> return results;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
+<span class="sourceLineNo">572</span> int totalValidStoreFile = 0;<a name="line.572"></a>
+<span class="sourceLineNo">573</span> for (StoreFileInfo storeFileInfo : files) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span> // open each store file in parallel<a name="line.574"></a>
+<span class="sourceLineNo">575</span> completionService.submit(() -> this.createStoreFileAndReader(storeFileInfo));<a name="line.575"></a>
+<span class="sourceLineNo">576</span> totalValidStoreFile++;<a name="line.576"></a>
+<span class="sourceLineNo">577</span> }<a name="line.577"></a>
+<span class="sourceLineNo">578</span><a name="line.578"></a>
+<span class="sourceLineNo">579</span> ArrayList<HStoreFile> results = new ArrayList<>(files.size());<a name="line.579"></a>
+<span class="sourceLineNo">580</span> IOException ioe = null;<a name="line.580"></a>
+<span class="sourceLineNo">581</span> try {<a name="line.581"></a>
+<span class="sourceLineNo">582</span> for (int i = 0; i < totalValidStoreFile; i++) {<a name="line.582"></a>
+<span class="sourceLineNo">583</span> try {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> HStoreFile storeFile = completionService.take().get();<a name="line.584"></a>
+<span class="sourceLineNo">585</span> if (storeFile != null) {<a name="line.585"></a>
+<span class="sourceLineNo">586</span> LOG.debug("loaded {}", storeFile);<a name="line.586"></a>
+<span class="sourceLineNo">587</span> results.add(storeFile);<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> } catch (InterruptedException e) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> if (ioe == null) ioe = new InterruptedIOException(e.getMessage());<a name="line.590"></a>
+<span class="sourceLineNo">591</span> } catch (ExecutionException e) {<a name="line.591"></a>
+<span class="sourceLineNo">592</span> if (ioe == null) ioe = new IOException(e.getCause());<a name="line.592"></a>
+<span class="sourceLineNo">593</span> }<a name="line.593"></a>
+<span class="sourceLineNo">594</span> }<a name="line.594"></a>
+<span class="sourceLineNo">595</span> } finally {<a name="line.595"></a>
+<span class="sourceLineNo">596</span> storeFileOpenerThreadPool.shutdownNow();<a name="line.596"></a>
+<span class="sourceLineNo">597</span> }<a name="line.597"></a>
+<span class="sourceLineNo">598</span> if (ioe != null) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> // close StoreFile readers<a name="line.599"></a>
+<span class="sourceLineNo">600</span> boolean evictOnClose =<a name="line.600"></a>
+<span class="sourceLineNo">601</span> cacheConf != null? cacheConf.shouldEvictOnClose(): true;<a name="line.601"></a>
+<span class="sourceLineNo">602</span> for (HStoreFile file : results) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span> try {<a name="line.603"></a>
+<span class="sourceLineNo">604</span> if (file != null) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span> file.closeStoreFile(evictOnClose);<a name="line.605"></a>
+<span class="sourceLineNo">606</span> }<a name="line.606"></a>
+<span class="sourceLineNo">607</span> } catch (IOException e) {<a name="line.607"></a>
+<span class="sourceLineNo">608</span> LOG.warn("Could not close store file", e);<a name="line.608"></a>
+<span class="sourceLineNo">609</span> }<a name="line.609"></a>
+<span class="sourceLineNo">610</span> }<a name="line.610"></a>
+<span class="sourceLineNo">611</span> throw ioe;<a name="line.611"></a>
+<span class="sourceLineNo">612</span> }<a name="line.612"></a>
<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> @Override<a name="line.614"></a>
-<span class="sourceLineNo">615</span> public void refreshStoreFiles() throws IOException {<a name="line.615"></a>
-<span class="sourceLineNo">616</span> Collection<StoreFileInfo> newFiles = fs.getStoreFiles(getColumnFamilyName());<a name="line.616"></a>
-<span class="sourceLineNo">617</span> refreshStoreFilesInternal(newFiles);<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span> /**<a name="line.620"></a>
-<span class="sourceLineNo">621</span> * Replaces the store files that the store has with the given files. Mainly used by secondary<a name="line.621"></a>
-<span class="sourceLineNo">622</span> * region replicas to keep up to date with the primary region files.<a name="line.622"></a>
-<span class="sourceLineNo">623</span> * @throws IOException<a name="line.623"></a>
-<span class="sourceLineNo">624</span> */<a name="line.624"></a>
-<span class="sourceLineNo">625</span> public void refreshStoreFiles(Collection<String> newFiles) throws IOException {<a name="line.625"></a>
-<span class="sourceLineNo">626</span> List<StoreFileInfo> storeFiles = new ArrayList<>(newFiles.size());<a name="line.626"></a>
-<span class="sourceLineNo">627</span> for (String file : newFiles) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> storeFiles.add(fs.getStoreFileInfo(getColumnFamilyName(), file));<a name="line.628"></a>
-<span class="sourceLineNo">629</span> }<a name="line.629"></a>
-<span class="sourceLineNo">630</span> refreshStoreFilesInternal(storeFiles);<a name="line.630"></a>
-<span class="sourceLineNo">631</span> }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span> /**<a name="line.633"></a>
-<span class="sourceLineNo">634</span> * Checks the underlying store files, and opens the files that have not<a name="line.634"></a>
-<span class="sourceLineNo">635</span> * been opened, and removes the store file readers for store files no longer<a name="line.635"></a>
-<span class="sourceLineNo">636</span> * available. Mainly used by secondary region replicas to keep up to date with<a name="line.636"></a>
-<span class="sourceLineNo">637</span> * the primary region files.<a name="line.637"></a>
-<span class="sourceLineNo">638</span> * @throws IOException<a name="line.638"></a>
-<span class="sourceLineNo">639</span> */<a name="line.639"></a>
-<span class="sourceLineNo">640</span> private void refreshStoreFilesInternal(Collection<StoreFileInfo> newFiles) throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span> StoreFileManager sfm = storeEngine.getStoreFileManager();<a name="line.641"></a>
-<span class="sourceLineNo">642</span> Collection<HStoreFile> currentFiles = sfm.getStorefiles();<a name="line.642"></a>
-<span class="sourceLineNo">643</span> Collection<HStoreFile> compactedFiles = sfm.getCompactedfiles();<a name="line.643"></a>
-<span class="sourceLineNo">644</span> if (currentFiles == null) currentFiles = Collections.emptySet();<a name="line.644"></a>
-<span class="sourceLineNo">645</span> if (newFiles == null) newFiles = Collections.emptySet();<a name="line.645"></a>
-<span class="sourceLineNo">646</span> if (compactedFiles == null) compactedFiles = Collections.emptySet();<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span> HashMap<StoreFileInfo, HStoreFile> currentFilesSet = new HashMap<>(currentFiles.size());<a name="line.648"></a>
-<span class="sourceLineNo">649</span> for (HStoreFile sf : currentFiles) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span> currentFilesSet.put(sf.getFileInfo(), sf);<a name="line.650"></a>
-<span class="sourceLineNo">651</span> }<a name="line.651"></a>
-<span class="sourceLineNo">652</span> HashMap<StoreFileInfo, HStoreFile> compactedFilesSet = new HashMap<>(compactedFiles.size());<a name="line.652"></a>
-<span class="sourceLineNo">653</span> for (HStoreFile sf : compactedFiles) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span> compactedFilesSet.put(sf.getFileInfo(), sf);<a name="line.654"></a>
-<span class="sourceLineNo">655</span> }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span> Set<StoreFileInfo> newFilesSet = new HashSet<StoreFileInfo>(newFiles);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> // Exclude the files that have already been compacted<a name="line.658"></a>
-<span class="sourceLineNo">659</span> newFilesSet = Sets.difference(newFilesSet, compactedFilesSet.keySet());<a name="line.659"></a>
-<span class="sourceLineNo">660</span> Set<StoreFileInfo> toBeAddedFiles = Sets.difference(newFilesSet, currentFilesSet.keySet());<a name="line.660"></a>
-<span class="sourceLineNo">661</span> Set<StoreFileInfo> toBeRemovedFiles = Sets.difference(currentFilesSet.keySet(), newFilesSet);<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> if (toBeAddedFiles.isEmpty() && toBeRemovedFiles.isEmpty()) {<a name="line.663"></a>
-<span class="sourceLineNo">664</span> return;<a name="line.664"></a>
-<span class="sourceLineNo">665</span> }<a name="line.665"></a>
-<span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span> LOG.info("Refreshing store files for region " + this.getRegionInfo().getRegionNameAsString()<a name="line.667"></a>
-<span class="sourceLineNo">668</span> + " files to add: " + toBeAddedFiles + " files to remove: " + toBeRemovedFiles);<a name="line.668"></a>
+<span class="sourceLineNo">614</span> return results;<a name="line.614"></a>
+<span class="sourceLineNo">615</span> }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span> @Override<a name="line.617"></a>
+<span class="sourceLineNo">618</span> public void refreshStoreFiles() throws IOException {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> Collection<StoreFileInfo> newFiles = fs.getStoreFiles(getColumnFamilyName());<a name="line.619"></a>
+<span class="sourceLineNo">620</span> refreshStoreFilesInternal(newFiles);<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span> * Replaces the store files that the store has with the given files. Mainly used by secondary<a name="line.624"></a>
+<span class="sourceLineNo">625</span> * region replicas to keep up to date with the primary region files.<a name="line.625"></a>
+<span class="sourceLineNo">626</span> * @throws IOException<a name="line.626"></a>
+<span class="sourceLineNo">627</span> */<a name="line.627"></a>
+<span class="sourceLineNo">628</span> public void refreshStoreFiles(Collection<String> newFiles) throws IOException {<a name="line.628"></a>
+<span class="sourceLineNo">629</span> List<StoreFileInfo> storeFiles = new ArrayList<>(newFiles.size());<a name="line.629"></a>
+<span class="sourceLineNo">630</span> for (String file : newFiles) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span> storeFiles.add(fs.getStoreFileInfo(getColumnFamilyName(), file));<a name="line.631"></a>
+<span class="sourceLineNo">632</span> }<a name="line.632"></a>
+<span class="sourceLineNo">633</span> refreshStoreFilesInternal(storeFiles);<a name="line.633"></a>
+<span class="sourceLineNo">634</span> }<a name="line.634"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span> /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span> * Checks the underlying store files, and opens the files that have not<a name="line.637"></a>
+<span class="sourceLineNo">638</span> * been opened, and removes the store file readers for store files no longer<a name="line.638"></a>
+<span class="sourceLineNo">639</span> * available. Mainly used by secondary region replicas to keep up to date with<a name="line.639"></a>
+<span class="sourceLineNo">640</span> * the primary region files.<a name="line.640"></a>
+<span class="sourceLineNo">641</span> * @throws IOException<a name="line.641"></a>
+<span class="sourceLineNo">642</span> */<a name="line.642"></a>
+<span class="sourceLineNo">643</span> private void refreshStoreFilesInternal(Collection<StoreFileInfo> newFiles) throws IOException {<a name="line.643"></a>
+<span class="sourceLineNo">644</span> StoreFileManager sfm = storeEngine.getStoreFileManager();<a name="line.644"></a>
+<span class="sourceLineNo">645</span> Collection<HStoreFile> currentFiles = sfm.getStorefiles();<a name="line.645"></a>
+<span class="sourceLineNo">646</span> Collection<HStoreFile> compactedFiles = sfm.getCompactedfiles();<a name="line.646"></a>
+<span class="sourceLineNo">647</span> if (currentFiles == null) currentFiles = Collections.emptySet();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> if (newFiles == null) newFiles = Collections.emptySet();<a name="line.648"></a>
+<span class="sourceLineNo">649</span> if (compactedFiles == null) compactedFiles = Collections.emptySet();<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span> HashMap<StoreFileInfo, HStoreFile> currentFilesSet = new HashMap<>(currentFiles.size());<a name="line.651"></a>
+<span class="sourceLineNo">652</span> for (HStoreFile sf : currentFiles) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> currentFilesSet.put(sf.getFileInfo(), sf);<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> HashMap<StoreFileInfo, HStoreFile> compactedFilesSet = new HashMap<>(compactedFiles.size());<a name="line.655"></a>
+<span class="sourceLineNo">656</span> for (HStoreFile sf : compactedFiles) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span> compactedFilesSet.put(sf.getFileInfo(), sf);<a name="line.657"></a>
+<span class="sourceLineNo">658</span> }<a name="line.658"></a>
+<span class="sourceLineNo">659</span><a name="line.659"></a>
+<span class="sourceLineNo">660</span> Set<StoreFileInfo> newFilesSet = new HashSet<StoreFileInfo>(newFiles);<a name="line.660"></a>
+<span class="sourceLineNo">661</span> // Exclude the files that have already been compacted<a name="line.661"></a>
+<span class="sourceLineNo">662</span> newFilesSet = Sets.difference(newFilesSet, compactedFilesSet.keySet());<a name="line.662"></a>
+<span class="sourceLineNo">663</span> Set<StoreFileInfo> toBeAddedFiles = Sets.difference(newFilesSet, currentFilesSet.keySet());<a name="line.663"></a>
+<span class="sourceLineNo">664</span> Set<StoreFileInfo> toBeRemovedFiles = Sets.difference(currentFilesSet.keySet(), newFilesSet);<a name="line.664"></a>
+<span class="sourceLineNo">665</span><a name="line.665"></a>
+<span class="sourceLineNo">666</span> if (toBeAddedFiles.isEmpty() && toBeRemovedFiles.isEmpty()) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span> return;<a name="line.667"></a>
+<span class="sourceLineNo">668</span> }<a name="line.668"></a>
<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span> Set<HStoreFile> toBeRemovedStoreFiles = new HashSet<>(toBeRemovedFiles.size());<a name="line.670"></a>
-<span class="sourceLineNo">671</span> for (StoreFileInfo sfi : toBeRemovedFiles) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> toBeRemovedStoreFiles.add(currentFilesSet.get(sfi));<a name="line.672"></a>
-<span class="sourceLineNo">673</span> }<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span> // try to open the files<a name="line.675"></a>
-<span class="sourceLineNo">676</span> List<HStoreFile> openedFiles = openStoreFiles(toBeAddedFiles);<a name="line.676"></a>
+<span class="sourceLineNo">670</span> LOG.info("Refreshing store files for region " + this.getRegionInfo().getRegionNameAsString()<a name="line.670"></a>
+<span class="sourceLineNo">671</span> + " files to add: " + toBeAddedFiles + " files to remove: " + toBeRemovedFiles);<a name="line.671"></a>
+<span class="sourceLineNo">672</span><a name="line.672"></a>
+<span class="sourceLineNo">673</span> Set<HStoreFile> toBeRemovedStoreFiles = new HashSet<>(toBeRemovedFiles.size());<a name="line.673"></a>
+<span class="sourceLineNo">674</span> for (StoreFileInfo sfi : toBeRemovedFiles) {<a name="line.674"></a>
+<span class="sourceLineNo">675</span> toBeRemovedStoreFiles.add(currentFilesSet.get(sfi));<a name="line.675"></a>
+<span class="sourceLineNo">676</span> }<a name="line.676"></a>
<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span> // propogate the file changes to the underlying store file manager<a name="line.678"></a>
-<span class="sourceLineNo">679</span> replaceStoreFiles(toBeRemovedStoreFiles, openedFiles); //won't throw an exception<a name="line.679"></a>
+<span class="sourceLineNo">678</span> // try to open the files<a name="line.678"></a>
+<span class="sourceLineNo">679</span> List<HStoreFile> openedFiles = openStoreFiles(toBeAddedFiles);<a name="line.679"></a>
<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span> // Advance the memstore read point to be at least the new store files seqIds so that<a name="line.681"></a>
-<span class="sourceLineNo">682</span> // readers might pick it up. This assumes that the store is not getting any writes (otherwise<a name="line.682"></a>
-<span class="sourceLineNo">683</span> // in-flight transactions might be made visible)<a name="line.683"></a>
-<span class="sourceLineNo">684</span> if (!toBeAddedFiles.isEmpty()) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> // we must have the max sequence id here as we do have several store files<a name="line.685"></a>
-<span class="sourceLineNo">686</span> region.getMVCC().advanceTo(this.getMaxSequenceId().getAsLong());<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> completeCompaction(toBeRemovedStoreFiles);<a name="line.689"></a>
-<span class="sourceLineNo">690</span> }<a name="line.690"></a>
+<span class="sourceLineNo">681</span> // propogate the file changes to the underlying store file manager<a name="line.681"></a>
+<span class="sourceLineNo">682</span> replaceStoreFiles(toBeRemovedStoreFiles, openedFiles); //won't throw an exception<a name="line.682"></a>
+<span class="sourceLineNo">683</span><a name="line.683"></a>
+<span class="sourceLineNo">684</span> // Advance the memstore read point to be at least the new store files seqIds so that<a name="line.684"></a>
+<span class="sourceLineNo">685</span> // readers might pick it up. This assumes that the store is not getting any writes (otherwise<a name="line.685"></a>
+<span class="sourceLineNo">686</span> // in-flight transactions might be made visible)<a name="line.686"></a>
+<span class="sourceLineNo">687</span> if (!toBeAddedFiles.isEmpty()) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> // we must have the max sequence id here as we do have several store files<a name="line.688"></a>
+<span class="sourceLineNo">689</span> region.getMVCC().advanceTo(this.getMaxSequenceId().getAsLong());<a name="line.689"></a>
+<span class="sourceLineNo">690</span> }<a name="line.690"></a>
<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span> @VisibleForTesting<a name="line.692"></a>
-<span class="sourceLineNo">693</span> protected HStoreFile createStoreFileAndReader(final Path p) throws IOException {<a name="line.693"></a>
-<span class="sourceLineNo">694</span> StoreFileInfo info = new StoreFileInfo(conf, this.getFileSystem(), p);<a name="line.694"></a>
-<span class="sourceLineNo">695</span> return createStoreFileAndReader(info);<a name="line.695"></a>
-<span class="sourceLineNo">696</span> }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span> private HStoreFile createStoreFileAndReader(StoreFileInfo info) throws IOException {<a name="line.698"></a>
-<span class="sourceLineNo">699</span> info.setRegionCoprocessorHost(this.region.getCoprocessorHost());<a name="line.699"></a>
-<span class="sourceLineNo">700</span> HStoreFile storeFile = new HStoreFile(this.getFileSystem(), info, this.conf, this.cacheConf,<a name="line.700"></a>
-<span class="sourceLineNo">701</span> this.family.getBloomFilterType(), isPrimaryReplicaStore());<a name="line.701"></a>
-<span class="sourceLineNo">702</span> storeFile.initReader();<a name="line.702"></a>
-<span class="sourceLineNo">703</span> return storeFile;<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span> /**<a name="line.706"></a>
-<span class="sourceLineNo">707</span> * This message intends to inform the MemStore that next coming updates<a name="line.707"></a>
-<span class="sourceLineNo">708</span> * are going to be part of the replaying edits from WAL<a name="line.708"></a>
-<span class="sourceLineNo">709</span> */<a name="line.709"></a>
-<span class="sourceLineNo">710</span> public void startReplayingFromWAL(){<a name="line.710"></a>
-<span class="sourceLineNo">711</span> this.memstore.startReplayingFromWAL();<a name="line.711"></a>
-<span class="sourceLineNo">712</span> }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span> /**<a name="line.714"></a>
-<span class="sourceLineNo">715</span> * This message intends to inform the MemStore that the replaying edits from WAL<a name="line.715"></a>
-<span class="sourceLineNo">716</span> * are done<a name="line.716"></a>
-<span class="sourceLineNo">717</span> */<a name="line.717"></a>
-<span class="sourceLineNo">718</span> public void stopReplayingFromWAL(){<a name="line.718"></a>
-<span class="sourceLineNo">719</span> this.memstore.stopReplayingFromWAL();<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span><a name="line.721"></a>
-<span class="sourceLineNo">722</span> /**<a name="line.722"></a>
-<span class="sourceLineNo">723</span> * Adds a value to the memstore<a name="line.723"></a>
-<span class="sourceLineNo">724</span> */<a name="line.724"></a>
-<span class="sourceLineNo">725</span> public void add(final Cell cell, MemStoreSizing memstoreSizing) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span> lock.readLock().lock();<a name="line.726"></a>
-<span class="sourceLineNo">727</span> try {<a name="line.727"></a>
-<span class="sourceLineNo">728</span> if (this.currentParallelPutCount.getAndIncrement() > this.parallelPutCountPrintThreshold) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span> LOG.trace(this.getTableName() + "tableName={}, encodedName={}, columnFamilyName={} is " +<a name="line.729"></a>
-<span class="sourceLineNo">730</span> "too busy!", this.getRegionInfo().getEncodedName(), this .getColumnFamilyName());<a name="line.730"></a>
-<span class="sourceLineNo">731</span> }<a name="line.731"></a>
-<span class="sourceLineNo">732</span> this.memstore.add(cell, memstoreSizing);<a name="line.732"></a>
-<span class="sourceLineNo">733</span> } finally {<a name="line.733"></a>
-<span class="sourceLineNo">734</span> lock.readLock().unlock();<a name="line.734"></a>
-<span class="sourceLineNo">735</span> currentParallelPutCount.decrementAndGet();<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span> }<a name="line.737"></a>
-<span class="sourceLineNo">738</span><a name="line.738"></a>
-<span class="sourceLineNo">739</span> /**<a name="line.739"></a>
-<span class="sourceLineNo">740</span> * Adds the specified value to the memstore<a name="line.740"></a>
-<span class="sourceLineNo">741</span> */<a name="line.741"></a>
-<span class="sourceLineNo">742</span> public void add(final Iterable<Cell> cells, MemStoreSizing memstoreSizing) {<a name="line.742"></a>
-<span class="sourceLineNo">743</span> lock.readLock().lock();<a name="line.743"></a>
-<span class="sourceLineNo">744</span> try {<a name="line.744"></a>
-<span class="sourceLineNo">745</span> if (this.currentParallelPutCount.getAndIncrement() > this.parallelPutCountPrintThreshold) {<a name="line.745"></a>
-<span class="sourceLineNo">746</span> LOG.trace(this.getTableName() + "tableName={}, encodedName={}, columnFamilyName={} is " +<a name="line.746"></a>
-<span class="sourceLineNo">747</span> "too busy!", this.getRegionInfo().getEncodedName(), this .getColumnFamilyName());<a name="line.747"></a>
-<span class="sourceLineNo">748</span> }<a name="line.748"></a>
-<span class="sourceLineNo">749</span> memstore.add(cells, memstoreSizing);<a name="line.749"></a>
-<span class="sourceLineNo">750</span> } finally {<a name="line.750"></a>
-<span class="sourceLineNo">751</span> lock.readLock().unlock();<a name="line.751"></a>
-<span class="sourceLineNo">752</span> currentParallelPutCount.decrementAndGet();<a name="line.752"></a>
-<span class="sourceLineNo">753</span> }<a name="line.753"></a>
-<span class="sourceLineNo">754</span> }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span> @Override<a name="line.756"></a>
-<span class="sourceLineNo">757</span> public long timeOfOldestEdit() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span> return memstore.timeOfOldestEdit();<a name="line.758"></a>
-<span class="sourceLineNo">759</span> }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span> /**<a name="line.761"></a>
-<span class="sourceLineNo">762</span> * @return All store files.<a name="line.762"></a>
-<span class="sourceLineNo">763</span> */<a name="line.763"></a>
-<span class="sourceLineNo">764</span> @Override<a name="line.764"></a>
-<span class="sourceLineNo">765</span> public Collection<HStoreFile> getStorefiles() {<a name="line.765"></a>
-<span class="sourceLineNo">766</span> return this.storeEngine.getStoreFileManager().getStorefiles();<a name="line.766"></a>
-<span class="sourceLineNo">767</span> }<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span> @Override<a name="line.769"></a>
-<span class="sourceLineNo">770</span> public Collection<HStoreFile> getCompactedFiles() {<a name="line.770"></a>
-<span class="sourceLineNo">771</span> return this.storeEngine.getStoreFileManager().getCompactedfiles();<a name="line.771"></a>
-<span class="sourceLineNo">772</span> }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span> /**<a name="line.774"></a>
-<span class="sourceLineNo">775</span> * This throws a WrongRegionException if the HFile does not fit in this region, or an<a name="line.775"></a>
-<span class="sourceLineNo">776</span> * InvalidHFileException if the HFile is not valid.<a name="line.776"></a>
-<span class="sourceLineNo">777</span> */<a name="line.777"></a>
-<span class="sourceLineNo">778</span> public void assertBulkLoadHFileOk(Path srcPath) throws IOException {<a name="line.778"></a>
-<span class="sourceLineNo">779</span> HFile.Reader reader = null;<a name="line.779"></a>
-<span class="sourceLineNo">780</span> try {<a name="line.780"></a>
-<span class="sourceLineNo">781</span> LOG.info("Validating hfile at " + srcPath + " for inclusion in "<a name="line.781"></a>
-<span class="sourceLineNo">782</span> + "store " + this + " region " + this.getRegionInfo().getRegionNameAsString());<a name="line.782"></a>
-<span class="sourceLineNo">783</span> reader = HFile.createReader(srcPath.getFileSystem(conf), srcPath, cacheConf,<a name="line.783"></a>
-<span class="sourceLineNo">784</span> isPrimaryReplicaStore(), conf);<a name="line.784"></a>
-<span class="sourceLineNo">785</span> reader.loadFileInfo();<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span> Optional<byte[]> firstKey = reader.getFirstRowKey();<a name="line.787"></a>
-<span class="sourceLineNo">788</span> Preconditions.checkState(firstKey.isPresent(), "First key can not be null");<a name="line.788"></a>
-<span class="sourceLineNo">789</span> Optional<Cell> lk = reader.getLastKey();<a name="line.789"></a>
-<span class="sourceLineNo">790</span> Preconditions.checkState(lk.isPresent(), "Last key can not be null");<a name="line.790"></a>
-<span class="sourceLineNo">791</span> byte[] lastKey = CellUtil.cloneRow(lk.get());<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span> if (LOG.isDebugEnabled()) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span> LOG.debug("HFile bounds: first=" + Bytes.toStringBinary(firstKey.get()) +<a name="line.794"></a>
-<span class="sourceLineNo">795</span> " last=" + Bytes.toStringBinary(lastKey));<a name="line.795"></a>
-<span class="sourceLineNo">796</span> LOG.debug("Region bounds: first=" +<a name="line.796"></a>
-<span class="sourceLineNo">797</span> Bytes.toStringBinary(getRegionInfo().getStartKey()) +<a name="line.797"></a>
-<span class="sourceLineNo">798</span> " last=" + Bytes.toStringBinary(getRegionInfo().getEndKey()));<a name="line.798"></a>
-<span class="sourceLineNo">799</span> }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span> if (!this.getRegionInfo().containsRange(firstKey.get(), lastKey)) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span> throw new WrongRegionException(<a name="line.802"></a>
-<span class="sourceLineNo">803</span> "Bulk load file " + srcPath.toString() + " does not fit inside region "<a name="line.803"></a>
-<span class="sourceLineNo">804</span> + this.getRegionInfo().getRegionNameAsString());<a name="line.804"></a>
-<span class="sourceLineNo">805</span> }<a name="line.805"></a>
-<span class="sourceLineNo">806</span><a name="line.806"></a>
-<span class="sourceLineNo">807</span> if(reader.length() > conf.getLong(HConstants.HREGION_MAX_FILESIZE,<a name="line.807"></a>
-<span class="sourceLineNo">808</span> HConstants.DEFAULT_MAX_FILE_SIZE)) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> LOG.warn("Trying to bulk load hfile " + srcPath + " with size: " +<a name="line.809"></a>
-<span class="sourceLineNo">810</span> reader.length() + " bytes can be problematic as it may lead to oversplitting.");<a name="line.810"></a>
-<span class="sourceLineNo">811</span> }<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span> if (verifyBulkLoads) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span> long verificationStartTime = EnvironmentEdgeManager.currentTime();<a name="line.814"></a>
-<span class="sourceLineNo">815</span> LOG.info("Full verification started for bulk load hfile: {}", srcPath);<a name="line.815"></a>
-<span class="sourceLineNo">816</span> Cell prevCell = null;<a name="line.816"></a>
-<span class="sourceLineNo">817</span> HFileScanner scanner = reader.getScanner(false, false, false);<a name="line.817"></a>
-<span class="sourceLineNo">818</span> scanner.seekTo();<a name="line.818"></a>
-<span class="sourceLineNo">819</span> do {<a name="line.819"></a>
-<span class="sourceLineNo">820</span> Cell cell = scanner.getCell();<a name="line.820"></a>
-<span class="sourceLineNo">821</span> if (prevCell != null) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span> if (comparator.compareRows(prevCell, cell) > 0) {<a name="line.822"></a>
-<span class="sourceLineNo">823</span> throw new InvalidHFileException("Previous row is greater than"<a name="line.823"></a>
-<span class="sourceLineNo">824</span> + " current row: path=" + srcPath + " previous="<a name="line.824"></a>
-<span class="sourceLineNo">825</span> + CellUtil.getCellKeyAsString(prevCell) + " current="<a name="line.825"></a>
-<span class="sourceLineNo">826</span> + CellUtil.getCellKeyAsString(cell));<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span> if (CellComparator.getInstance().compareFamilies(prevCell, cell) != 0) {<a name="line.828"></a>
-<span class="sourceLineNo">829<
<TRUNCATED>
[11/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 1add55f..6f5aed0 100644
--- a/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -120,7 +120,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Public
-public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.178">HBaseTestingUtility</a>
+public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.177">HBaseTestingUtility</a>
extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseZKTestingUtility</a></pre>
<div class="block">Facility for testing HBase. Replacement for
old HBaseTestCase and HBaseClusterTestCase functionality.
@@ -136,8 +136,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
region-server-port are overridden such that a random port will be assigned (thus
avoiding port contention if another local HBase instance is already running).
<p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"
- setting it to true.
- Trigger pre commit.</div>
+ setting it to true.</div>
</li>
</ul>
</div>
@@ -1831,7 +1830,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>REGIONS_PER_SERVER_KEY</h4>
-<pre>public static final <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/HBaseTestingUtility.html#line.189">REGIONS_PER_SERVER_KEY</a></pre>
+<pre>public static final <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/HBaseTestingUtility.html#line.188">REGIONS_PER_SERVER_KEY</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.REGIONS_PER_SERVER_KEY">Constant Field Values</a></dd>
@@ -1844,7 +1843,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_REGIONS_PER_SERVER</h4>
-<pre>public static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.194">DEFAULT_REGIONS_PER_SERVER</a></pre>
+<pre>public static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.193">DEFAULT_REGIONS_PER_SERVER</a></pre>
<div class="block">The default number of regions per regionserver when creating a pre-split
table.</div>
<dl>
@@ -1859,7 +1858,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>PRESPLIT_TEST_TABLE_KEY</h4>
-<pre>public static final <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/HBaseTestingUtility.html#line.197">PRESPLIT_TEST_TABLE_KEY</a></pre>
+<pre>public static final <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/HBaseTestingUtility.html#line.196">PRESPLIT_TEST_TABLE_KEY</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE_KEY">Constant Field Values</a></dd>
@@ -1872,7 +1871,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>PRESPLIT_TEST_TABLE</h4>
-<pre>public static final boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.198">PRESPLIT_TEST_TABLE</a></pre>
+<pre>public static final boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.197">PRESPLIT_TEST_TABLE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE">Constant Field Values</a></dd>
@@ -1885,7 +1884,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>MEMSTORETS_TAGS_PARAMETRIZED</h4>
-<pre>public static final <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.223">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
+<pre>public static final <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.222">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
<div class="block">This is for unit tests parameterized with a single boolean.</div>
</li>
</ul>
@@ -1895,7 +1894,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>BLOOM_AND_COMPRESSION_COMBINATIONS</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.299">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.298">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
</li>
</ul>
<a name="fam1">
@@ -1904,7 +1903,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>fam1</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1827">fam1</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1826">fam1</a></pre>
</li>
</ul>
<a name="fam2">
@@ -1913,7 +1912,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>fam2</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1828">fam2</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1827">fam2</a></pre>
</li>
</ul>
<a name="fam3">
@@ -1922,7 +1921,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>fam3</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1829">fam3</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1828">fam3</a></pre>
</li>
</ul>
<a name="COLUMNS">
@@ -1931,7 +1930,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>COLUMNS</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1830">COLUMNS</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1829">COLUMNS</a></pre>
</li>
</ul>
<a name="FIRST_CHAR">
@@ -1940,7 +1939,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>FIRST_CHAR</h4>
-<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1833">FIRST_CHAR</a></pre>
+<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1832">FIRST_CHAR</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.FIRST_CHAR">Constant Field Values</a></dd>
@@ -1953,7 +1952,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>LAST_CHAR</h4>
-<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1834">LAST_CHAR</a></pre>
+<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1833">LAST_CHAR</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.LAST_CHAR">Constant Field Values</a></dd>
@@ -1966,7 +1965,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>START_KEY_BYTES</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1835">START_KEY_BYTES</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1834">START_KEY_BYTES</a></pre>
</li>
</ul>
<a name="START_KEY">
@@ -1975,7 +1974,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>START_KEY</h4>
-<pre>public static final <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/HBaseTestingUtility.html#line.1836">START_KEY</a></pre>
+<pre>public static final <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/HBaseTestingUtility.html#line.1835">START_KEY</a></pre>
</li>
</ul>
<a name="ROWS">
@@ -1984,7 +1983,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>ROWS</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2391">ROWS</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2390">ROWS</a></pre>
<div class="block">All the row values for the data loaded by <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#loadTable-org.apache.hadoop.hbase.client.Table-byte:A-"><code>loadTable(Table, byte[])</code></a></div>
</li>
</ul>
@@ -1994,7 +1993,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>KEYS</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2406">KEYS</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2405">KEYS</a></pre>
</li>
</ul>
<a name="KEYS_FOR_HBA_CREATE_TABLE">
@@ -2003,7 +2002,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockListLast">
<li class="blockList">
<h4>KEYS_FOR_HBA_CREATE_TABLE</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2418">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2417">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
</li>
</ul>
</li>
@@ -2020,7 +2019,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>HBaseTestingUtility</h4>
-<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.315">HBaseTestingUtility</a>()</pre>
+<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.314">HBaseTestingUtility</a>()</pre>
<div class="block"><p>Create an HBaseTestingUtility using a default configuration.
<p>Initially, all tmp files are written to a local test data directory.
@@ -2039,7 +2038,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockListLast">
<li class="blockList">
<h4>HBaseTestingUtility</h4>
-<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.333">HBaseTestingUtility</a>(@Nullable
+<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.332">HBaseTestingUtility</a>(@Nullable
org.apache.hadoop.conf.Configuration conf)</pre>
<div class="block"><p>Create an HBaseTestingUtility using a given configuration.
@@ -2071,7 +2070,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>available</h4>
-<pre>public static boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.231">available</a>(int port)</pre>
+<pre>public static boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.230">available</a>(int port)</pre>
<div class="block">Checks to see if a specific port is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -2087,7 +2086,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>memStoreTSTagsAndOffheapCombination</h4>
-<pre>public static <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.286">memStoreTSTagsAndOffheapCombination</a>()</pre>
+<pre>public static <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.285">memStoreTSTagsAndOffheapCombination</a>()</pre>
</li>
</ul>
<a name="createLocalHTU--">
@@ -2097,7 +2096,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<li class="blockList">
<h4>createLocalHTU</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.364">createLocalHTU</a>()</pre>
+public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.363">createLocalHTU</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#HBaseTestingUtility--"><code>HBaseTestingUtility()</code></a> instead</span></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -2112,7 +2111,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<li class="blockList">
<h4>createLocalHTU</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.373">createLocalHTU</a>(org.apache.hadoop.conf.Configuration c)</pre>
+public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.372">createLocalHTU</a>(org.apache.hadoop.conf.Configuration c)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#HBaseTestingUtility-org.apache.hadoop.conf.Configuration-"><code>HBaseTestingUtility(Configuration)</code></a> instead</span></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -2126,7 +2125,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>closeRegionAndWAL</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.380">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a> r)
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.379">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a> r)
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">Close both the region <code>r</code> and it's underlying WAL. For use in tests.</div>
<dl>
@@ -2141,7 +2140,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>closeRegionAndWAL</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.387">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a> r)
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.386">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a> r)
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">Close both the HRegion <code>r</code> and it's underlying WAL. For use in tests.</div>
<dl>
@@ -2156,7 +2155,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>getConfiguration</h4>
-<pre>public org.apache.hadoop.conf.Configuration <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.406">getConfiguration</a>()</pre>
+<pre>public org.apache.hadoop.conf.Configuration <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.405">getConfiguration</a>()</pre>
<div class="block">Returns this classes's instance of <code>Configuration</code>. Be careful how
you use the returned Configuration since <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Connection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client"><code>Connection</code></a> instances
can be shared. The Map of Connections is keyed by the Configuration. If
@@ -2179,7 +2178,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>setHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.410">setHBaseCluster</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/HBaseCluster.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">HBaseCluster</a> hbaseCluster)</pre>
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.409">setHBaseCluster</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/HBaseCluster.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">HBaseCluster</a> hbaseCluster)</pre>
</li>
</ul>
<a name="setupDataTestDir--">
@@ -2188,7 +2187,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>setupDataTestDir</h4>
-<pre>protected org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.431">setupDataTestDir</a>()</pre>
+<pre>protected org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.430">setupDataTestDir</a>()</pre>
<div class="block">Home our data in a dir under <a href="../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html#DEFAULT_BASE_TEST_DIRECTORY"><code>HBaseCommonTestingUtility.DEFAULT_BASE_TEST_DIRECTORY</code></a>.
Give it a random name so can have many concurrent tests running if
we need to. It needs to amend the <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#TEST_DIRECTORY_KEY"><code>TEST_DIRECTORY_KEY</code></a>
@@ -2216,7 +2215,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<li class="blockList">
<h4>getMetaTableDescriptor</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.498">getMetaTableDescriptor</a>()</pre>
+public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.497">getMetaTableDescriptor</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getMetaTableDescriptorBuilder--"><code>getMetaTableDescriptorBuilder()</code></a></span></div>
<dl>
@@ -2231,7 +2230,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>getMetaTableDescriptorBuilder</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.505">getMetaTableDescriptorBuilder</a>()</pre>
+<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.504">getMetaTableDescriptorBuilder</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>META table descriptor</dd>
@@ -2244,7 +2243,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>getDataTestDirOnTestFS</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.519">getDataTestDirOnTestFS</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.518">getDataTestDirOnTestFS</a>()
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">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2263,7 +2262,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>getDataTestDirOnTestFS</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.534">getDataTestDirOnTestFS</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> subdirName)
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.533">getDataTestDirOnTestFS</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> subdirName)
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">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2284,7 +2283,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.579">cleanupDataTestDirOnTestFS</a>()
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.578">cleanupDataTestDirOnTestFS</a>()
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">Cleans the test data directory on the test filesystem.</div>
<dl>
@@ -2301,7 +2300,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.591">cleanupDataTestDirOnTestFS</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> subdirName)
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.590">cleanupDataTestDirOnTestFS</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> subdirName)
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">Cleans a subdirectory under the test data directory on the test filesystem.</div>
<dl>
@@ -2318,7 +2317,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.603">startMiniDFSCluster</a>(int servers)
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.602">startMiniDFSCluster</a>(int servers)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start a minidfscluster.</div>
<dl>
@@ -2339,7 +2338,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.618">startMiniDFSCluster</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>[] hosts)
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.617">startMiniDFSCluster</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>[] hosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start a minidfscluster.
This is useful if you want to run datanode on distinct hosts for things
@@ -2364,7 +2363,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.636">startMiniDFSCluster</a>(int servers,
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.635">startMiniDFSCluster</a>(int servers,
<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>[] hosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start a minidfscluster.
@@ -2388,7 +2387,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.653">startMiniDFSCluster</a>(int servers,
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.652">startMiniDFSCluster</a>(int servers,
<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>[] racks,
<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>[] hosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2404,7 +2403,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSClusterForTestWAL</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.684">startMiniDFSClusterForTestWAL</a>(int namenodePort)
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.683">startMiniDFSClusterForTestWAL</a>(int namenodePort)
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2418,7 +2417,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>isReadShortCircuitOn</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.720">isReadShortCircuitOn</a>()</pre>
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.719">isReadShortCircuitOn</a>()</pre>
<div class="block">Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.
This allows to specify this parameter on the command line.
If not set, default is true.</div>
@@ -2430,7 +2429,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<ul class="blockList">
<li class="blockList">
<h4>shutdownMiniDFSCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.762">shutdownMiniDFSCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.761">shutdownMiniDFSCluster</a>()
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">Shuts down instance created by call to <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniDFSCluster-int-"><code>startMiniDFSCluster(int)</code></a>
or does nothing.</div>
@@ -2447,7 +2446,7 @@ public <a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.781">startMiniCluster</a>(boolean createWALDir)
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.780">startMiniCluster</a>(boolean createWALDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
<div class="block">Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.
@@ -2471,7 +2470,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.797">startMiniCluster</a>(int numSlaves,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.796">startMiniCluster</a>(int numSlaves,
boolean createRootDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
@@ -2497,7 +2496,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.815">startMiniCluster</a>(int numSlaves,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.814">startMiniCluster</a>(int numSlaves,
boolean createRootDir,
boolean createWALDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2525,7 +2524,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.834">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.833">startMiniCluster</a>(int numMasters,
int numSlaves,
boolean createRootDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2553,7 +2552,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.852">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.851">startMiniCluster</a>(int numMasters,
int numSlaves)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
@@ -2579,7 +2578,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.871">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.870">startMiniCluster</a>(int numMasters,
int numSlaves,
<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>[] dataNodeHosts,
boolean createRootDir)
@@ -2610,7 +2609,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.891">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.890">startMiniCluster</a>(int numMasters,
int numSlaves,
<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>[] dataNodeHosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2639,7 +2638,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.910">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.909">startMiniCluster</a>(int numMasters,
int numRegionServers,
int numDataNodes)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2667,7 +2666,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.932">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.931">startMiniCluster</a>(int numMasters,
int numSlaves,
<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>[] dataNodeHosts,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends <a href="../../../../../apidocs/org/apache/hadoop/hbase/master/HMaster.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.master">HMaster</a>> masterClass,
@@ -2700,7 +2699,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.959">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.958">startMiniCluster</a>(int numMasters,
int numRegionServers,
int numDataNodes,
<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>[] dataNodeHosts,
@@ -2735,7 +2734,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.988">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.987">startMiniCluster</a>(int numMasters,
int numRegionServers,
int numDataNodes,
<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>[] dataNodeHosts,
@@ -2773,7 +2772,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1008">startMiniCluster</a>(int numSlaves)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1007">startMiniCluster</a>(int numSlaves)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.
All other options will use default values, defined in <a href="../../../../../apidocs/org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -2794,7 +2793,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1020">startMiniCluster</a>()
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1019">startMiniCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start up a minicluster of hbase, dfs and zookeeper all using default options.
Option default value can be found in <a href="../../../../../apidocs/org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -2813,7 +2812,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1030">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1029">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.
It modifies Configuration. It homes the cluster data directory under a random
@@ -2832,7 +2831,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1068">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1067">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
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">Starts up mini hbase cluster.
@@ -2856,7 +2855,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1114">startMiniHBaseCluster</a>()
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1113">startMiniHBaseCluster</a>()
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">Starts up mini hbase cluster using default options.
@@ -2878,7 +2877,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1129">startMiniHBaseCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1128">startMiniHBaseCluster</a>(int numMasters,
int numRegionServers)
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>
@@ -2907,7 +2906,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1148">startMiniHBaseCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1147">startMiniHBaseCluster</a>(int numMasters,
int numRegionServers,
<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><<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>> rsPorts)
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>,
@@ -2938,7 +2937,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1171">startMiniHBaseCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1170">startMiniHBaseCluster</a>(int numMasters,
int numRegionServers,
<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><<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>> rsPorts,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends <a href="../../../../../apidocs/org/apache/hadoop/hbase/master/HMaster.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.master">HMaster</a>> masterClass,
@@ -2976,7 +2975,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>restartHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1187">restartHBaseCluster</a>(int servers)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1186">restartHBaseCluster</a>(int servers)
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">Starts the hbase cluster up again after shutting it down previously in a
@@ -2996,7 +2995,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>getMiniHBaseCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1215">getMiniHBaseCluster</a>()</pre>
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1214">getMiniHBaseCluster</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Current mini hbase cluster. Only has something in it after a call
@@ -3012,7 +3011,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>shutdownMiniCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1228">shutdownMiniCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1227">shutdownMiniCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Stops mini hbase, zk, and hdfs clusters.</div>
<dl>
@@ -3030,7 +3029,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>shutdownMiniHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1242">shutdownMiniHBaseCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1241">shutdownMiniHBaseCluster</a>()
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">Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.</div>
<dl>
@@ -3045,7 +3044,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>getDefaultRootDirPath</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1274">getDefaultRootDirPath</a>(boolean create)
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1273">getDefaultRootDirPath</a>(boolean create)
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">Returns the path to the default root dir the minicluster uses. If <code>create</code>
is true, a new root directory path is fetched irrespective of whether it has been fetched
@@ -3065,7 +3064,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>getDefaultRootDirPath</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1289">getDefaultRootDirPath</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1288">getDefaultRootDirPath</a>()
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">Same as {<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getDefaultRootDirPath-boolean-"><code>getDefaultRootDirPath(boolean create)</code></a>
except that <code>create</code> flag is false.
@@ -3084,7 +3083,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createRootDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1305">createRootDir</a>(boolean create)
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1304">createRootDir</a>(boolean create)
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">Creates an hbase rootdir in user home directory. Also creates hbase
version file. Normally you won't make use of this method. Root hbasedir
@@ -3109,7 +3108,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createRootDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1320">createRootDir</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1319">createRootDir</a>()
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">Same as <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#createRootDir-boolean-"><code>createRootDir(boolean create)</code></a>
except that <code>create</code> flag is false.</div>
@@ -3127,7 +3126,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createWALRootDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1333">createWALRootDir</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1332">createWALRootDir</a>()
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">Creates a hbase walDir in the user's home directory.
Normally you won't make use of this method. Root hbaseWALDir
@@ -3147,7 +3146,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>flush</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1355">flush</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1354">flush</a>()
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">Flushes all caches in the mini hbase cluster</div>
<dl>
@@ -3162,7 +3161,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>flush</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1363">flush</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1362">flush</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName)
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">Flushes all caches in the mini hbase cluster</div>
<dl>
@@ -3177,7 +3176,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>compact</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1371">compact</a>(boolean major)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1370">compact</a>(boolean major)
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">Compact all regions in the mini hbase cluster</div>
<dl>
@@ -3192,7 +3191,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>compact</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1379">compact</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1378">compact</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
boolean major)
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">Compact all of a table's reagion in the mini hbase cluster</div>
@@ -3208,7 +3207,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1390">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1389">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
<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> family)
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">Create a table.</div>
@@ -3229,7 +3228,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1402">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1401">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
<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>[] families)
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">Create a table.</div>
@@ -3250,7 +3249,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1418">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1417">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] family)
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">Create a table.</div>
@@ -3271,7 +3270,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createMultiRegionTable</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1431">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1430">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] family,
int numRegions)
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>
@@ -3294,7 +3293,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1448">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1447">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families)
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">Create a table.</div>
@@ -3315,7 +3314,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createMultiRegionTable</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1460">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1459">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families)
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">Create a table with multiple regions.</div>
@@ -3336,7 +3335,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1472">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1471">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
byte[][] splitKeys)
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>
@@ -3359,7 +3358,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1486">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1485">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
byte[][] splitKeys,
int replicaCount)
@@ -3384,7 +3383,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1492">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1491">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
int numVersions,
byte[] startKey,
@@ -3403,7 +3402,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1512">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
+<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1511">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
byte[][] families,
org.apache.hadoop.conf.Configuration c)
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>
@@ -3426,7 +3425,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestin
<TRUNCATED>
[25/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HStoreFile.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HStoreFile.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HStoreFile.html
index 6513db7..845e729 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HStoreFile.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HStoreFile.html
@@ -1102,12 +1102,22 @@
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private long</code></td>
-<td class="colLast"><span class="typeNameLabel">HStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize-java.util.function.Predicate-">getStorefilesSize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> predicate)</code> </td>
+<td class="colLast"><span class="typeNameLabel">HStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize-java.util.Collection-java.util.function.Predicate-">getStorefilesSize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> files,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> predicate)</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><span class="typeNameLabel">HStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize-java.util.Collection-java.util.function.Predicate-">getStorefilesSize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> files,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> predicate)</code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private long</code></td>
<td class="colLast"><span class="typeNameLabel">HStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalSize-java.util.Collection-">getTotalSize</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> sfs)</code> </td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><span class="typeNameLabel">HStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalUmcompressedBytes-java.util.List-">getTotalUmcompressedBytes</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><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>> files)</code> </td>
+</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>></code></td>
<td class="colLast"><span class="typeNameLabel">DefaultStoreFileManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/DefaultStoreFileManager.html#getUnneededFiles-long-java.util.List-">getUnneededFiles</a></span>(long maxTs,
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index e493b58..44806c1 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -710,20 +710,20 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 6851ee1..23060c2 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index 19354d1..e8df157 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -248,8 +248,8 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index cd3870f..30c4e73 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -207,8 +207,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSourceShipper.WorkerState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSourceShipper.WorkerState</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 034077c..c20ff47 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index f594c43..8051208 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -142,9 +142,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index dfa02b5..13f949c 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,9 +191,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 4ade4c1..2853d09 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -200,8 +200,8 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 10b0fde..a90e38b 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -540,14 +540,14 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index c6caa9b..bcb1724 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -191,8 +191,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 633d43a..051e8e4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
<span class="sourceLineNo">010</span> public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
<span class="sourceLineNo">011</span> public static final String revision = "";<a name="line.11"></a>
<span class="sourceLineNo">012</span> public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span> public static final String date = "Sun Oct 21 14:43:28 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span> public static final String date = "Mon Oct 22 14:44:49 UTC 2018";<a name="line.13"></a>
<span class="sourceLineNo">014</span> public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span> public static final String srcChecksum = "f5f881f57d789d4aabea2eec95e064ba";<a name="line.15"></a>
+<span class="sourceLineNo">015</span> public static final String srcChecksum = "71b52165b80cc27916da6d7d4fb1ab20";<a name="line.15"></a>
<span class="sourceLineNo">016</span>}<a name="line.16"></a>
[07/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 6af42fe..2d9b60f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -146,8 +146,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/client/TestAdmin2.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestAdmin2.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestAdmin2.html
index f024184..8143ce8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestAdmin2.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestAdmin2.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":9,"i5":10,"i6":10,"i7":10,"i8":9,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":9,"i5":10,"i6":10,"i7":10,"i8":9,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
<li class="blockList">
<hr>
<br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.80">TestAdmin2</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.83">TestAdmin2</a>
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></pre>
<div class="block">Class to test HBaseAdmin.
Spins up the minicluster once at test start and then takes it down afterward.
@@ -278,70 +278,76 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testGetRegionInfo--">testGetRegionInfo</a></span>()</code>
+<div class="block">TestCase for HBASE-21355</div>
+</td>
+</tr>
+<tr id="i22" class="altColor">
+<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testGetTableRegions--">testGetTableRegions</a></span>()</code>
<div class="block">For HBASE-2556</div>
</td>
</tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testIsEnabledOrDisabledOnUnknownTable--">testIsEnabledOrDisabledOnUnknownTable</a></span>()</code> </td>
</tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testMoveToPreviouslyAssignedRS--">testMoveToPreviouslyAssignedRS</a></span>()</code> </td>
</tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testReadOnlyTable--">testReadOnlyTable</a></span>()</code>
<div class="block">Test read only tables</div>
</td>
</tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testRegionNormalizer--">testRegionNormalizer</a></span>()</code> </td>
</tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testShouldUnassignTheRegion--">testShouldUnassignTheRegion</a></span>()</code> </td>
</tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testTableExistsExceptionWithATable--">testTableExistsExceptionWithATable</a></span>()</code>
<div class="block">For HADOOP-2579</div>
</td>
</tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testTableNameClash--">testTableNameClash</a></span>()</code>
<div class="block">Test for hadoop-1581 'HBASE: Unopenable tablename bug'.</div>
</td>
</tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testTableNames--">testTableNames</a></span>()</code>
<div class="block">Test that user table names can contain '-' and '.' so long as they do not
start with same.</div>
</td>
</tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testTableNotDisabledExceptionWithATable--">testTableNotDisabledExceptionWithATable</a></span>()</code>
<div class="block">Can't enable a table if the table isn't in disabled state</div>
</td>
</tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testTableNotEnabledExceptionWithATable--">testTableNotEnabledExceptionWithATable</a></span>()</code>
<div class="block">Can't disable a table if the table isn't in enabled state</div>
</td>
</tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testTableNotFoundExceptionWithoutAnyTables--">testTableNotFoundExceptionWithoutAnyTables</a></span>()</code>
<div class="block">For HADOOP-2579</div>
</td>
</tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#testWALRollWriting--">testWALRollWriting</a></span>()</code> </td>
</tr>
@@ -373,7 +379,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>CLASS_RULE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.83">CLASS_RULE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.86">CLASS_RULE</a></pre>
</li>
</ul>
<a name="LOG">
@@ -382,7 +388,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.86">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.89">LOG</a></pre>
</li>
</ul>
<a name="TEST_UTIL">
@@ -391,7 +397,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>TEST_UTIL</h4>
-<pre>private static final <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.87">TEST_UTIL</a></pre>
+<pre>private static final <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.90">TEST_UTIL</a></pre>
</li>
</ul>
<a name="admin">
@@ -400,7 +406,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>admin</h4>
-<pre>private org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.88">admin</a></pre>
+<pre>private org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.91">admin</a></pre>
</li>
</ul>
<a name="name">
@@ -409,7 +415,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>name</h4>
-<pre>public org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.91">name</a></pre>
+<pre>public org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.94">name</a></pre>
</li>
</ul>
</li>
@@ -426,7 +432,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>TestAdmin2</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.80">TestAdmin2</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.83">TestAdmin2</a>()</pre>
</li>
</ul>
</li>
@@ -443,7 +449,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>setUpBeforeClass</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.94">setUpBeforeClass</a>()
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.97">setUpBeforeClass</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -457,7 +463,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>tearDownAfterClass</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.105">tearDownAfterClass</a>()
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.108">tearDownAfterClass</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -471,7 +477,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>setUp</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.110">setUp</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.113">setUp</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -485,7 +491,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>tearDown</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.115">tearDown</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.118">tearDown</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -499,7 +505,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testCreateBadTables</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.122">testCreateBadTables</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.125">testCreateBadTables</a>()
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -513,7 +519,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testTableNameClash</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.179">testTableNameClash</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.182">testTableNameClash</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Test for hadoop-1581 'HBASE: Unopenable tablename bug'.</div>
<dl>
@@ -528,7 +534,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testCreateTableRPCTimeOut</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.199">testCreateTableRPCTimeOut</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.202">testCreateTableRPCTimeOut</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">HMaster.createTable used to be kind of synchronous call
Thus creating of table with lots of regions can cause RPC timeout
@@ -546,7 +552,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testReadOnlyTable</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.223">testReadOnlyTable</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.226">testReadOnlyTable</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Test read only tables</div>
<dl>
@@ -561,7 +567,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testTableNames</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.240">testTableNames</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.243">testTableNames</a>()
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">Test that user table names can contain '-' and '.' so long as they do not
start with same. HBASE-771</div>
@@ -577,7 +583,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testTableExistsExceptionWithATable</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.269">testTableExistsExceptionWithATable</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.272">testTableExistsExceptionWithATable</a>()
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">For HADOOP-2579</div>
<dl>
@@ -592,7 +598,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testTableNotEnabledExceptionWithATable</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.280">testTableNotEnabledExceptionWithATable</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.283">testTableNotEnabledExceptionWithATable</a>()
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">Can't disable a table if the table isn't in enabled state</div>
<dl>
@@ -607,7 +613,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testTableNotDisabledExceptionWithATable</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.292">testTableNotDisabledExceptionWithATable</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.295">testTableNotDisabledExceptionWithATable</a>()
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">Can't enable a table if the table isn't in disabled state</div>
<dl>
@@ -622,7 +628,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testTableNotFoundExceptionWithoutAnyTables</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.307">testTableNotFoundExceptionWithoutAnyTables</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.310">testTableNotFoundExceptionWithoutAnyTables</a>()
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">For HADOOP-2579</div>
<dl>
@@ -637,7 +643,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testShouldUnassignTheRegion</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.315">testShouldUnassignTheRegion</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.318">testShouldUnassignTheRegion</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -651,7 +657,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testCloseRegionIfInvalidRegionNameIsPassed</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.342">testCloseRegionIfInvalidRegionNameIsPassed</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.345">testCloseRegionIfInvalidRegionNameIsPassed</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -665,7 +671,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testCloseRegionThatFetchesTheHRIFromMeta</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.368">testCloseRegionThatFetchesTheHRIFromMeta</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.371">testCloseRegionThatFetchesTheHRIFromMeta</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -679,7 +685,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>private org.apache.hadoop.hbase.client.HBaseAdmin <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.397">createTable</a>(org.apache.hadoop.hbase.TableName tableName)
+<pre>private org.apache.hadoop.hbase.client.HBaseAdmin <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.400">createTable</a>(org.apache.hadoop.hbase.TableName tableName)
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -693,7 +699,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>createTableWithDefaultConf</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.408">createTableWithDefaultConf</a>(byte[] TABLENAME)
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.411">createTableWithDefaultConf</a>(byte[] TABLENAME)
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -707,7 +713,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>createTableWithDefaultConf</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.412">createTableWithDefaultConf</a>(org.apache.hadoop.hbase.TableName TABLENAME)
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.415">createTableWithDefaultConf</a>(org.apache.hadoop.hbase.TableName TABLENAME)
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -721,7 +727,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testGetTableRegions</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.425">testGetTableRegions</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.428">testGetTableRegions</a>()
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">For HBASE-2556</div>
<dl>
@@ -736,7 +742,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testMoveToPreviouslyAssignedRS</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.447">testMoveToPreviouslyAssignedRS</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.450">testMoveToPreviouslyAssignedRS</a>()
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>
<dl>
@@ -752,7 +758,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testWALRollWriting</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.462">testWALRollWriting</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.465">testWALRollWriting</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -766,7 +772,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>setUpforLogRolling</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.485">setUpforLogRolling</a>()</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.488">setUpforLogRolling</a>()</pre>
</li>
</ul>
<a name="startAndWriteData-org.apache.hadoop.hbase.TableName-byte:A-">
@@ -775,7 +781,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>startAndWriteData</h4>
-<pre>private org.apache.hadoop.hbase.regionserver.HRegionServer <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.527">startAndWriteData</a>(org.apache.hadoop.hbase.TableName tableName,
+<pre>private org.apache.hadoop.hbase.regionserver.HRegionServer <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.530">startAndWriteData</a>(org.apache.hadoop.hbase.TableName tableName,
byte[] value)
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>
@@ -792,7 +798,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testCheckHBaseAvailableWithoutCluster</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.561">testCheckHBaseAvailableWithoutCluster</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.564">testCheckHBaseAvailableWithoutCluster</a>()</pre>
<div class="block">Check that we have an exception if the cluster is not there.</div>
</li>
</ul>
@@ -802,7 +808,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testDisableCatalogTable</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.582">testDisableCatalogTable</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.585">testDisableCatalogTable</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -816,7 +822,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testIsEnabledOrDisabledOnUnknownTable</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.598">testIsEnabledOrDisabledOnUnknownTable</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.601">testIsEnabledOrDisabledOnUnknownTable</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -830,7 +836,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testGetRegion</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.613">testGetRegion</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.616">testGetRegion</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -844,7 +850,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testBalancer</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.634">testBalancer</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.637">testBalancer</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -858,7 +864,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testRegionNormalizer</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.656">testRegionNormalizer</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.659">testRegionNormalizer</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -872,7 +878,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testAbortProcedureFail</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.678">testAbortProcedureFail</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.681">testAbortProcedureFail</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -886,7 +892,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testGetProcedures</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.687">testGetProcedures</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.690">testGetProcedures</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -900,7 +906,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testGetLocks</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.693">testGetLocks</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.696">testGetLocks</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -911,10 +917,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<a name="testDecommissionRegionServers--">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>testDecommissionRegionServers</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.699">testDecommissionRegionServers</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.702">testDecommissionRegionServers</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -922,6 +928,21 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</dl>
</li>
</ul>
+<a name="testGetRegionInfo--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testGetRegionInfo</h4>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin2.html#line.765">testGetRegionInfo</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">TestCase for HBASE-21355</div>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index ec56445..4837d80 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -158,8 +158,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TagUsage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html
index 1abdd7a..73a909f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html#line.567">MasterProcedureTestingUtility.InjectAbortOnLoadListener</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html#line.572">MasterProcedureTestingUtility.InjectAbortOnLoadListener</a>
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 org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecutorListener</pre>
</li>
@@ -222,7 +222,7 @@ implements org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecuto
<ul class="blockList">
<li class="blockList">
<h4>procExec</h4>
-<pre>private final org.apache.hadoop.hbase.procedure2.ProcedureExecutor<org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.569">procExec</a></pre>
+<pre>private final org.apache.hadoop.hbase.procedure2.ProcedureExecutor<org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.574">procExec</a></pre>
</li>
</ul>
<a name="procsToAbort">
@@ -231,7 +231,7 @@ implements org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecuto
<ul class="blockListLast">
<li class="blockList">
<h4>procsToAbort</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</a><<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="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.570">procsToAbort</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</a><<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="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.575">procsToAbort</a></pre>
</li>
</ul>
</li>
@@ -248,7 +248,7 @@ implements org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecuto
<ul class="blockListLast">
<li class="blockList">
<h4>InjectAbortOnLoadListener</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.572">InjectAbortOnLoadListener</a>(org.apache.hadoop.hbase.procedure2.ProcedureExecutor<org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv> procExec)</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.577">InjectAbortOnLoadListener</a>(org.apache.hadoop.hbase.procedure2.ProcedureExecutor<org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv> procExec)</pre>
</li>
</ul>
</li>
@@ -265,7 +265,7 @@ implements org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecuto
<ul class="blockList">
<li class="blockList">
<h4>addProcId</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.576">addProcId</a>(long procId)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.581">addProcId</a>(long procId)</pre>
</li>
</ul>
<a name="procedureLoaded-long-">
@@ -274,7 +274,7 @@ implements org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecuto
<ul class="blockList">
<li class="blockList">
<h4>procedureLoaded</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.584">procedureLoaded</a>(long procId)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.589">procedureLoaded</a>(long procId)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>procedureLoaded</code> in interface <code>org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecutorListener</code></dd>
@@ -287,7 +287,7 @@ implements org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecuto
<ul class="blockList">
<li class="blockList">
<h4>procedureAdded</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.592">procedureAdded</a>(long procId)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.597">procedureAdded</a>(long procId)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>procedureAdded</code> in interface <code>org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecutorListener</code></dd>
@@ -300,7 +300,7 @@ implements org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecuto
<ul class="blockListLast">
<li class="blockList">
<h4>procedureFinished</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.595">procedureFinished</a>(long procId)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.InjectAbortOnLoadListener.html#line.600">procedureFinished</a>(long procId)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>procedureFinished</code> in interface <code>org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecutorListener</code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html
index 7837c5f..6ee76f9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html
@@ -790,7 +790,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testRollbackRetriableFailure</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html#line.533">testRollbackRetriableFailure</a>(org.apache.hadoop.hbase.procedure2.ProcedureExecutor<org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv> procExec,
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html#line.538">testRollbackRetriableFailure</a>(org.apache.hadoop.hbase.procedure2.ProcedureExecutor<org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv> procExec,
long procId,
int lastStep)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -811,7 +811,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>testRestartWithAbort</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html#line.551">testRestartWithAbort</a>(org.apache.hadoop.hbase.procedure2.ProcedureExecutor<org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv> procExec,
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.html#line.556">testRestartWithAbort</a>(org.apache.hadoop.hbase.procedure2.ProcedureExecutor<org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv> procExec,
long procId)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Restart the ProcedureExecutor and inject an abort to the specified procedure.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
index d20b6d5..4327ae2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -580,14 +580,14 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 1ee4477..ddb53a1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -220,9 +220,9 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 931c3d0..fb1680b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -674,8 +674,8 @@
<ul>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
index 40f9c1a..929782e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,10 +253,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index b21ae88..68397c8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -141,9 +141,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
</ul>
</li>
</ul>
[03/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 8d98ec3..f2d5735 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -179,4148 +179,4147 @@
<span class="sourceLineNo">171</span> * avoiding port contention if another local HBase instance is already running).<a name="line.171"></a>
<span class="sourceLineNo">172</span> * <p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.172"></a>
<span class="sourceLineNo">173</span> * setting it to true.<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * Trigger pre commit.<a name="line.174"></a>
-<span class="sourceLineNo">175</span> */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>@InterfaceAudience.Public<a name="line.176"></a>
-<span class="sourceLineNo">177</span>@SuppressWarnings("deprecation")<a name="line.177"></a>
-<span class="sourceLineNo">178</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span> /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * used in mini dfs.<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * @deprecated can be used only with mini dfs<a name="line.184"></a>
-<span class="sourceLineNo">185</span> */<a name="line.185"></a>
-<span class="sourceLineNo">186</span> @Deprecated<a name="line.186"></a>
-<span class="sourceLineNo">187</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.189"></a>
-<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * The default number of regions per regionserver when creating a pre-split<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * table.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.194"></a>
+<span class="sourceLineNo">174</span> */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>@InterfaceAudience.Public<a name="line.175"></a>
+<span class="sourceLineNo">176</span>@SuppressWarnings("deprecation")<a name="line.176"></a>
+<span class="sourceLineNo">177</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span> /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * used in mini dfs.<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * @deprecated can be used only with mini dfs<a name="line.183"></a>
+<span class="sourceLineNo">184</span> */<a name="line.184"></a>
+<span class="sourceLineNo">185</span> @Deprecated<a name="line.185"></a>
+<span class="sourceLineNo">186</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
+<span class="sourceLineNo">189</span> /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * table.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> */<a name="line.192"></a>
+<span class="sourceLineNo">193</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.197"></a>
-<span class="sourceLineNo">198</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> private MiniDFSCluster dfsCluster = null;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span> private MiniMRCluster mrCluster = null;<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.205"></a>
-<span class="sourceLineNo">206</span> private volatile boolean miniClusterRunning;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span> private String hadoopLogDir;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.210"></a>
-<span class="sourceLineNo">211</span> * HBaseTestingUtility*/<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private Path dataTestDirOnTestFS = null;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span> /**<a name="line.214"></a>
-<span class="sourceLineNo">215</span> * Shared cluster connection.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> */<a name="line.216"></a>
-<span class="sourceLineNo">217</span> private volatile Connection connection;<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static String FS_URI;<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.222"></a>
-<span class="sourceLineNo">223</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Checks to see if a specific port is available.<a name="line.226"></a>
-<span class="sourceLineNo">227</span> *<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * @param port the port number to check for availability<a name="line.228"></a>
-<span class="sourceLineNo">229</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.229"></a>
-<span class="sourceLineNo">230</span> */<a name="line.230"></a>
-<span class="sourceLineNo">231</span> public static boolean available(int port) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span> ServerSocket ss = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> DatagramSocket ds = null;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> try {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> ss = new ServerSocket(port);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> ss.setReuseAddress(true);<a name="line.236"></a>
-<span class="sourceLineNo">237</span> ds = new DatagramSocket(port);<a name="line.237"></a>
-<span class="sourceLineNo">238</span> ds.setReuseAddress(true);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> return true;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> } catch (IOException e) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // Do nothing<a name="line.241"></a>
-<span class="sourceLineNo">242</span> } finally {<a name="line.242"></a>
-<span class="sourceLineNo">243</span> if (ds != null) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> ds.close();<a name="line.244"></a>
-<span class="sourceLineNo">245</span> }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> if (ss != null) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span> try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> ss.close();<a name="line.249"></a>
-<span class="sourceLineNo">250</span> } catch (IOException e) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> /* should not be thrown */<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span> }<a name="line.253"></a>
-<span class="sourceLineNo">254</span> }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span> return false;<a name="line.256"></a>
-<span class="sourceLineNo">257</span> }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span> /**<a name="line.259"></a>
-<span class="sourceLineNo">260</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.260"></a>
-<span class="sourceLineNo">261</span> * testing.<a name="line.261"></a>
-<span class="sourceLineNo">262</span> */<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.263"></a>
-<span class="sourceLineNo">264</span> List<Object[]> configurations = new ArrayList<>();<a name="line.264"></a>
-<span class="sourceLineNo">265</span> for (Compression.Algorithm comprAlgo :<a name="line.265"></a>
-<span class="sourceLineNo">266</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> for (BloomType bloomType : BloomType.values()) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span> }<a name="line.270"></a>
-<span class="sourceLineNo">271</span> return Collections.unmodifiableList(configurations);<a name="line.271"></a>
-<span class="sourceLineNo">272</span> }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span> /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span> * Create combination of memstoreTS and tags<a name="line.275"></a>
-<span class="sourceLineNo">276</span> */<a name="line.276"></a>
-<span class="sourceLineNo">277</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> List<Object[]> configurations = new ArrayList<>();<a name="line.278"></a>
-<span class="sourceLineNo">279</span> configurations.add(new Object[] { false, false });<a name="line.279"></a>
-<span class="sourceLineNo">280</span> configurations.add(new Object[] { false, true });<a name="line.280"></a>
-<span class="sourceLineNo">281</span> configurations.add(new Object[] { true, false });<a name="line.281"></a>
-<span class="sourceLineNo">282</span> configurations.add(new Object[] { true, true });<a name="line.282"></a>
-<span class="sourceLineNo">283</span> return Collections.unmodifiableList(configurations);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> List<Object[]> configurations = new ArrayList<>();<a name="line.287"></a>
-<span class="sourceLineNo">288</span> configurations.add(new Object[] { false, false, true });<a name="line.288"></a>
-<span class="sourceLineNo">289</span> configurations.add(new Object[] { false, false, false });<a name="line.289"></a>
-<span class="sourceLineNo">290</span> configurations.add(new Object[] { false, true, true });<a name="line.290"></a>
-<span class="sourceLineNo">291</span> configurations.add(new Object[] { false, true, false });<a name="line.291"></a>
-<span class="sourceLineNo">292</span> configurations.add(new Object[] { true, false, true });<a name="line.292"></a>
-<span class="sourceLineNo">293</span> configurations.add(new Object[] { true, false, false });<a name="line.293"></a>
-<span class="sourceLineNo">294</span> configurations.add(new Object[] { true, true, true });<a name="line.294"></a>
-<span class="sourceLineNo">295</span> configurations.add(new Object[] { true, true, false });<a name="line.295"></a>
-<span class="sourceLineNo">296</span> return Collections.unmodifiableList(configurations);<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.299"></a>
-<span class="sourceLineNo">300</span> bloomAndCompressionCombinations();<a name="line.300"></a>
+<span class="sourceLineNo">196</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span> private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
+<span class="sourceLineNo">202</span> private MiniMRCluster mrCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span> private volatile boolean miniClusterRunning;<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span> private String hadoopLogDir;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
+<span class="sourceLineNo">210</span> * HBaseTestingUtility*/<a name="line.210"></a>
+<span class="sourceLineNo">211</span> private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Shared cluster connection.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private volatile Connection connection;<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static String FS_URI;<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.221"></a>
+<span class="sourceLineNo">222</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span> * Checks to see if a specific port is available.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> *<a name="line.226"></a>
+<span class="sourceLineNo">227</span> * @param port the port number to check for availability<a name="line.227"></a>
+<span class="sourceLineNo">228</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.228"></a>
+<span class="sourceLineNo">229</span> */<a name="line.229"></a>
+<span class="sourceLineNo">230</span> public static boolean available(int port) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span> ServerSocket ss = null;<a name="line.231"></a>
+<span class="sourceLineNo">232</span> DatagramSocket ds = null;<a name="line.232"></a>
+<span class="sourceLineNo">233</span> try {<a name="line.233"></a>
+<span class="sourceLineNo">234</span> ss = new ServerSocket(port);<a name="line.234"></a>
+<span class="sourceLineNo">235</span> ss.setReuseAddress(true);<a name="line.235"></a>
+<span class="sourceLineNo">236</span> ds = new DatagramSocket(port);<a name="line.236"></a>
+<span class="sourceLineNo">237</span> ds.setReuseAddress(true);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> return true;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> } catch (IOException e) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> // Do nothing<a name="line.240"></a>
+<span class="sourceLineNo">241</span> } finally {<a name="line.241"></a>
+<span class="sourceLineNo">242</span> if (ds != null) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span> ds.close();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span> if (ss != null) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span> try {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> ss.close();<a name="line.248"></a>
+<span class="sourceLineNo">249</span> } catch (IOException e) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> /* should not be thrown */<a name="line.250"></a>
+<span class="sourceLineNo">251</span> }<a name="line.251"></a>
+<span class="sourceLineNo">252</span> }<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> return false;<a name="line.255"></a>
+<span class="sourceLineNo">256</span> }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span> /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * testing.<a name="line.260"></a>
+<span class="sourceLineNo">261</span> */<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> List<Object[]> configurations = new ArrayList<>();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> for (Compression.Algorithm comprAlgo :<a name="line.264"></a>
+<span class="sourceLineNo">265</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span> for (BloomType bloomType : BloomType.values()) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.267"></a>
+<span class="sourceLineNo">268</span> }<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span> return Collections.unmodifiableList(configurations);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span> /**<a name="line.273"></a>
+<span class="sourceLineNo">274</span> * Create combination of memstoreTS and tags<a name="line.274"></a>
+<span class="sourceLineNo">275</span> */<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> List<Object[]> configurations = new ArrayList<>();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> configurations.add(new Object[] { false, false });<a name="line.278"></a>
+<span class="sourceLineNo">279</span> configurations.add(new Object[] { false, true });<a name="line.279"></a>
+<span class="sourceLineNo">280</span> configurations.add(new Object[] { true, false });<a name="line.280"></a>
+<span class="sourceLineNo">281</span> configurations.add(new Object[] { true, true });<a name="line.281"></a>
+<span class="sourceLineNo">282</span> return Collections.unmodifiableList(configurations);<a name="line.282"></a>
+<span class="sourceLineNo">283</span> }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span> List<Object[]> configurations = new ArrayList<>();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> configurations.add(new Object[] { false, false, true });<a name="line.287"></a>
+<span class="sourceLineNo">288</span> configurations.add(new Object[] { false, false, false });<a name="line.288"></a>
+<span class="sourceLineNo">289</span> configurations.add(new Object[] { false, true, true });<a name="line.289"></a>
+<span class="sourceLineNo">290</span> configurations.add(new Object[] { false, true, false });<a name="line.290"></a>
+<span class="sourceLineNo">291</span> configurations.add(new Object[] { true, false, true });<a name="line.291"></a>
+<span class="sourceLineNo">292</span> configurations.add(new Object[] { true, false, false });<a name="line.292"></a>
+<span class="sourceLineNo">293</span> configurations.add(new Object[] { true, true, true });<a name="line.293"></a>
+<span class="sourceLineNo">294</span> configurations.add(new Object[] { true, true, false });<a name="line.294"></a>
+<span class="sourceLineNo">295</span> return Collections.unmodifiableList(configurations);<a name="line.295"></a>
+<span class="sourceLineNo">296</span> }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.298"></a>
+<span class="sourceLineNo">299</span> bloomAndCompressionCombinations();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.304"></a>
-<span class="sourceLineNo">305</span> *<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> *<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.311"></a>
-<span class="sourceLineNo">312</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.312"></a>
-<span class="sourceLineNo">313</span> * at which point they will switch to using mini DFS for storage.<a name="line.313"></a>
-<span class="sourceLineNo">314</span> */<a name="line.314"></a>
-<span class="sourceLineNo">315</span> public HBaseTestingUtility() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> this(HBaseConfiguration.create());<a name="line.316"></a>
-<span class="sourceLineNo">317</span> }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.320"></a>
-<span class="sourceLineNo">321</span> *<a name="line.321"></a>
-<span class="sourceLineNo">322</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.322"></a>
-<span class="sourceLineNo">323</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.323"></a>
-<span class="sourceLineNo">324</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.324"></a>
-<span class="sourceLineNo">325</span> *<a name="line.325"></a>
-<span class="sourceLineNo">326</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.326"></a>
-<span class="sourceLineNo">327</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.327"></a>
-<span class="sourceLineNo">328</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.328"></a>
-<span class="sourceLineNo">329</span> * at which point they will switch to using mini DFS for storage.<a name="line.329"></a>
-<span class="sourceLineNo">330</span> *<a name="line.330"></a>
-<span class="sourceLineNo">331</span> * @param conf The configuration to use for further operations<a name="line.331"></a>
-<span class="sourceLineNo">332</span> */<a name="line.332"></a>
-<span class="sourceLineNo">333</span> public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span> super(conf);<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.336"></a>
-<span class="sourceLineNo">337</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> // Save this for when setting default file:// breaks things<a name="line.339"></a>
-<span class="sourceLineNo">340</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.341"></a>
-<span class="sourceLineNo">342</span> }<a name="line.342"></a>
-<span class="sourceLineNo">343</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span> // Every cluster is a local cluster until we start DFS<a name="line.346"></a>
-<span class="sourceLineNo">347</span> // Note that conf could be null, but this.conf will not be<a name="line.347"></a>
-<span class="sourceLineNo">348</span> String dataTestDir = getDataTestDir().toString();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> this.conf.set("fs.defaultFS","file:///");<a name="line.349"></a>
-<span class="sourceLineNo">350</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> // If the value for random ports isn't set set it to true, thus making<a name="line.353"></a>
-<span class="sourceLineNo">354</span> // tests opt-out for random port assignment<a name="line.354"></a>
-<span class="sourceLineNo">355</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.355"></a>
-<span class="sourceLineNo">356</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.356"></a>
-<span class="sourceLineNo">357</span> }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span> /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.360"></a>
-<span class="sourceLineNo">361</span> * @return a normal HBaseTestingUtility<a name="line.361"></a>
-<span class="sourceLineNo">362</span> */<a name="line.362"></a>
-<span class="sourceLineNo">363</span> @Deprecated<a name="line.363"></a>
-<span class="sourceLineNo">364</span> public static HBaseTestingUtility createLocalHTU() {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> return new HBaseTestingUtility();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span> /**<a name="line.368"></a>
-<span class="sourceLineNo">369</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.369"></a>
-<span class="sourceLineNo">370</span> * @return a normal HBaseTestingUtility<a name="line.370"></a>
-<span class="sourceLineNo">371</span> */<a name="line.371"></a>
-<span class="sourceLineNo">372</span> @Deprecated<a name="line.372"></a>
-<span class="sourceLineNo">373</span> public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return new HBaseTestingUtility(c);<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> /**<a name="line.377"></a>
-<span class="sourceLineNo">378</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> */<a name="line.379"></a>
-<span class="sourceLineNo">380</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.380"></a>
-<span class="sourceLineNo">381</span> closeRegionAndWAL((HRegion)r);<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> /**<a name="line.384"></a>
-<span class="sourceLineNo">385</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.385"></a>
-<span class="sourceLineNo">386</span> */<a name="line.386"></a>
-<span class="sourceLineNo">387</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> if (r == null) return;<a name="line.388"></a>
-<span class="sourceLineNo">389</span> r.close();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> if (r.getWAL() == null) return;<a name="line.390"></a>
-<span class="sourceLineNo">391</span> r.getWAL().close();<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span> /**<a name="line.394"></a>
-<span class="sourceLineNo">395</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.395"></a>
-<span class="sourceLineNo">396</span> * you use the returned Configuration since {@link Connection} instances<a name="line.396"></a>
-<span class="sourceLineNo">397</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.397"></a>
-<span class="sourceLineNo">398</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.398"></a>
-<span class="sourceLineNo">399</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.399"></a>
-<span class="sourceLineNo">400</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.400"></a>
-<span class="sourceLineNo">401</span> * make a copy and use that. Do<a name="line.401"></a>
-<span class="sourceLineNo">402</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.402"></a>
-<span class="sourceLineNo">403</span> * @return Instance of Configuration.<a name="line.403"></a>
-<span class="sourceLineNo">404</span> */<a name="line.404"></a>
-<span class="sourceLineNo">405</span> @Override<a name="line.405"></a>
-<span class="sourceLineNo">406</span> public Configuration getConfiguration() {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> return super.getConfiguration();<a name="line.407"></a>
-<span class="sourceLineNo">408</span> }<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span> this.hbaseCluster = hbaseCluster;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span> /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.415"></a>
-<span class="sourceLineNo">416</span> * Give it a random name so can have many concurrent tests running if<a name="line.416"></a>
-<span class="sourceLineNo">417</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.417"></a>
-<span class="sourceLineNo">418</span> * System property, as it's what minidfscluster bases<a name="line.418"></a>
-<span class="sourceLineNo">419</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.419"></a>
-<span class="sourceLineNo">420</span> * instances -- another instance could grab the temporary<a name="line.420"></a>
-<span class="sourceLineNo">421</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * single instance only is how the minidfscluster works.<a name="line.422"></a>
-<span class="sourceLineNo">423</span> *<a name="line.423"></a>
-<span class="sourceLineNo">424</span> * We also create the underlying directory for<a name="line.424"></a>
-<span class="sourceLineNo">425</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.425"></a>
-<span class="sourceLineNo">426</span> * in the conf, and as a system property for hadoop.tmp.dir<a name="line.426"></a>
-<span class="sourceLineNo">427</span> *<a name="line.427"></a>
-<span class="sourceLineNo">428</span> * @return The calculated data test build directory, if newly-created.<a name="line.428"></a>
-<span class="sourceLineNo">429</span> */<a name="line.429"></a>
-<span class="sourceLineNo">430</span> @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span> protected Path setupDataTestDir() {<a name="line.431"></a>
-<span class="sourceLineNo">432</span> Path testPath = super.setupDataTestDir();<a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (null == testPath) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> return null;<a name="line.434"></a>
-<span class="sourceLineNo">435</span> }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span> createSubDirAndSystemProperty(<a name="line.437"></a>
-<span class="sourceLineNo">438</span> "hadoop.log.dir",<a name="line.438"></a>
-<span class="sourceLineNo">439</span> testPath, "hadoop-log-dir");<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.441"></a>
-<span class="sourceLineNo">442</span> // we want our own value to ensure uniqueness on the same machine<a name="line.442"></a>
-<span class="sourceLineNo">443</span> createSubDirAndSystemProperty(<a name="line.443"></a>
-<span class="sourceLineNo">444</span> "hadoop.tmp.dir",<a name="line.444"></a>
-<span class="sourceLineNo">445</span> testPath, "hadoop-tmp-dir");<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.447"></a>
-<span class="sourceLineNo">448</span> createSubDir(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "mapreduce.cluster.local.dir",<a name="line.449"></a>
-<span class="sourceLineNo">450</span> testPath, "mapred-local-dir");<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span> return testPath;<a name="line.452"></a>
-<span class="sourceLineNo">453</span> }<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span> private void createSubDirAndSystemProperty(<a name="line.455"></a>
-<span class="sourceLineNo">456</span> String propertyName, Path parent, String subDirName){<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> String sysValue = System.getProperty(propertyName);<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> if (sysValue != null) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span> // There is already a value set. So we do nothing but hope<a name="line.461"></a>
-<span class="sourceLineNo">462</span> // that there will be no conflicts<a name="line.462"></a>
-<span class="sourceLineNo">463</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.463"></a>
-<span class="sourceLineNo">464</span> sysValue + " so I do NOT create it in " + parent);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> String confValue = conf.get(propertyName);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.466"></a>
-<span class="sourceLineNo">467</span> LOG.warn(<a name="line.467"></a>
-<span class="sourceLineNo">468</span> propertyName + " property value differs in configuration and system: "+<a name="line.468"></a>
-<span class="sourceLineNo">469</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.469"></a>
-<span class="sourceLineNo">470</span> " Erasing configuration value by system value."<a name="line.470"></a>
-<span class="sourceLineNo">471</span> );<a name="line.471"></a>
-<span class="sourceLineNo">472</span> }<a name="line.472"></a>
-<span class="sourceLineNo">473</span> conf.set(propertyName, sysValue);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> } else {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.475"></a>
-<span class="sourceLineNo">476</span> createSubDir(propertyName, parent, subDirName);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span> }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span> /**<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.482"></a>
-<span class="sourceLineNo">483</span> * for the test filesystem by default<a name="line.483"></a>
-<span class="sourceLineNo">484</span> * @see #setupDataTestDirOnTestFS()<a name="line.484"></a>
-<span class="sourceLineNo">485</span> * @see #getTestFileSystem()<a name="line.485"></a>
-<span class="sourceLineNo">486</span> */<a name="line.486"></a>
-<span class="sourceLineNo">487</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span> FileSystem fs = getTestFileSystem();<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span><a name="line.491"></a>
-<span class="sourceLineNo">492</span> /**<a name="line.492"></a>
-<span class="sourceLineNo">493</span> * @return META table descriptor<a name="line.493"></a>
-<span class="sourceLineNo">494</span> * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.494"></a>
-<span class="sourceLineNo">495</span> * use {@link #getMetaTableDescriptorBuilder()}<a name="line.495"></a>
-<span class="sourceLineNo">496</span> */<a name="line.496"></a>
-<span class="sourceLineNo">497</span> @Deprecated<a name="line.497"></a>
-<span class="sourceLineNo">498</span> public HTableDescriptor getMetaTableDescriptor() {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.499"></a>
-<span class="sourceLineNo">500</span> }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> /**<a name="line.502"></a>
-<span class="sourceLineNo">503</span> * @return META table descriptor<a name="line.503"></a>
-<span class="sourceLineNo">504</span> */<a name="line.504"></a>
-<span class="sourceLineNo">505</span> public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span> return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.507"></a>
-<span class="sourceLineNo">508</span> } catch (IOException e) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span> throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.509"></a>
-<span class="sourceLineNo">510</span> }<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> /**<a name="line.513"></a>
-<span class="sourceLineNo">514</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.514"></a>
-<span class="sourceLineNo">515</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.515"></a>
-<span class="sourceLineNo">516</span> * if the test relies on it.<a name="line.516"></a>
-<span class="sourceLineNo">517</span> * @return a unique path in the test filesystem<a name="line.517"></a>
-<span class="sourceLineNo">518</span> */<a name="line.518"></a>
-<span class="sourceLineNo">519</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.519"></a>
-<span class="sourceLineNo">520</span> if (dataTestDirOnTestFS == null) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span> setupDataTestDirOnTestFS();<a name="line.521"></a>
-<span class="sourceLineNo">522</span> }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span> return dataTestDirOnTestFS;<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> /**<a name="line.527"></a>
-<span class="sourceLineNo">528</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.528"></a>
-<span class="sourceLineNo">529</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.529"></a>
-<span class="sourceLineNo">530</span> * if the test relies on it.<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * @return a unique path in the test filesystem<a name="line.531"></a>
-<span class="sourceLineNo">532</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.532"></a>
-<span class="sourceLineNo">533</span> */<a name="line.533"></a>
-<span class="sourceLineNo">534</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span> /**<a name="line.538"></a>
-<span class="sourceLineNo">539</span> * Sets up a path in test filesystem to be used by tests.<a name="line.539"></a>
-<span class="sourceLineNo">540</span> * Creates a new directory if not already setup.<a name="line.540"></a>
-<span class="sourceLineNo">541</span> */<a name="line.541"></a>
-<span class="sourceLineNo">542</span> private void setupDataTestDirOnTestFS() throws IOException {<a name="line.542"></a>
-<span class="sourceLineNo">543</span> if (dataTestDirOnTestFS != null) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span> LOG.warn("Data test on test fs dir already setup in "<a name="line.544"></a>
-<span class="sourceLineNo">545</span> + dataTestDirOnTestFS.toString());<a name="line.545"></a>
-<span class="sourceLineNo">546</span> return;<a name="line.546"></a>
-<span class="sourceLineNo">547</span> }<a name="line.547"></a>
-<span class="sourceLineNo">548</span> dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.548"></a>
-<span class="sourceLineNo">549</span> }<a name="line.549"></a>
-<span class="sourceLineNo">550</span><a name="line.550"></a>
-<span class="sourceLineNo">551</span> /**<a name="line.551"></a>
-<span class="sourceLineNo">552</span> * Sets up a new path in test filesystem to be used by tests.<a name="line.552"></a>
-<span class="sourceLineNo">553</span> */<a name="line.553"></a>
-<span class="sourceLineNo">554</span> private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.554"></a>
-<span class="sourceLineNo">555</span> //The file system can be either local, mini dfs, or if the configuration<a name="line.555"></a>
-<span class="sourceLineNo">556</span> //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.556"></a>
-<span class="sourceLineNo">557</span> //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.557"></a>
-<span class="sourceLineNo">558</span> //the working directory, and create a unique sub dir there<a name="line.558"></a>
-<span class="sourceLineNo">559</span> FileSystem fs = getTestFileSystem();<a name="line.559"></a>
-<span class="sourceLineNo">560</span> Path newDataTestDir;<a name="line.560"></a>
-<span class="sourceLineNo">561</span> String randomStr = getRandomUUID().toString();<a name="line.561"></a>
-<span class="sourceLineNo">562</span> if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.563"></a>
-<span class="sourceLineNo">564</span> File dataTestDir = new File(newDataTestDir.toString());<a name="line.564"></a>
-<span class="sourceLineNo">565</span> if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.565"></a>
-<span class="sourceLineNo">566</span> } else {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> Path base = getBaseTestDirOnTestFS();<a name="line.567"></a>
-<span class="sourceLineNo">568</span> newDataTestDir = new Path(base, randomStr);<a name="line.568"></a>
-<span class="sourceLineNo">569</span> if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.569"></a>
-<span class="sourceLineNo">570</span> }<a name="line.570"></a>
-<span class="sourceLineNo">571</span> return newDataTestDir;<a name="line.571"></a>
-<span class="sourceLineNo">572</span> }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span> /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span> * Cleans the test data directory on the test filesystem.<a name="line.575"></a>
-<span class="sourceLineNo">576</span> * @return True if we removed the test dirs<a name="line.576"></a>
-<span class="sourceLineNo">577</span> * @throws IOException<a name="line.577"></a>
-<span class="sourceLineNo">578</span> */<a name="line.578"></a>
-<span class="sourceLineNo">579</span> public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span> boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> if (ret)<a name="line.581"></a>
-<span class="sourceLineNo">582</span> dataTestDirOnTestFS = null;<a name="line.582"></a>
-<span class="sourceLineNo">583</span> return ret;<a name="line.583"></a>
-<span class="sourceLineNo">584</span> }<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span> /**<a name="line.586"></a>
-<span class="sourceLineNo">587</span> * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.587"></a>
-<span class="sourceLineNo">588</span> * @return True if we removed child<a name="line.588"></a>
-<span class="sourceLineNo">589</span> * @throws IOException<a name="line.589"></a>
-<span class="sourceLineNo">590</span> */<a name="line.590"></a>
-<span class="sourceLineNo">591</span> public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return getTestFileSystem().delete(cpath, true);<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span> /**<a name="line.596"></a>
-<span class="sourceLineNo">597</span> * Start a minidfscluster.<a name="line.597"></a>
-<span class="sourceLineNo">598</span> * @param servers How many DNs to start.<a name="line.598"></a>
-<span class="sourceLineNo">599</span> * @throws Exception<a name="line.599"></a>
-<span class="sourceLineNo">600</span> * @see #shutdownMiniDFSCluster()<a name="line.600"></a>
-<span class="sourceLineNo">601</span> * @return The mini dfs cluster created.<a name="line.601"></a>
-<span class="sourceLineNo">602</span> */<a name="line.602"></a>
-<span class="sourceLineNo">603</span> public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.603"></a>
-<span class="sourceLineNo">604</span> return startMiniDFSCluster(servers, null);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> }<a name="line.605"></a>
-<span class="sourceLineNo">606</span><a name="line.606"></a>
-<span class="sourceLineNo">607</span> /**<a name="line.607"></a>
-<span class="sourceLineNo">608</span> * Start a minidfscluster.<a name="line.608"></a>
-<span class="sourceLineNo">609</span> * This is useful if you want to run datanode on distinct hosts for things<a name="line.609"></a>
-<span class="sourceLineNo">610</span> * like HDFS block location verification.<a name="line.610"></a>
-<span class="sourceLineNo">611</span> * If you start MiniDFSCluster without host names, all instances of the<a name="line.611"></a>
-<span class="sourceLineNo">612</span> * datanodes will have the same host name.<a name="line.612"></a>
-<span class="sourceLineNo">613</span> * @param hosts hostnames DNs to run on.<a name="line.613"></a>
-<span class="sourceLineNo">614</span> * @throws Exception<a name="line.614"></a>
-<span class="sourceLineNo">615</span> * @see #shutdownMiniDFSCluster()<a name="line.615"></a>
-<span class="sourceLineNo">616</span> * @return The mini dfs cluster created.<a name="line.616"></a>
-<span class="sourceLineNo">617</span> */<a name="line.617"></a>
-<span class="sourceLineNo">618</span> public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throws Exception {<a name="line.619"></a>
-<span class="sourceLineNo">620</span> if ( hosts != null && hosts.length != 0) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span> return startMiniDFSCluster(hosts.length, hosts);<a name="line.621"></a>
-<span class="sourceLineNo">622</span> } else {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> return startMiniDFSCluster(1, null);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> }<a name="line.624"></a>
-<span class="sourceLineNo">625</span> }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
-<span class="sourceLineNo">628</span> * Start a minidfscluster.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> * Can only create one.<a name="line.629"></a>
-<span class="sourceLineNo">630</span> * @param servers How many DNs to start.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> * @param hosts hostnames DNs to run on.<a name="line.631"></a>
-<span class="sourceLineNo">632</span> * @throws Exception<a name="line.632"></a>
-<span class="sourceLineNo">633</span> * @see #shutdownMiniDFSCluster()<a name="line.633"></a>
-<span class="sourceLineNo">634</span> * @return The mini dfs cluster created.<a name="line.634"></a>
-<span class="sourceLineNo">635</span> */<a name="line.635"></a>
-<span class="sourceLineNo">636</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.636"></a>
-<span class="sourceLineNo">637</span> throws Exception {<a name="line.637"></a>
-<span class="sourceLineNo">638</span> return startMiniDFSCluster(servers, null, hosts);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span> private void setFs() throws IOException {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> if(this.dfsCluster == null){<a name="line.642"></a>
-<span class="sourceLineNo">643</span> LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.643"></a>
-<span class="sourceLineNo">644</span> return;<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span> FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.646"></a>
-<span class="sourceLineNo">647</span> FSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.647"></a>
-<span class="sourceLineNo">648</span><a name="line.648"></a>
-<span class="sourceLineNo">649</span> // re-enable this check with dfs<a name="line.649"></a>
-<span class="sourceLineNo">650</span> conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.650"></a>
-<span class="sourceLineNo">651</span> }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String racks[], String hosts[])<a name="line.653"></a>
-<span class="sourceLineNo">654</span> throws Exception {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> createDirsAndSetProperties();<a name="line.655"></a>
-<span class="sourceLineNo">656</span> EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span> // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.658"></a>
-<span class="sourceLineNo">659</span> org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.util.MBeans.class).<a name="line.659"></a>
-<span class="sourceLineNo">660</span> setLevel(org.apache.log4j.Level.ERROR);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class).<a name="line.661"></a>
-<span class="sourceLineNo">662</span> setLevel(org.apache.log4j.Level.ERROR);<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span> TraceUtil.initTracer(conf);<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span> this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.666"></a>
-<span class="sourceLineNo">667</span> true, null, racks, hosts, null);<a name="line.667"></a>
-<span class="sourceLineNo">668</span><a name="line.668"></a>
-<span class="sourceLineNo">669</span> // Set this just-started cluster as our filesystem.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> setFs();<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span> // Wait for the cluster to be totally up<a name="line.672"></a>
-<span class="sourceLineNo">673</span> this.dfsCluster.waitClusterUp();<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span> //reset the test directory for test file system<a name="line.675"></a>
-<span class="sourceLineNo">676</span> dataTestDirOnTestFS = null;<a name="line.676"></a>
-<span class="sourceLineNo">677</span> String dataTestDir = getDataTestDir().toString();<a name="line.677"></a>
-<span class="sourceLineNo">678</span> conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.678"></a>
-<span class="sourceLineNo">679</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.679"></a>
-<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span> return this.dfsCluster;<a name="line.681"></a>
-<span class="sourceLineNo">682</span> }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span> public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> createDirsAndSetProperties();<a name="line.685"></a>
-<span class="sourceLineNo">686</span> dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.686"></a>
-<span class="sourceLineNo">687</span> null, null, null);<a name="line.687"></a>
-<span class="sourceLineNo">688</span> return dfsCluster;<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> /** This is used before starting HDFS and map-reduce mini-clusters */<a name="line.691"></a>
-<span class="sourceLineNo">692</span> private void createDirsAndSetProperties() throws IOException {<a name="line.692"></a>
-<span class="sourceLineNo">693</span> setupClusterTestDir();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.694"></a>
-<span class="sourceLineNo">695</span> System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.695"></a>
-<span class="sourceLineNo">696</span> createDirAndSetProperty("cache_data", "test.cache.data");<a name="line.696"></a>
-<span class="sourceLineNo">697</span> createDirAndSetProperty("hadoop_tmp", "hadoop.tmp.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span> hadoopLogDir = createDirAndSetProperty("hadoop_logs", "hadoop.log.dir");<a name="line.698"></a>
-<span class="sourceLineNo">699</span> createDirAndSetProperty("mapred_local", "mapreduce.cluster.local.dir");<a name="line.699"></a>
-<span class="sourceLineNo">700</span> createDirAndSetProperty("mapred_temp", "mapreduce.cluster.temp.dir");<a name="line.700"></a>
-<span class="sourceLineNo">701</span> enableShortCircuit();<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span> Path root = getDataTestDirOnTestFS("hadoop");<a name="line.703"></a>
-<span class="sourceLineNo">704</span> conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.704"></a>
-<span class="sourceLineNo">705</span> new Path(root, "mapred-output-dir").toString());<a name="line.705"></a>
-<span class="sourceLineNo">706</span> conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.706"></a>
-<span class="sourceLineNo">707</span> conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.707"></a>
-<span class="sourceLineNo">708</span> new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.708"></a>
-<span class="sourceLineNo">709</span> conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.709"></a>
-<span class="sourceLineNo">710</span> conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.710"></a>
-<span class="sourceLineNo">711</span> new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.711"></a>
-<span class="sourceLineNo">712</span> }<a name="line.712"></a>
+<span class="sourceLineNo">302</span> /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.303"></a>
+<span class="sourceLineNo">304</span> *<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> *<a name="line.308"></a>
+<span class="sourceLineNo">309</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.309"></a>
+<span class="sourceLineNo">310</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.310"></a>
+<span class="sourceLineNo">311</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * at which point they will switch to using mini DFS for storage.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public HBaseTestingUtility() {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> this(HBaseConfiguration.create());<a name="line.315"></a>
+<span class="sourceLineNo">316</span> }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> /**<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.319"></a>
+<span class="sourceLineNo">320</span> *<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.322"></a>
+<span class="sourceLineNo">323</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.323"></a>
+<span class="sourceLineNo">324</span> *<a name="line.324"></a>
+<span class="sourceLineNo">325</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.326"></a>
+<span class="sourceLineNo">327</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.327"></a>
+<span class="sourceLineNo">328</span> * at which point they will switch to using mini DFS for storage.<a name="line.328"></a>
+<span class="sourceLineNo">329</span> *<a name="line.329"></a>
+<span class="sourceLineNo">330</span> * @param conf The configuration to use for further operations<a name="line.330"></a>
+<span class="sourceLineNo">331</span> */<a name="line.331"></a>
+<span class="sourceLineNo">332</span> public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> super(conf);<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.335"></a>
+<span class="sourceLineNo">336</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> // Save this for when setting default file:// breaks things<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.343"></a>
+<span class="sourceLineNo">344</span> }<a name="line.344"></a>
+<span class="sourceLineNo">345</span> // Every cluster is a local cluster until we start DFS<a name="line.345"></a>
+<span class="sourceLineNo">346</span> // Note that conf could be null, but this.conf will not be<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String dataTestDir = getDataTestDir().toString();<a name="line.347"></a>
+<span class="sourceLineNo">348</span> this.conf.set("fs.defaultFS","file:///");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.349"></a>
+<span class="sourceLineNo">350</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.351"></a>
+<span class="sourceLineNo">352</span> // If the value for random ports isn't set set it to true, thus making<a name="line.352"></a>
+<span class="sourceLineNo">353</span> // tests opt-out for random port assignment<a name="line.353"></a>
+<span class="sourceLineNo">354</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.354"></a>
+<span class="sourceLineNo">355</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.355"></a>
+<span class="sourceLineNo">356</span> }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> /**<a name="line.358"></a>
+<span class="sourceLineNo">359</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @return a normal HBaseTestingUtility<a name="line.360"></a>
+<span class="sourceLineNo">361</span> */<a name="line.361"></a>
+<span class="sourceLineNo">362</span> @Deprecated<a name="line.362"></a>
+<span class="sourceLineNo">363</span> public static HBaseTestingUtility createLocalHTU() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span> return new HBaseTestingUtility();<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span> /**<a name="line.367"></a>
+<span class="sourceLineNo">368</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.368"></a>
+<span class="sourceLineNo">369</span> * @return a normal HBaseTestingUtility<a name="line.369"></a>
+<span class="sourceLineNo">370</span> */<a name="line.370"></a>
+<span class="sourceLineNo">371</span> @Deprecated<a name="line.371"></a>
+<span class="sourceLineNo">372</span> public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return new HBaseTestingUtility(c);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span> /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.377"></a>
+<span class="sourceLineNo">378</span> */<a name="line.378"></a>
+<span class="sourceLineNo">379</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> closeRegionAndWAL((HRegion)r);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.384"></a>
+<span class="sourceLineNo">385</span> */<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> if (r == null) return;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> r.close();<a name="line.388"></a>
+<span class="sourceLineNo">389</span> if (r.getWAL() == null) return;<a name="line.389"></a>
+<span class="sourceLineNo">390</span> r.getWAL().close();<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.394"></a>
+<span class="sourceLineNo">395</span> * you use the returned Configuration since {@link Connection} instances<a name="line.395"></a>
+<span class="sourceLineNo">396</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.396"></a>
+<span class="sourceLineNo">397</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.397"></a>
+<span class="sourceLineNo">398</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.398"></a>
+<span class="sourceLineNo">399</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.399"></a>
+<span class="sourceLineNo">400</span> * make a copy and use that. Do<a name="line.400"></a>
+<span class="sourceLineNo">401</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.401"></a>
+<span class="sourceLineNo">402</span> * @return Instance of Configuration.<a name="line.402"></a>
+<span class="sourceLineNo">403</span> */<a name="line.403"></a>
+<span class="sourceLineNo">404</span> @Override<a name="line.404"></a>
+<span class="sourceLineNo">405</span> public Configuration getConfiguration() {<a name="line.405"></a>
+<span class="sourceLineNo">406</span> return super.getConfiguration();<a name="line.406"></a>
+<span class="sourceLineNo">407</span> }<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> this.hbaseCluster = hbaseCluster;<a name="line.410"></a>
+<span class="sourceLineNo">411</span> }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span> /**<a name="line.413"></a>
+<span class="sourceLineNo">414</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.414"></a>
+<span class="sourceLineNo">415</span> * Give it a random name so can have many concurrent tests running if<a name="line.415"></a>
+<span class="sourceLineNo">416</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.416"></a>
+<span class="sourceLineNo">417</span> * System property, as it's what minidfscluster bases<a name="line.417"></a>
+<span class="sourceLineNo">418</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.418"></a>
+<span class="sourceLineNo">419</span> * instances -- another instance could grab the temporary<a name="line.419"></a>
+<span class="sourceLineNo">420</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> * single instance only is how the minidfscluster works.<a name="line.421"></a>
+<span class="sourceLineNo">422</span> *<a name="line.422"></a>
+<span class="sourceLineNo">423</span> * We also create the underlying directory for<a name="line.423"></a>
+<span class="sourceLineNo">424</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.424"></a>
+<span class="sourceLineNo">425</span> * in the conf, and as a system property for hadoop.tmp.dir<a name="line.425"></a>
+<span class="sourceLineNo">426</span> *<a name="line.426"></a>
+<span class="sourceLineNo">427</span> * @return The calculated data test build directory, if newly-created.<a name="line.427"></a>
+<span class="sourceLineNo">428</span> */<a name="line.428"></a>
+<span class="sourceLineNo">429</span> @Override<a name="line.429"></a>
+<span class="sourceLineNo">430</span> protected Path setupDataTestDir() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span> Path testPath = super.setupDataTestDir();<a name="line.431"></a>
+<span class="sourceLineNo">432</span> if (null == testPath) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span> return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span> }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span> createSubDirAndSystemProperty(<a name="line.436"></a>
+<span class="sourceLineNo">437</span> "hadoop.log.dir",<a name="line.437"></a>
+<span class="sourceLineNo">438</span> testPath, "hadoop-log-dir");<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.440"></a>
+<span class="sourceLineNo">441</span> // we want our own value to ensure uniqueness on the same machine<a name="line.441"></a>
+<span class="sourceLineNo">442</span> createSubDirAndSystemProperty(<a name="line.442"></a>
+<span class="sourceLineNo">443</span> "hadoop.tmp.dir",<a name="line.443"></a>
+<span class="sourceLineNo">444</span> testPath, "hadoop-tmp-dir");<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.446"></a>
+<span class="sourceLineNo">447</span> createSubDir(<a name="line.447"></a>
+<span class="sourceLineNo">448</span> "mapreduce.cluster.local.dir",<a name="line.448"></a>
+<span class="sourceLineNo">449</span> testPath, "mapred-local-dir");<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span> return testPath;<a name="line.451"></a>
+<span class="sourceLineNo">452</span> }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private void createSubDirAndSystemProperty(<a name="line.454"></a>
+<span class="sourceLineNo">455</span> String propertyName, Path parent, String subDirName){<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> String sysValue = System.getProperty(propertyName);<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span> if (sysValue != null) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span> // There is already a value set. So we do nothing but hope<a name="line.460"></a>
+<span class="sourceLineNo">461</span> // that there will be no conflicts<a name="line.461"></a>
+<span class="sourceLineNo">462</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.462"></a>
+<span class="sourceLineNo">463</span> sysValue + " so I do NOT create it in " + parent);<a name="line.463"></a>
+<span class="sourceLineNo">464</span> String confValue = conf.get(propertyName);<a name="line.464"></a>
+<span class="sourceLineNo">465</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.465"></a>
+<span class="sourceLineNo">466</span> LOG.warn(<a name="line.466"></a>
+<span class="sourceLineNo">467</span> propertyName + " property value differs in configuration and system: "+<a name="line.467"></a>
+<span class="sourceLineNo">468</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.468"></a>
+<span class="sourceLineNo">469</span> " Erasing configuration value by system value."<a name="line.469"></a>
+<span class="sourceLineNo">470</span> );<a name="line.470"></a>
+<span class="sourceLineNo">471</span> }<a name="line.471"></a>
+<span class="sourceLineNo">472</span> conf.set(propertyName, sysValue);<a name="line.472"></a>
+<span class="sourceLineNo">473</span> } else {<a name="line.473"></a>
+<span class="sourceLineNo">474</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.474"></a>
+<span class="sourceLineNo">475</span> createSubDir(propertyName, parent, subDirName);<a name="line.475"></a>
+<span class="sourceLineNo">476</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.476"></a>
+<span class="sourceLineNo">477</span> }<a name="line.477"></a>
+<span class="sourceLineNo">478</span> }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span> /**<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.481"></a>
+<span class="sourceLineNo">482</span> * for the test filesystem by default<a name="line.482"></a>
+<span class="sourceLineNo">483</span> * @see #setupDataTestDirOnTestFS()<a name="line.483"></a>
+<span class="sourceLineNo">484</span> * @see #getTestFileSystem()<a name="line.484"></a>
+<span class="sourceLineNo">485</span> */<a name="line.485"></a>
+<span class="sourceLineNo">486</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span> FileSystem fs = getTestFileSystem();<a name="line.487"></a>
+<span class="sourceLineNo">488</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.488"></a>
+<span class="sourceLineNo">489</span> }<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span> /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span> * @return META table descriptor<a name="line.492"></a>
+<span class="sourceLineNo">493</span> * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.493"></a>
+<span class="sourceLineNo">494</span> * use {@link #getMetaTableDescriptorBuilder()}<a name="line.494"></a>
+<span class="sourceLineNo">495</span> */<a name="line.495"></a>
+<span class="sourceLineNo">496</span> @Deprecated<a name="line.496"></a>
+<span class="sourceLineNo">497</span> public HTableDescriptor getMetaTableDescriptor() {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span> /**<a name="line.501"></a>
+<span class="sourceLineNo">502</span> * @return META table descriptor<a name="line.502"></a>
+<span class="sourceLineNo">503</span> */<a name="line.503"></a>
+<span class="sourceLineNo">504</span> public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.504"></a>
+<span class="sourceLineNo">505</span> try {<a name="line.505"></a>
+<span class="sourceLineNo">506</span> return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.506"></a>
+<span class="sourceLineNo">507</span> } catch (IOException e) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span> throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.508"></a>
+<span class="sourceLineNo">509</span> }<a name="line.509"></a>
+<span class="sourceLineNo">510</span> }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> /**<a name="line.512"></a>
+<span class="sourceLineNo">513</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.513"></a>
+<span class="sourceLineNo">514</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.514"></a>
+<span class="sourceLineNo">515</span> * if the test relies on it.<a name="line.515"></a>
+<span class="sourceLineNo">516</span> * @return a unique path in the test filesystem<a name="line.516"></a>
+<span class="sourceLineNo">517</span> */<a name="line.517"></a>
+<span class="sourceLineNo">518</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.518"></a>
+<span class="sourceLineNo">519</span> if (dataTestDirOnTestFS == null) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span> setupDataTestDirOnTestFS();<a name="line.520"></a>
+<span class="sourceLineNo">521</span> }<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span> return dataTestDirOnTestFS;<a name="line.523"></a>
+<span class="sourceLineNo">524</span> }<a name="line.524"></a>
+<span class="sourceLineNo">525</span><a name="line.525"></a>
+<span class="sourceLineNo">526</span> /**<a name="line.526"></a>
+<span class="sourceLineNo">527</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.527"></a>
+<span class="sourceLineNo">528</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.528"></a>
+<span class="sourceLineNo">529</span> * if the test relies on it.<a name="line.529"></a>
+<span class="sourceLineNo">530</span> * @return a unique path in the test filesystem<a name="line.530"></a>
+<span class="sourceLineNo">531</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.531"></a>
+<span class="sourceLineNo">532</span> */<a name="line.532"></a>
+<span class="sourceLineNo">533</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.534"></a>
+<span class="sourceLineNo">535</span> }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span> /**<a name="line.537"><
<TRUNCATED>
[19/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
index 688bd4e..37bf508 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
@@ -589,1651 +589,1649 @@
<span class="sourceLineNo">581</span> LOG.debug("Loading {}", proc);<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span> Long rootProcId = getRootProcedureId(proc);<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (rootProcId == null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.585"></a>
-<span class="sourceLineNo">586</span> scheduler.addBack(proc);<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (proc.hasParent()) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.591"></a>
-<span class="sourceLineNo">592</span> // corrupted procedures are handled later at step 3<a name="line.592"></a>
-<span class="sourceLineNo">593</span> if (parent != null && !proc.isFinished()) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> parent.incChildrenLatch();<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.598"></a>
-<span class="sourceLineNo">599</span> procStack.loadStack(proc);<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span> proc.setRootProcId(rootProcId);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> switch (proc.getState()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> case RUNNABLE:<a name="line.603"></a>
-<span class="sourceLineNo">604</span> runnableList.add(proc);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> break;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> case WAITING:<a name="line.606"></a>
-<span class="sourceLineNo">607</span> waitingList.add(proc);<a name="line.607"></a>
-<span class="sourceLineNo">608</span> break;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> case WAITING_TIMEOUT:<a name="line.609"></a>
-<span class="sourceLineNo">610</span> waitingTimeoutList.add(proc);<a name="line.610"></a>
-<span class="sourceLineNo">611</span> break;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> case FAILED:<a name="line.612"></a>
-<span class="sourceLineNo">613</span> failedList.add(proc);<a name="line.613"></a>
-<span class="sourceLineNo">614</span> break;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> case ROLLEDBACK:<a name="line.615"></a>
-<span class="sourceLineNo">616</span> case INITIALIZING:<a name="line.616"></a>
-<span class="sourceLineNo">617</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> LOG.error(msg);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throw new UnsupportedOperationException(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> default:<a name="line.620"></a>
-<span class="sourceLineNo">621</span> break;<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> // 4. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> waitingList.forEach(proc -> {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> if (!proc.hasChildren()) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> // Normally, WAITING procedures should be waken by its children.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> // But, there is a case that, all the children are successful and before<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // they can wake up their parent procedure, the master was killed.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // are not loaded because of their SUCCESS state.<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // So we need to continue to run this WAITING procedure. But before<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // will throw:<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.637"></a>
-<span class="sourceLineNo">638</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> runnableList.add(proc);<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span> });<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span> // 5. Push the procedures to the timeout executor<a name="line.643"></a>
-<span class="sourceLineNo">644</span> waitingTimeoutList.forEach(proc -> {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> proc.afterReplay(getEnvironment());<a name="line.645"></a>
-<span class="sourceLineNo">646</span> timeoutExecutor.add(proc);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> });<a name="line.647"></a>
-<span class="sourceLineNo">648</span> // 6. restore locks<a name="line.648"></a>
-<span class="sourceLineNo">649</span> restoreLocks();<a name="line.649"></a>
-<span class="sourceLineNo">650</span> // 7. Push the procedure to the scheduler<a name="line.650"></a>
-<span class="sourceLineNo">651</span> failedList.forEach(scheduler::addBack);<a name="line.651"></a>
-<span class="sourceLineNo">652</span> runnableList.forEach(p -> {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> p.afterReplay(getEnvironment());<a name="line.653"></a>
-<span class="sourceLineNo">654</span> if (!p.hasParent()) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.655"></a>
-<span class="sourceLineNo">656</span> }<a name="line.656"></a>
-<span class="sourceLineNo">657</span> scheduler.addBack(p);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> });<a name="line.658"></a>
-<span class="sourceLineNo">659</span> }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span> /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.662"></a>
-<span class="sourceLineNo">663</span> * <p/><a name="line.663"></a>
-<span class="sourceLineNo">664</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.664"></a>
-<span class="sourceLineNo">665</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.665"></a>
-<span class="sourceLineNo">666</span> * pending and in-progress procedures.<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * @param numThreads number of threads available for procedure execution.<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * is found on replay. otherwise false.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> // We have numThreads executor + one timer thread used for timing out<a name="line.672"></a>
-<span class="sourceLineNo">673</span> // procedures and triggering periodic procedures.<a name="line.673"></a>
-<span class="sourceLineNo">674</span> this.corePoolSize = numThreads;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> this.maxPoolSize = 10 * numThreads;<a name="line.675"></a>
-<span class="sourceLineNo">676</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.676"></a>
-<span class="sourceLineNo">677</span> corePoolSize, maxPoolSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.679"></a>
-<span class="sourceLineNo">680</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span> // Create the workers<a name="line.682"></a>
-<span class="sourceLineNo">683</span> workerId.set(0);<a name="line.683"></a>
-<span class="sourceLineNo">684</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.684"></a>
-<span class="sourceLineNo">685</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">584</span> // The orphan procedures will be passed to handleCorrupted, so add an assert here<a name="line.584"></a>
+<span class="sourceLineNo">585</span> assert rootProcId != null;<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (proc.hasParent()) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.588"></a>
+<span class="sourceLineNo">589</span> if (parent != null && !proc.isFinished()) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> parent.incChildrenLatch();<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> procStack.loadStack(proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span> proc.setRootProcId(rootProcId);<a name="line.597"></a>
+<span class="sourceLineNo">598</span> switch (proc.getState()) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> case RUNNABLE:<a name="line.599"></a>
+<span class="sourceLineNo">600</span> runnableList.add(proc);<a name="line.600"></a>
+<span class="sourceLineNo">601</span> break;<a name="line.601"></a>
+<span class="sourceLineNo">602</span> case WAITING:<a name="line.602"></a>
+<span class="sourceLineNo">603</span> waitingList.add(proc);<a name="line.603"></a>
+<span class="sourceLineNo">604</span> break;<a name="line.604"></a>
+<span class="sourceLineNo">605</span> case WAITING_TIMEOUT:<a name="line.605"></a>
+<span class="sourceLineNo">606</span> waitingTimeoutList.add(proc);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> break;<a name="line.607"></a>
+<span class="sourceLineNo">608</span> case FAILED:<a name="line.608"></a>
+<span class="sourceLineNo">609</span> failedList.add(proc);<a name="line.609"></a>
+<span class="sourceLineNo">610</span> break;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> case ROLLEDBACK:<a name="line.611"></a>
+<span class="sourceLineNo">612</span> case INITIALIZING:<a name="line.612"></a>
+<span class="sourceLineNo">613</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.613"></a>
+<span class="sourceLineNo">614</span> LOG.error(msg);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> throw new UnsupportedOperationException(msg);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> default:<a name="line.616"></a>
+<span class="sourceLineNo">617</span> break;<a name="line.617"></a>
+<span class="sourceLineNo">618</span> }<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span> // 3. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.621"></a>
+<span class="sourceLineNo">622</span> waitingList.forEach(proc -> {<a name="line.622"></a>
+<span class="sourceLineNo">623</span> if (!proc.hasChildren()) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // Normally, WAITING procedures should be waken by its children.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // But, there is a case that, all the children are successful and before<a name="line.625"></a>
+<span class="sourceLineNo">626</span> // they can wake up their parent procedure, the master was killed.<a name="line.626"></a>
+<span class="sourceLineNo">627</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.627"></a>
+<span class="sourceLineNo">628</span> // are not loaded because of their SUCCESS state.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // So we need to continue to run this WAITING procedure. But before<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // will throw:<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.633"></a>
+<span class="sourceLineNo">634</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> runnableList.add(proc);<a name="line.635"></a>
+<span class="sourceLineNo">636</span> } else {<a name="line.636"></a>
+<span class="sourceLineNo">637</span> proc.afterReplay(getEnvironment());<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span> });<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span> // 4. Push the procedures to the timeout executor<a name="line.641"></a>
+<span class="sourceLineNo">642</span> waitingTimeoutList.forEach(proc -> {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> proc.afterReplay(getEnvironment());<a name="line.643"></a>
+<span class="sourceLineNo">644</span> timeoutExecutor.add(proc);<a name="line.644"></a>
+<span class="sourceLineNo">645</span> });<a name="line.645"></a>
+<span class="sourceLineNo">646</span> // 5. restore locks<a name="line.646"></a>
+<span class="sourceLineNo">647</span> restoreLocks();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> // 6. Push the procedure to the scheduler<a name="line.648"></a>
+<span class="sourceLineNo">649</span> failedList.forEach(scheduler::addBack);<a name="line.649"></a>
+<span class="sourceLineNo">650</span> runnableList.forEach(p -> {<a name="line.650"></a>
+<span class="sourceLineNo">651</span> p.afterReplay(getEnvironment());<a name="line.651"></a>
+<span class="sourceLineNo">652</span> if (!p.hasParent()) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> scheduler.addBack(p);<a name="line.655"></a>
+<span class="sourceLineNo">656</span> });<a name="line.656"></a>
+<span class="sourceLineNo">657</span> }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span> /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.660"></a>
+<span class="sourceLineNo">661</span> * <p/><a name="line.661"></a>
+<span class="sourceLineNo">662</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.662"></a>
+<span class="sourceLineNo">663</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.663"></a>
+<span class="sourceLineNo">664</span> * pending and in-progress procedures.<a name="line.664"></a>
+<span class="sourceLineNo">665</span> * @param numThreads number of threads available for procedure execution.<a name="line.665"></a>
+<span class="sourceLineNo">666</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.666"></a>
+<span class="sourceLineNo">667</span> * is found on replay. otherwise false.<a name="line.667"></a>
+<span class="sourceLineNo">668</span> */<a name="line.668"></a>
+<span class="sourceLineNo">669</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> // We have numThreads executor + one timer thread used for timing out<a name="line.670"></a>
+<span class="sourceLineNo">671</span> // procedures and triggering periodic procedures.<a name="line.671"></a>
+<span class="sourceLineNo">672</span> this.corePoolSize = numThreads;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> this.maxPoolSize = 10 * numThreads;<a name="line.673"></a>
+<span class="sourceLineNo">674</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.674"></a>
+<span class="sourceLineNo">675</span> corePoolSize, maxPoolSize);<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.677"></a>
+<span class="sourceLineNo">678</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span> // Create the workers<a name="line.680"></a>
+<span class="sourceLineNo">681</span> workerId.set(0);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.682"></a>
+<span class="sourceLineNo">683</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> long st, et;<a name="line.687"></a>
<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> long st, et;<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> // Acquire the store lease.<a name="line.691"></a>
-<span class="sourceLineNo">692</span> st = System.nanoTime();<a name="line.692"></a>
-<span class="sourceLineNo">693</span> store.recoverLease();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> et = System.nanoTime();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.695"></a>
-<span class="sourceLineNo">696</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span> // start the procedure scheduler<a name="line.698"></a>
-<span class="sourceLineNo">699</span> scheduler.start();<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> // TODO: Split in two steps.<a name="line.701"></a>
-<span class="sourceLineNo">702</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.702"></a>
-<span class="sourceLineNo">703</span> // The first one will make sure that we have the latest id,<a name="line.703"></a>
-<span class="sourceLineNo">704</span> // so we can start the threads and accept new procedures.<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // The second step will do the actual load of old procedures.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> st = System.nanoTime();<a name="line.706"></a>
-<span class="sourceLineNo">707</span> load(abortOnCorruption);<a name="line.707"></a>
-<span class="sourceLineNo">708</span> et = System.nanoTime();<a name="line.708"></a>
-<span class="sourceLineNo">709</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.709"></a>
-<span class="sourceLineNo">710</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.710"></a>
-<span class="sourceLineNo">711</span> }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></a>
-<span class="sourceLineNo">713</span> /**<a name="line.713"></a>
-<span class="sourceLineNo">714</span> * Start the workers.<a name="line.714"></a>
-<span class="sourceLineNo">715</span> */<a name="line.715"></a>
-<span class="sourceLineNo">716</span> public void startWorkers() throws IOException {<a name="line.716"></a>
-<span class="sourceLineNo">717</span> if (!running.compareAndSet(false, true)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Already running");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span> // Start the executors. Here we must have the lastProcId set.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.722"></a>
-<span class="sourceLineNo">723</span> timeoutExecutor.start();<a name="line.723"></a>
-<span class="sourceLineNo">724</span> for (WorkerThread worker: workerThreads) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span> worker.start();<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> // Internal chores<a name="line.728"></a>
-<span class="sourceLineNo">729</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span> // Add completed cleaner chore<a name="line.731"></a>
-<span class="sourceLineNo">732</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.732"></a>
-<span class="sourceLineNo">733</span> }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span> public void stop() {<a name="line.735"></a>
-<span class="sourceLineNo">736</span> if (!running.getAndSet(false)) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span> return;<a name="line.737"></a>
-<span class="sourceLineNo">738</span> }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span> LOG.info("Stopping");<a name="line.740"></a>
-<span class="sourceLineNo">741</span> scheduler.stop();<a name="line.741"></a>
-<span class="sourceLineNo">742</span> timeoutExecutor.sendStopSignal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> @VisibleForTesting<a name="line.745"></a>
-<span class="sourceLineNo">746</span> public void join() {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> assert !isRunning() : "expected not running";<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span> // stop the timeout executor<a name="line.749"></a>
-<span class="sourceLineNo">750</span> timeoutExecutor.awaitTermination();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span> // stop the worker threads<a name="line.752"></a>
-<span class="sourceLineNo">753</span> for (WorkerThread worker: workerThreads) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span> worker.awaitTermination();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span> // Destroy the Thread Group for the executors<a name="line.757"></a>
-<span class="sourceLineNo">758</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.758"></a>
-<span class="sourceLineNo">759</span> try {<a name="line.759"></a>
-<span class="sourceLineNo">760</span> threadGroup.destroy();<a name="line.760"></a>
-<span class="sourceLineNo">761</span> } catch (IllegalThreadStateException e) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.threadGroup, e.getMessage());<a name="line.763"></a>
-<span class="sourceLineNo">764</span> // This dumps list of threads on STDOUT.<a name="line.764"></a>
-<span class="sourceLineNo">765</span> this.threadGroup.list();<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span> // reset the in-memory state for testing<a name="line.768"></a>
-<span class="sourceLineNo">769</span> completed.clear();<a name="line.769"></a>
-<span class="sourceLineNo">770</span> rollbackStack.clear();<a name="line.770"></a>
-<span class="sourceLineNo">771</span> procedures.clear();<a name="line.771"></a>
-<span class="sourceLineNo">772</span> nonceKeysToProcIdsMap.clear();<a name="line.772"></a>
-<span class="sourceLineNo">773</span> scheduler.clear();<a name="line.773"></a>
-<span class="sourceLineNo">774</span> lastProcId.set(-1);<a name="line.774"></a>
-<span class="sourceLineNo">775</span> }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span> public void refreshConfiguration(final Configuration conf) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span> this.conf = conf;<a name="line.778"></a>
-<span class="sourceLineNo">779</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.779"></a>
-<span class="sourceLineNo">780</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span> }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">689</span> // Acquire the store lease.<a name="line.689"></a>
+<span class="sourceLineNo">690</span> st = System.nanoTime();<a name="line.690"></a>
+<span class="sourceLineNo">691</span> store.recoverLease();<a name="line.691"></a>
+<span class="sourceLineNo">692</span> et = System.nanoTime();<a name="line.692"></a>
+<span class="sourceLineNo">693</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.693"></a>
+<span class="sourceLineNo">694</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> // start the procedure scheduler<a name="line.696"></a>
+<span class="sourceLineNo">697</span> scheduler.start();<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> // TODO: Split in two steps.<a name="line.699"></a>
+<span class="sourceLineNo">700</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.700"></a>
+<span class="sourceLineNo">701</span> // The first one will make sure that we have the latest id,<a name="line.701"></a>
+<span class="sourceLineNo">702</span> // so we can start the threads and accept new procedures.<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // The second step will do the actual load of old procedures.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> st = System.nanoTime();<a name="line.704"></a>
+<span class="sourceLineNo">705</span> load(abortOnCorruption);<a name="line.705"></a>
+<span class="sourceLineNo">706</span> et = System.nanoTime();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.707"></a>
+<span class="sourceLineNo">708</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.708"></a>
+<span class="sourceLineNo">709</span> }<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span> /**<a name="line.711"></a>
+<span class="sourceLineNo">712</span> * Start the workers.<a name="line.712"></a>
+<span class="sourceLineNo">713</span> */<a name="line.713"></a>
+<span class="sourceLineNo">714</span> public void startWorkers() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span> if (!running.compareAndSet(false, true)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Already running");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> return;<a name="line.717"></a>
+<span class="sourceLineNo">718</span> }<a name="line.718"></a>
+<span class="sourceLineNo">719</span> // Start the executors. Here we must have the lastProcId set.<a name="line.719"></a>
+<span class="sourceLineNo">720</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.720"></a>
+<span class="sourceLineNo">721</span> timeoutExecutor.start();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (WorkerThread worker: workerThreads) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> worker.start();<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span> // Internal chores<a name="line.726"></a>
+<span class="sourceLineNo">727</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.727"></a>
+<span class="sourceLineNo">728</span><a name="line.728"></a>
+<span class="sourceLineNo">729</span> // Add completed cleaner chore<a name="line.729"></a>
+<span class="sourceLineNo">730</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.730"></a>
+<span class="sourceLineNo">731</span> }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span> public void stop() {<a name="line.733"></a>
+<span class="sourceLineNo">734</span> if (!running.getAndSet(false)) {<a name="line.734"></a>
+<span class="sourceLineNo">735</span> return;<a name="line.735"></a>
+<span class="sourceLineNo">736</span> }<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span> LOG.info("Stopping");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> scheduler.stop();<a name="line.739"></a>
+<span class="sourceLineNo">740</span> timeoutExecutor.sendStopSignal();<a name="line.740"></a>
+<span class="sourceLineNo">741</span> }<a name="line.741"></a>
+<span class="sourceLineNo">742</span><a name="line.742"></a>
+<span class="sourceLineNo">743</span> @VisibleForTesting<a name="line.743"></a>
+<span class="sourceLineNo">744</span> public void join() {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> assert !isRunning() : "expected not running";<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span> // stop the timeout executor<a name="line.747"></a>
+<span class="sourceLineNo">748</span> timeoutExecutor.awaitTermination();<a name="line.748"></a>
+<span class="sourceLineNo">749</span><a name="line.749"></a>
+<span class="sourceLineNo">750</span> // stop the worker threads<a name="line.750"></a>
+<span class="sourceLineNo">751</span> for (WorkerThread worker: workerThreads) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span> worker.awaitTermination();<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> // Destroy the Thread Group for the executors<a name="line.755"></a>
+<span class="sourceLineNo">756</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> try {<a name="line.757"></a>
+<span class="sourceLineNo">758</span> threadGroup.destroy();<a name="line.758"></a>
+<span class="sourceLineNo">759</span> } catch (IllegalThreadStateException e) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.threadGroup, e.getMessage());<a name="line.761"></a>
+<span class="sourceLineNo">762</span> // This dumps list of threads on STDOUT.<a name="line.762"></a>
+<span class="sourceLineNo">763</span> this.threadGroup.list();<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span><a name="line.765"></a>
+<span class="sourceLineNo">766</span> // reset the in-memory state for testing<a name="line.766"></a>
+<span class="sourceLineNo">767</span> completed.clear();<a name="line.767"></a>
+<span class="sourceLineNo">768</span> rollbackStack.clear();<a name="line.768"></a>
+<span class="sourceLineNo">769</span> procedures.clear();<a name="line.769"></a>
+<span class="sourceLineNo">770</span> nonceKeysToProcIdsMap.clear();<a name="line.770"></a>
+<span class="sourceLineNo">771</span> scheduler.clear();<a name="line.771"></a>
+<span class="sourceLineNo">772</span> lastProcId.set(-1);<a name="line.772"></a>
+<span class="sourceLineNo">773</span> }<a name="line.773"></a>
+<span class="sourceLineNo">774</span><a name="line.774"></a>
+<span class="sourceLineNo">775</span> public void refreshConfiguration(final Configuration conf) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span> this.conf = conf;<a name="line.776"></a>
+<span class="sourceLineNo">777</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.777"></a>
+<span class="sourceLineNo">778</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.778"></a>
+<span class="sourceLineNo">779</span> }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span> // ==========================================================================<a name="line.781"></a>
+<span class="sourceLineNo">782</span> // Accessors<a name="line.782"></a>
<span class="sourceLineNo">783</span> // ==========================================================================<a name="line.783"></a>
-<span class="sourceLineNo">784</span> // Accessors<a name="line.784"></a>
-<span class="sourceLineNo">785</span> // ==========================================================================<a name="line.785"></a>
-<span class="sourceLineNo">786</span> public boolean isRunning() {<a name="line.786"></a>
-<span class="sourceLineNo">787</span> return running.get();<a name="line.787"></a>
-<span class="sourceLineNo">788</span> }<a name="line.788"></a>
-<span class="sourceLineNo">789</span><a name="line.789"></a>
-<span class="sourceLineNo">790</span> /**<a name="line.790"></a>
-<span class="sourceLineNo">791</span> * @return the current number of worker threads.<a name="line.791"></a>
-<span class="sourceLineNo">792</span> */<a name="line.792"></a>
-<span class="sourceLineNo">793</span> public int getWorkerThreadCount() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span> return workerThreads.size();<a name="line.794"></a>
-<span class="sourceLineNo">795</span> }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span> /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span> * @return the core pool size settings.<a name="line.798"></a>
-<span class="sourceLineNo">799</span> */<a name="line.799"></a>
-<span class="sourceLineNo">800</span> public int getCorePoolSize() {<a name="line.800"></a>
-<span class="sourceLineNo">801</span> return corePoolSize;<a name="line.801"></a>
-<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span> public int getActiveExecutorCount() {<a name="line.804"></a>
-<span class="sourceLineNo">805</span> return activeExecutorCount.get();<a name="line.805"></a>
-<span class="sourceLineNo">806</span> }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span> public TEnvironment getEnvironment() {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.environment;<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> public ProcedureStore getStore() {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> return this.store;<a name="line.813"></a>
-<span class="sourceLineNo">814</span> }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span> ProcedureScheduler getScheduler() {<a name="line.816"></a>
-<span class="sourceLineNo">817</span> return scheduler;<a name="line.817"></a>
-<span class="sourceLineNo">818</span> }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.821"></a>
-<span class="sourceLineNo">822</span> this.scheduler.signalAll();<a name="line.822"></a>
-<span class="sourceLineNo">823</span> }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
+<span class="sourceLineNo">784</span> public boolean isRunning() {<a name="line.784"></a>
+<span class="sourceLineNo">785</span> return running.get();<a name="line.785"></a>
+<span class="sourceLineNo">786</span> }<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span> /**<a name="line.788"></a>
+<span class="sourceLineNo">789</span> * @return the current number of worker threads.<a name="line.789"></a>
+<span class="sourceLineNo">790</span> */<a name="line.790"></a>
+<span class="sourceLineNo">791</span> public int getWorkerThreadCount() {<a name="line.791"></a>
+<span class="sourceLineNo">792</span> return workerThreads.size();<a name="line.792"></a>
+<span class="sourceLineNo">793</span> }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span> * @return the core pool size settings.<a name="line.796"></a>
+<span class="sourceLineNo">797</span> */<a name="line.797"></a>
+<span class="sourceLineNo">798</span> public int getCorePoolSize() {<a name="line.798"></a>
+<span class="sourceLineNo">799</span> return corePoolSize;<a name="line.799"></a>
+<span class="sourceLineNo">800</span> }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span> public int getActiveExecutorCount() {<a name="line.802"></a>
+<span class="sourceLineNo">803</span> return activeExecutorCount.get();<a name="line.803"></a>
+<span class="sourceLineNo">804</span> }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span> public TEnvironment getEnvironment() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.environment;<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> public ProcedureStore getStore() {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> return this.store;<a name="line.811"></a>
+<span class="sourceLineNo">812</span> }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span> ProcedureScheduler getScheduler() {<a name="line.814"></a>
+<span class="sourceLineNo">815</span> return scheduler;<a name="line.815"></a>
+<span class="sourceLineNo">816</span> }<a name="line.816"></a>
+<span class="sourceLineNo">817</span><a name="line.817"></a>
+<span class="sourceLineNo">818</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.819"></a>
+<span class="sourceLineNo">820</span> this.scheduler.signalAll();<a name="line.820"></a>
+<span class="sourceLineNo">821</span> }<a name="line.821"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span><a name="line.826"></a>
+<span class="sourceLineNo">827</span> // ==========================================================================<a name="line.827"></a>
+<span class="sourceLineNo">828</span> // Submit/Remove Chores<a name="line.828"></a>
<span class="sourceLineNo">829</span> // ==========================================================================<a name="line.829"></a>
-<span class="sourceLineNo">830</span> // Submit/Remove Chores<a name="line.830"></a>
-<span class="sourceLineNo">831</span> // ==========================================================================<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span> * Add a chore procedure to the executor<a name="line.834"></a>
-<span class="sourceLineNo">835</span> * @param chore the chore to add<a name="line.835"></a>
-<span class="sourceLineNo">836</span> */<a name="line.836"></a>
-<span class="sourceLineNo">837</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.837"></a>
-<span class="sourceLineNo">838</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.838"></a>
-<span class="sourceLineNo">839</span> timeoutExecutor.add(chore);<a name="line.839"></a>
-<span class="sourceLineNo">840</span> }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span> /**<a name="line.842"></a>
-<span class="sourceLineNo">843</span> * Remove a chore procedure from the executor<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * @param chore the chore to remove<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return whether the chore is removed, or it will be removed later<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> chore.setState(ProcedureState.SUCCESS);<a name="line.848"></a>
-<span class="sourceLineNo">849</span> return timeoutExecutor.remove(chore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span> }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span> /**<a name="line.831"></a>
+<span class="sourceLineNo">832</span> * Add a chore procedure to the executor<a name="line.832"></a>
+<span class="sourceLineNo">833</span> * @param chore the chore to add<a name="line.833"></a>
+<span class="sourceLineNo">834</span> */<a name="line.834"></a>
+<span class="sourceLineNo">835</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.835"></a>
+<span class="sourceLineNo">836</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.836"></a>
+<span class="sourceLineNo">837</span> timeoutExecutor.add(chore);<a name="line.837"></a>
+<span class="sourceLineNo">838</span> }<a name="line.838"></a>
+<span class="sourceLineNo">839</span><a name="line.839"></a>
+<span class="sourceLineNo">840</span> /**<a name="line.840"></a>
+<span class="sourceLineNo">841</span> * Remove a chore procedure from the executor<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * @param chore the chore to remove<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return whether the chore is removed, or it will be removed later<a name="line.843"></a>
+<span class="sourceLineNo">844</span> */<a name="line.844"></a>
+<span class="sourceLineNo">845</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span> chore.setState(ProcedureState.SUCCESS);<a name="line.846"></a>
+<span class="sourceLineNo">847</span> return timeoutExecutor.remove(chore);<a name="line.847"></a>
+<span class="sourceLineNo">848</span> }<a name="line.848"></a>
+<span class="sourceLineNo">849</span><a name="line.849"></a>
+<span class="sourceLineNo">850</span> // ==========================================================================<a name="line.850"></a>
+<span class="sourceLineNo">851</span> // Nonce Procedure helpers<a name="line.851"></a>
<span class="sourceLineNo">852</span> // ==========================================================================<a name="line.852"></a>
-<span class="sourceLineNo">853</span> // Nonce Procedure helpers<a name="line.853"></a>
-<span class="sourceLineNo">854</span> // ==========================================================================<a name="line.854"></a>
-<span class="sourceLineNo">855</span> /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.856"></a>
-<span class="sourceLineNo">857</span> * @param nonceGroup<a name="line.857"></a>
-<span class="sourceLineNo">858</span> * @param nonce<a name="line.858"></a>
-<span class="sourceLineNo">859</span> * @return the generated NonceKey<a name="line.859"></a>
-<span class="sourceLineNo">860</span> */<a name="line.860"></a>
-<span class="sourceLineNo">861</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.862"></a>
-<span class="sourceLineNo">863</span> }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span> /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.866"></a>
-<span class="sourceLineNo">867</span> * A procId will be reserved and on submitProcedure(),<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.868"></a>
-<span class="sourceLineNo">869</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.870"></a>
-<span class="sourceLineNo">871</span> * and submit the procedure.<a name="line.871"></a>
-<span class="sourceLineNo">872</span> *<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.873"></a>
-<span class="sourceLineNo">874</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.874"></a>
-<span class="sourceLineNo">875</span> */<a name="line.875"></a>
-<span class="sourceLineNo">876</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> if (nonceKey == null) return -1;<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span> // check if we have already a Reserved ID for the nonce<a name="line.879"></a>
-<span class="sourceLineNo">880</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (oldProcId == null) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.882"></a>
-<span class="sourceLineNo">883</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.883"></a>
-<span class="sourceLineNo">884</span> final long newProcId = nextProcId();<a name="line.884"></a>
-<span class="sourceLineNo">885</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> if (oldProcId == null) return -1;<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span><a name="line.888"></a>
-<span class="sourceLineNo">889</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.889"></a>
-<span class="sourceLineNo">890</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.890"></a>
-<span class="sourceLineNo">891</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.891"></a>
-<span class="sourceLineNo">892</span> while (isRunning() &&<a name="line.892"></a>
-<span class="sourceLineNo">893</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.893"></a>
-<span class="sourceLineNo">894</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> if (traceEnabled) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.896"></a>
-<span class="sourceLineNo">897</span> }<a name="line.897"></a>
-<span class="sourceLineNo">898</span> Threads.sleep(100);<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span> return oldProcId.longValue();<a name="line.900"></a>
-<span class="sourceLineNo">901</span> }<a name="line.901"></a>
-<span class="sourceLineNo">902</span><a name="line.902"></a>
-<span class="sourceLineNo">903</span> /**<a name="line.903"></a>
-<span class="sourceLineNo">904</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.904"></a>
-<span class="sourceLineNo">905</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.905"></a>
-<span class="sourceLineNo">906</span> */<a name="line.906"></a>
-<span class="sourceLineNo">907</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.907"></a>
-<span class="sourceLineNo">908</span> if (nonceKey == null) return;<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.910"></a>
-<span class="sourceLineNo">911</span> if (procId == null) return;<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span> // if the procedure was not submitted, remove the nonce<a name="line.913"></a>
-<span class="sourceLineNo">914</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.915"></a>
-<span class="sourceLineNo">916</span> }<a name="line.916"></a>
-<span class="sourceLineNo">917</span> }<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.919"></a>
-<span class="sourceLineNo">920</span> private String procName;<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span> public FailedProcedure() {<a name="line.922"></a>
-<span class="sourceLineNo">923</span> }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.925"></a>
-<span class="sourceLineNo">926</span> NonceKey nonceKey, IOException exception) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span> this.procName = procName;<a name="line.927"></a>
-<span class="sourceLineNo">928</span> setProcId(procId);<a name="line.928"></a>
-<span class="sourceLineNo">929</span> setState(ProcedureState.ROLLEDBACK);<a name="line.929"></a>
-<span class="sourceLineNo">930</span> setOwner(owner);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> setNonceKey(nonceKey);<a name="line.931"></a>
-<span class="sourceLineNo">932</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.932"></a>
-<span class="sourceLineNo">933</span> setSubmittedTime(currentTime);<a name="line.933"></a>
-<span class="sourceLineNo">934</span> setLastUpdate(currentTime);<a name="line.934"></a>
-<span class="sourceLineNo">935</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.935"></a>
-<span class="sourceLineNo">936</span> }<a name="line.936"></a>
-<span class="sourceLineNo">937</span><a name="line.937"></a>
-<span class="sourceLineNo">938</span> @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span> public String getProcName() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span> return procName;<a name="line.940"></a>
-<span class="sourceLineNo">941</span> }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span> @Override<a name="line.943"></a>
-<span class="sourceLineNo">944</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.944"></a>
-<span class="sourceLineNo">945</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.945"></a>
-<span class="sourceLineNo">946</span> InterruptedException {<a name="line.946"></a>
-<span class="sourceLineNo">947</span> throw new UnsupportedOperationException();<a name="line.947"></a>
-<span class="sourceLineNo">948</span> }<a name="line.948"></a>
-<span class="sourceLineNo">949</span><a name="line.949"></a>
-<span class="sourceLineNo">950</span> @Override<a name="line.950"></a>
-<span class="sourceLineNo">951</span> protected void rollback(TEnvironment env)<a name="line.951"></a>
-<span class="sourceLineNo">952</span> throws IOException, InterruptedException {<a name="line.952"></a>
-<span class="sourceLineNo">953</span> throw new UnsupportedOperationException();<a name="line.953"></a>
-<span class="sourceLineNo">954</span> }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span> @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span> protected boolean abort(TEnvironment env) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span> throw new UnsupportedOperationException();<a name="line.958"></a>
-<span class="sourceLineNo">959</span> }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span> @Override<a name="line.961"></a>
-<span class="sourceLineNo">962</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.962"></a>
-<span class="sourceLineNo">963</span> throws IOException {<a name="line.963"></a>
-<span class="sourceLineNo">964</span> }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span> @Override<a name="line.966"></a>
-<span class="sourceLineNo">967</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.967"></a>
-<span class="sourceLineNo">968</span> throws IOException {<a name="line.968"></a>
-<span class="sourceLineNo">969</span> }<a name="line.969"></a>
-<span class="sourceLineNo">970</span> }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span> /**<a name="line.972"></a>
-<span class="sourceLineNo">973</span> * If the failure failed before submitting it, we may want to give back the<a name="line.973"></a>
-<span class="sourceLineNo">974</span> * same error to the requests with the same nonceKey.<a name="line.974"></a>
-<span class="sourceLineNo">975</span> *<a name="line.975"></a>
-<span class="sourceLineNo">976</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.976"></a>
-<span class="sourceLineNo">977</span> * @param procName name of the procedure, used to inform the user<a name="line.977"></a>
-<span class="sourceLineNo">978</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.978"></a>
-<span class="sourceLineNo">979</span> * @param exception the failure to report to the user<a name="line.979"></a>
-<span class="sourceLineNo">980</span> */<a name="line.980"></a>
-<span class="sourceLineNo">981</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.981"></a>
-<span class="sourceLineNo">982</span> IOException exception) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span> if (nonceKey == null) {<a name="line.983"></a>
-<span class="sourceLineNo">984</span> return;<a name="line.984"></a>
-<span class="sourceLineNo">985</span> }<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.987"></a>
-<span class="sourceLineNo">988</span> if (procId == null || completed.containsKey(procId)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span> return;<a name="line.989"></a>
-<span class="sourceLineNo">990</span> }<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span> Procedure<TEnvironment> proc =<a name="line.992"></a>
-<span class="sourceLineNo">993</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.993"></a>
-<span class="sourceLineNo">994</span><a name="line.994"></a>
-<span class="sourceLineNo">995</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.995"></a>
-<span class="sourceLineNo">996</span> }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">853</span> /**<a name="line.853"></a>
+<span class="sourceLineNo">854</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.854"></a>
+<span class="sourceLineNo">855</span> * @param nonceGroup<a name="line.855"></a>
+<span class="sourceLineNo">856</span> * @param nonce<a name="line.856"></a>
+<span class="sourceLineNo">857</span> * @return the generated NonceKey<a name="line.857"></a>
+<span class="sourceLineNo">858</span> */<a name="line.858"></a>
+<span class="sourceLineNo">859</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.860"></a>
+<span class="sourceLineNo">861</span> }<a name="line.861"></a>
+<span class="sourceLineNo">862</span><a name="line.862"></a>
+<span class="sourceLineNo">863</span> /**<a name="line.863"></a>
+<span class="sourceLineNo">864</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.864"></a>
+<span class="sourceLineNo">865</span> * A procId will be reserved and on submitProcedure(),<a name="line.865"></a>
+<span class="sourceLineNo">866</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.866"></a>
+<span class="sourceLineNo">867</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.867"></a>
+<span class="sourceLineNo">868</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.868"></a>
+<span class="sourceLineNo">869</span> * and submit the procedure.<a name="line.869"></a>
+<span class="sourceLineNo">870</span> *<a name="line.870"></a>
+<span class="sourceLineNo">871</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.871"></a>
+<span class="sourceLineNo">872</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.872"></a>
+<span class="sourceLineNo">873</span> */<a name="line.873"></a>
+<span class="sourceLineNo">874</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.874"></a>
+<span class="sourceLineNo">875</span> if (nonceKey == null) return -1;<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span> // check if we have already a Reserved ID for the nonce<a name="line.877"></a>
+<span class="sourceLineNo">878</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.878"></a>
+<span class="sourceLineNo">879</span> if (oldProcId == null) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.880"></a>
+<span class="sourceLineNo">881</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.881"></a>
+<span class="sourceLineNo">882</span> final long newProcId = nextProcId();<a name="line.882"></a>
+<span class="sourceLineNo">883</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.883"></a>
+<span class="sourceLineNo">884</span> if (oldProcId == null) return -1;<a name="line.884"></a>
+<span class="sourceLineNo">885</span> }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.887"></a>
+<span class="sourceLineNo">888</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.888"></a>
+<span class="sourceLineNo">889</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.889"></a>
+<span class="sourceLineNo">890</span> while (isRunning() &&<a name="line.890"></a>
+<span class="sourceLineNo">891</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.891"></a>
+<span class="sourceLineNo">892</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> if (traceEnabled) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> Threads.sleep(100);<a name="line.896"></a>
+<span class="sourceLineNo">897</span> }<a name="line.897"></a>
+<span class="sourceLineNo">898</span> return oldProcId.longValue();<a name="line.898"></a>
+<span class="sourceLineNo">899</span> }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span> /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.903"></a>
+<span class="sourceLineNo">904</span> */<a name="line.904"></a>
+<span class="sourceLineNo">905</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span> if (nonceKey == null) return;<a name="line.906"></a>
+<span class="sourceLineNo">907</span><a name="line.907"></a>
+<span class="sourceLineNo">908</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.908"></a>
+<span class="sourceLineNo">909</span> if (procId == null) return;<a name="line.909"></a>
+<span class="sourceLineNo">910</span><a name="line.910"></a>
+<span class="sourceLineNo">911</span> // if the procedure was not submitted, remove the nonce<a name="line.911"></a>
+<span class="sourceLineNo">912</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.912"></a>
+<span class="sourceLineNo">913</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.913"></a>
+<span class="sourceLineNo">914</span> }<a name="line.914"></a>
+<span class="sourceLineNo">915</span> }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.917"></a>
+<span class="sourceLineNo">918</span> private String procName;<a name="line.918"></a>
+<span class="sourceLineNo">919</span><a name="line.919"></a>
+<span class="sourceLineNo">920</span> public FailedProcedure() {<a name="line.920"></a>
+<span class="sourceLineNo">921</span> }<a name="line.921"></a>
+<span class="sourceLineNo">922</span><a name="line.922"></a>
+<span class="sourceLineNo">923</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.923"></a>
+<span class="sourceLineNo">924</span> NonceKey nonceKey, IOException exception) {<a name="line.924"></a>
+<span class="sourceLineNo">925</span> this.procName = procName;<a name="line.925"></a>
+<span class="sourceLineNo">926</span> setProcId(procId);<a name="line.926"></a>
+<span class="sourceLineNo">927</span> setState(ProcedureState.ROLLEDBACK);<a name="line.927"></a>
+<span class="sourceLineNo">928</span> setOwner(owner);<a name="line.928"></a>
+<span class="sourceLineNo">929</span> setNonceKey(nonceKey);<a name="line.929"></a>
+<span class="sourceLineNo">930</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.930"></a>
+<span class="sourceLineNo">931</span> setSubmittedTime(currentTime);<a name="line.931"></a>
+<span class="sourceLineNo">932</span> setLastUpdate(currentTime);<a name="line.932"></a>
+<span class="sourceLineNo">933</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.933"></a>
+<span class="sourceLineNo">934</span> }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span> @Override<a name="line.936"></a>
+<span class="sourceLineNo">937</span> public String getProcName() {<a name="line.937"></a>
+<span class="sourceLineNo">938</span> return procName;<a name="line.938"></a>
+<span class="sourceLineNo">939</span> }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span> @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.942"></a>
+<span class="sourceLineNo">943</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.943"></a>
+<span class="sourceLineNo">944</span> InterruptedException {<a name="line.944"></a>
+<span class="sourceLineNo">945</span> throw new UnsupportedOperationException();<a name="line.945"></a>
+<span class="sourceLineNo">946</span> }<a name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span> @Override<a name="line.948"></a>
+<span class="sourceLineNo">949</span> protected void rollback(TEnvironment env)<a name="line.949"></a>
+<span class="sourceLineNo">950</span> throws IOException, InterruptedException {<a name="line.950"></a>
+<span class="sourceLineNo">951</span> throw new UnsupportedOperationException();<a name="line.951"></a>
+<span class="sourceLineNo">952</span> }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span> @Override<a name="line.954"></a>
+<span class="sourceLineNo">955</span> protected boolean abort(TEnvironment env) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span> throw new UnsupportedOperationException();<a name="line.956"></a>
+<span class="sourceLineNo">957</span> }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span> @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.960"></a>
+<span class="sourceLineNo">961</span> throws IOException {<a name="line.961"></a>
+<span class="sourceLineNo">962</span> }<a name="line.962"></a>
+<span class="sourceLineNo">963</span><a name="line.963"></a>
+<span class="sourceLineNo">964</span> @Override<a name="line.964"></a>
+<span class="sourceLineNo">965</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.965"></a>
+<span class="sourceLineNo">966</span> throws IOException {<a name="line.966"></a>
+<span class="sourceLineNo">967</span> }<a name="line.967"></a>
+<span class="sourceLineNo">968</span> }<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span> /**<a name="line.970"></a>
+<span class="sourceLineNo">971</span> * If the failure failed before submitting it, we may want to give back the<a name="line.971"></a>
+<span class="sourceLineNo">972</span> * same error to the requests with the same nonceKey.<a name="line.972"></a>
+<span class="sourceLineNo">973</span> *<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * @param procName name of the procedure, used to inform the user<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * @param exception the failure to report to the user<a name="line.977"></a>
+<span class="sourceLineNo">978</span> */<a name="line.978"></a>
+<span class="sourceLineNo">979</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.979"></a>
+<span class="sourceLineNo">980</span> IOException exception) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span> if (nonceKey == null) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span> return;<a name="line.982"></a>
+<span class="sourceLineNo">983</span> }<a name="line.983"></a>
+<span class="sourceLineNo">984</span><a name="line.984"></a>
+<span class="sourceLineNo">985</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.985"></a>
+<span class="sourceLineNo">986</span> if (procId == null || completed.containsKey(procId)) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span> return;<a name="line.987"></a>
+<span class="sourceLineNo">988</span> }<a name="line.988"></a>
+<span class="sourceLineNo">989</span><a name="line.989"></a>
+<span class="sourceLineNo">990</span> Procedure<TEnvironment> proc =<a name="line.990"></a>
+<span class="sourceLineNo">991</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.991"></a>
+<span class="sourceLineNo">992</span><a name="line.992"></a>
+<span class="sourceLineNo">993</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.993"></a>
+<span class="sourceLineNo">994</span> }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span> // ==========================================================================<a name="line.996"></a>
+<span class="sourceLineNo">997</span> // Submit/Abort Procedure<a name="line.997"></a>
<span class="sourceLineNo">998</span> // ==========================================================================<a name="line.998"></a>
-<span class="sourceLineNo">999</span> // Submit/Abort Procedure<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> // ==========================================================================<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> /**<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> * Add a new root-procedure to the executor.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> * @param proc the new procedure to execute.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> * @return the procedure id, that can be used to monitor the operation<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> */<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> public long submitProcedure(Procedure<TEnvironment> proc) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> return submitProcedure(proc, null);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span><a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> /**<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> * Bypass a procedure. If the procedure is set to bypass, all the logic in<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> * execute/rollback will be ignored and it will return success, whatever.<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> * It is used to recover buggy stuck procedures, releasing the lock resources<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> * and letting other procedures run. Bypassing one procedure (and its ancestors will<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> * be bypassed automatically) may leave the cluster in a middle state, e.g. region<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> * not assigned, or some hdfs files left behind. After getting rid of those stuck procedures,<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> * the operators may have to do some clean up on hdfs or schedule some assign procedures<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> * to let region online. DO AT YOUR OWN RISK.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> * <p><a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> * A procedure can be bypassed only if<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span> * 1. The procedure is in state of RUNNABLE, WAITING, WAITING_TIMEOUT<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> * or it is a root procedure without any child.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * 2. No other worker thread is executing it<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> * 3. No child procedure has been submitted<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> *<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> * <p><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> * If all the requirements are meet, the procedure and its ancestors will be<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> * bypassed and persisted to WAL.<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> *<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span> * <p><a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> * If the procedure is in WAITING state, will set it to RUNNABLE add it to run queue.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> * TODO: What about WAITING_TIMEOUT?<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> * @param pids the procedure id<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> * @param lockWait time to wait lock<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> * @param force if force set to true, we will bypass the procedure even if it is executing.<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> * This is for procedures which can't break out during executing(due to bug, mostly)<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> * In this case, bypassing the procedure is not enough, since it is already stuck<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> * there. We need to restart the master after bypassing, and letting the problematic<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span> * procedure to execute wth bypass=true, so in that condition, the procedure can be<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> * successfully bypassed.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> * @param recursive We will do an expensive search for children of each pid. EXPENSIVE!<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> * @return true if bypass success<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> * @throws IOException IOException<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span> */<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> public List<Boolean> bypassProcedure(List<Long> pids, long lockWait, boolean force,<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span> boolean recursive)<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> throws IOException {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> List<Boolean> result = new ArrayList<Boolean>(pids.size());<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> for(long pid: pids) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span> result.add(bypassProcedure(pid, lockWait, force, recursive));<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> return result;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span> }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> boolean bypassProcedure(long pid, long lockWait, boolean override, boolean recursive)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span> throws IOException {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> Preconditions.checkArgument(lockWait > 0, "lockWait should be positive");<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span> final Procedure<TEnvironment> procedure = getProcedure(pid);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span> if (procedure == null) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> LOG.debug("Procedure pid={} does not exist, skipping bypass", pid);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> return false;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span> }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span><a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> LOG.debug("Begin bypass {} with lockWait={}, override={}, recursive={}",<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span> procedure, lockWait, override, recursive);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> IdLock.Entry lockEntry = procExecutionLock.tryLockEntry(procedure.getProcId(), lockWait);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> if (lockEntry == null && !override) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> LOG.debug("Waited {} ms, but {} is still running, skipping bypass with force={}",<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> lockWait, procedure, override);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> } else if (lockEntry == null) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> LOG.debug("Waited {} ms, but {} is still running, begin bypass with force={}",<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span> lockWait, procedure, override);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // check whether the procedure is already finished<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> if (procedure.isFinished()) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> LOG.debug("{} is already finished, skipping bypass", procedure);<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> return false;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> if (procedure.hasChildren()) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> if (recursive) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> // EXPENSIVE. Checks each live procedure of which there could be many!!!<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span> // Is there another way to get children of a procedure?<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> LOG.info("Recursive bypass on children of pid={}", procedure.getProcId());<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> this.procedures.forEachValue(1 /*Single-threaded*/,<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> // Transformer<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> v -> v.getParentProcId() == procedure.getProcId()? v: null,<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> // Consumer<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span> v -> {<a name="line.1091"></a
<TRUNCATED>
[12/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 8f94fc0..9a5f0c3 100644
--- a/downloads.html
+++ b/downloads.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Apache HBase Downloads</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -461,7 +461,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 35a17c9..6f4f413 100644
--- a/export_control.html
+++ b/export_control.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Export Control
@@ -341,7 +341,7 @@ for more details.</p>
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index f5da520..751cfe4 100644
--- a/index.html
+++ b/index.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Apache HBaseâ„¢ Home</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -421,7 +421,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index c937887..f3d0b15 100644
--- a/integration.html
+++ b/integration.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – CI Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -301,7 +301,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 52a3649..2fa05fb 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Issue Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -298,7 +298,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 24a5645..de43453 100644
--- a/license.html
+++ b/license.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Licenses</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -501,7 +501,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index d5891c6..6a56c16 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Mailing Lists</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -351,7 +351,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index ead9879..c0fea89 100644
--- a/metrics.html
+++ b/metrics.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Apache HBase (TM) Metrics
@@ -469,7 +469,7 @@ export HBASE_REGIONSERVER_OPTS="$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 3442a78..1a08d78 100644
--- a/old_news.html
+++ b/old_news.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Old Apache HBase (TM) News
@@ -450,7 +450,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 474eb99..8ad006a 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Plugin Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -450,7 +450,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 0e81820..ec0e26f 100644
--- a/plugins.html
+++ b/plugins.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Plugins</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -385,7 +385,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index be81279..5b11fc3 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Powered By Apache HBase™</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -779,7 +779,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 9ce248c..f1567c8 100644
--- a/project-info.html
+++ b/project-info.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Information</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -345,7 +345,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 9480254..4a5394b 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Generated Reports</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -315,7 +315,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index c23819e..995e65b 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Summary</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index cef9d98..3ca2b35 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Running Apache HBase (TM) in pseudo-distributed mode
@@ -318,7 +318,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 79ce0ba..dcc4f91 100644
--- a/replication.html
+++ b/replication.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Apache HBase (TM) Replication
@@ -313,7 +313,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index af89f20..8870781 100644
--- a/resources.html
+++ b/resources.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Other Apache HBase (TM) Resources</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index c3707d7..f91245b 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Source Code Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -309,7 +309,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 886d110..8292d2e 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Apache HBase™ Sponsors</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -343,7 +343,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 3941029..b84044d 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Supporting Projects</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -530,7 +530,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 38d5abf..47a6811 100644
--- a/team-list.html
+++ b/team-list.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Team</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -770,7 +770,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
[18/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
index 688bd4e..37bf508 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
@@ -589,1651 +589,1649 @@
<span class="sourceLineNo">581</span> LOG.debug("Loading {}", proc);<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span> Long rootProcId = getRootProcedureId(proc);<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (rootProcId == null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.585"></a>
-<span class="sourceLineNo">586</span> scheduler.addBack(proc);<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (proc.hasParent()) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.591"></a>
-<span class="sourceLineNo">592</span> // corrupted procedures are handled later at step 3<a name="line.592"></a>
-<span class="sourceLineNo">593</span> if (parent != null && !proc.isFinished()) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> parent.incChildrenLatch();<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.598"></a>
-<span class="sourceLineNo">599</span> procStack.loadStack(proc);<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span> proc.setRootProcId(rootProcId);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> switch (proc.getState()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> case RUNNABLE:<a name="line.603"></a>
-<span class="sourceLineNo">604</span> runnableList.add(proc);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> break;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> case WAITING:<a name="line.606"></a>
-<span class="sourceLineNo">607</span> waitingList.add(proc);<a name="line.607"></a>
-<span class="sourceLineNo">608</span> break;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> case WAITING_TIMEOUT:<a name="line.609"></a>
-<span class="sourceLineNo">610</span> waitingTimeoutList.add(proc);<a name="line.610"></a>
-<span class="sourceLineNo">611</span> break;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> case FAILED:<a name="line.612"></a>
-<span class="sourceLineNo">613</span> failedList.add(proc);<a name="line.613"></a>
-<span class="sourceLineNo">614</span> break;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> case ROLLEDBACK:<a name="line.615"></a>
-<span class="sourceLineNo">616</span> case INITIALIZING:<a name="line.616"></a>
-<span class="sourceLineNo">617</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> LOG.error(msg);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throw new UnsupportedOperationException(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> default:<a name="line.620"></a>
-<span class="sourceLineNo">621</span> break;<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> // 4. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> waitingList.forEach(proc -> {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> if (!proc.hasChildren()) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> // Normally, WAITING procedures should be waken by its children.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> // But, there is a case that, all the children are successful and before<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // they can wake up their parent procedure, the master was killed.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // are not loaded because of their SUCCESS state.<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // So we need to continue to run this WAITING procedure. But before<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // will throw:<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.637"></a>
-<span class="sourceLineNo">638</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> runnableList.add(proc);<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span> });<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span> // 5. Push the procedures to the timeout executor<a name="line.643"></a>
-<span class="sourceLineNo">644</span> waitingTimeoutList.forEach(proc -> {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> proc.afterReplay(getEnvironment());<a name="line.645"></a>
-<span class="sourceLineNo">646</span> timeoutExecutor.add(proc);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> });<a name="line.647"></a>
-<span class="sourceLineNo">648</span> // 6. restore locks<a name="line.648"></a>
-<span class="sourceLineNo">649</span> restoreLocks();<a name="line.649"></a>
-<span class="sourceLineNo">650</span> // 7. Push the procedure to the scheduler<a name="line.650"></a>
-<span class="sourceLineNo">651</span> failedList.forEach(scheduler::addBack);<a name="line.651"></a>
-<span class="sourceLineNo">652</span> runnableList.forEach(p -> {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> p.afterReplay(getEnvironment());<a name="line.653"></a>
-<span class="sourceLineNo">654</span> if (!p.hasParent()) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.655"></a>
-<span class="sourceLineNo">656</span> }<a name="line.656"></a>
-<span class="sourceLineNo">657</span> scheduler.addBack(p);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> });<a name="line.658"></a>
-<span class="sourceLineNo">659</span> }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span> /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.662"></a>
-<span class="sourceLineNo">663</span> * <p/><a name="line.663"></a>
-<span class="sourceLineNo">664</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.664"></a>
-<span class="sourceLineNo">665</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.665"></a>
-<span class="sourceLineNo">666</span> * pending and in-progress procedures.<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * @param numThreads number of threads available for procedure execution.<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * is found on replay. otherwise false.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> // We have numThreads executor + one timer thread used for timing out<a name="line.672"></a>
-<span class="sourceLineNo">673</span> // procedures and triggering periodic procedures.<a name="line.673"></a>
-<span class="sourceLineNo">674</span> this.corePoolSize = numThreads;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> this.maxPoolSize = 10 * numThreads;<a name="line.675"></a>
-<span class="sourceLineNo">676</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.676"></a>
-<span class="sourceLineNo">677</span> corePoolSize, maxPoolSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.679"></a>
-<span class="sourceLineNo">680</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span> // Create the workers<a name="line.682"></a>
-<span class="sourceLineNo">683</span> workerId.set(0);<a name="line.683"></a>
-<span class="sourceLineNo">684</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.684"></a>
-<span class="sourceLineNo">685</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">584</span> // The orphan procedures will be passed to handleCorrupted, so add an assert here<a name="line.584"></a>
+<span class="sourceLineNo">585</span> assert rootProcId != null;<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (proc.hasParent()) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.588"></a>
+<span class="sourceLineNo">589</span> if (parent != null && !proc.isFinished()) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> parent.incChildrenLatch();<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> procStack.loadStack(proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span> proc.setRootProcId(rootProcId);<a name="line.597"></a>
+<span class="sourceLineNo">598</span> switch (proc.getState()) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> case RUNNABLE:<a name="line.599"></a>
+<span class="sourceLineNo">600</span> runnableList.add(proc);<a name="line.600"></a>
+<span class="sourceLineNo">601</span> break;<a name="line.601"></a>
+<span class="sourceLineNo">602</span> case WAITING:<a name="line.602"></a>
+<span class="sourceLineNo">603</span> waitingList.add(proc);<a name="line.603"></a>
+<span class="sourceLineNo">604</span> break;<a name="line.604"></a>
+<span class="sourceLineNo">605</span> case WAITING_TIMEOUT:<a name="line.605"></a>
+<span class="sourceLineNo">606</span> waitingTimeoutList.add(proc);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> break;<a name="line.607"></a>
+<span class="sourceLineNo">608</span> case FAILED:<a name="line.608"></a>
+<span class="sourceLineNo">609</span> failedList.add(proc);<a name="line.609"></a>
+<span class="sourceLineNo">610</span> break;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> case ROLLEDBACK:<a name="line.611"></a>
+<span class="sourceLineNo">612</span> case INITIALIZING:<a name="line.612"></a>
+<span class="sourceLineNo">613</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.613"></a>
+<span class="sourceLineNo">614</span> LOG.error(msg);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> throw new UnsupportedOperationException(msg);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> default:<a name="line.616"></a>
+<span class="sourceLineNo">617</span> break;<a name="line.617"></a>
+<span class="sourceLineNo">618</span> }<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span> // 3. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.621"></a>
+<span class="sourceLineNo">622</span> waitingList.forEach(proc -> {<a name="line.622"></a>
+<span class="sourceLineNo">623</span> if (!proc.hasChildren()) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // Normally, WAITING procedures should be waken by its children.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // But, there is a case that, all the children are successful and before<a name="line.625"></a>
+<span class="sourceLineNo">626</span> // they can wake up their parent procedure, the master was killed.<a name="line.626"></a>
+<span class="sourceLineNo">627</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.627"></a>
+<span class="sourceLineNo">628</span> // are not loaded because of their SUCCESS state.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // So we need to continue to run this WAITING procedure. But before<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // will throw:<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.633"></a>
+<span class="sourceLineNo">634</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> runnableList.add(proc);<a name="line.635"></a>
+<span class="sourceLineNo">636</span> } else {<a name="line.636"></a>
+<span class="sourceLineNo">637</span> proc.afterReplay(getEnvironment());<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span> });<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span> // 4. Push the procedures to the timeout executor<a name="line.641"></a>
+<span class="sourceLineNo">642</span> waitingTimeoutList.forEach(proc -> {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> proc.afterReplay(getEnvironment());<a name="line.643"></a>
+<span class="sourceLineNo">644</span> timeoutExecutor.add(proc);<a name="line.644"></a>
+<span class="sourceLineNo">645</span> });<a name="line.645"></a>
+<span class="sourceLineNo">646</span> // 5. restore locks<a name="line.646"></a>
+<span class="sourceLineNo">647</span> restoreLocks();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> // 6. Push the procedure to the scheduler<a name="line.648"></a>
+<span class="sourceLineNo">649</span> failedList.forEach(scheduler::addBack);<a name="line.649"></a>
+<span class="sourceLineNo">650</span> runnableList.forEach(p -> {<a name="line.650"></a>
+<span class="sourceLineNo">651</span> p.afterReplay(getEnvironment());<a name="line.651"></a>
+<span class="sourceLineNo">652</span> if (!p.hasParent()) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> scheduler.addBack(p);<a name="line.655"></a>
+<span class="sourceLineNo">656</span> });<a name="line.656"></a>
+<span class="sourceLineNo">657</span> }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span> /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.660"></a>
+<span class="sourceLineNo">661</span> * <p/><a name="line.661"></a>
+<span class="sourceLineNo">662</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.662"></a>
+<span class="sourceLineNo">663</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.663"></a>
+<span class="sourceLineNo">664</span> * pending and in-progress procedures.<a name="line.664"></a>
+<span class="sourceLineNo">665</span> * @param numThreads number of threads available for procedure execution.<a name="line.665"></a>
+<span class="sourceLineNo">666</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.666"></a>
+<span class="sourceLineNo">667</span> * is found on replay. otherwise false.<a name="line.667"></a>
+<span class="sourceLineNo">668</span> */<a name="line.668"></a>
+<span class="sourceLineNo">669</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> // We have numThreads executor + one timer thread used for timing out<a name="line.670"></a>
+<span class="sourceLineNo">671</span> // procedures and triggering periodic procedures.<a name="line.671"></a>
+<span class="sourceLineNo">672</span> this.corePoolSize = numThreads;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> this.maxPoolSize = 10 * numThreads;<a name="line.673"></a>
+<span class="sourceLineNo">674</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.674"></a>
+<span class="sourceLineNo">675</span> corePoolSize, maxPoolSize);<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.677"></a>
+<span class="sourceLineNo">678</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span> // Create the workers<a name="line.680"></a>
+<span class="sourceLineNo">681</span> workerId.set(0);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.682"></a>
+<span class="sourceLineNo">683</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> long st, et;<a name="line.687"></a>
<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> long st, et;<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> // Acquire the store lease.<a name="line.691"></a>
-<span class="sourceLineNo">692</span> st = System.nanoTime();<a name="line.692"></a>
-<span class="sourceLineNo">693</span> store.recoverLease();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> et = System.nanoTime();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.695"></a>
-<span class="sourceLineNo">696</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span> // start the procedure scheduler<a name="line.698"></a>
-<span class="sourceLineNo">699</span> scheduler.start();<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> // TODO: Split in two steps.<a name="line.701"></a>
-<span class="sourceLineNo">702</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.702"></a>
-<span class="sourceLineNo">703</span> // The first one will make sure that we have the latest id,<a name="line.703"></a>
-<span class="sourceLineNo">704</span> // so we can start the threads and accept new procedures.<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // The second step will do the actual load of old procedures.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> st = System.nanoTime();<a name="line.706"></a>
-<span class="sourceLineNo">707</span> load(abortOnCorruption);<a name="line.707"></a>
-<span class="sourceLineNo">708</span> et = System.nanoTime();<a name="line.708"></a>
-<span class="sourceLineNo">709</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.709"></a>
-<span class="sourceLineNo">710</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.710"></a>
-<span class="sourceLineNo">711</span> }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></a>
-<span class="sourceLineNo">713</span> /**<a name="line.713"></a>
-<span class="sourceLineNo">714</span> * Start the workers.<a name="line.714"></a>
-<span class="sourceLineNo">715</span> */<a name="line.715"></a>
-<span class="sourceLineNo">716</span> public void startWorkers() throws IOException {<a name="line.716"></a>
-<span class="sourceLineNo">717</span> if (!running.compareAndSet(false, true)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Already running");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span> // Start the executors. Here we must have the lastProcId set.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.722"></a>
-<span class="sourceLineNo">723</span> timeoutExecutor.start();<a name="line.723"></a>
-<span class="sourceLineNo">724</span> for (WorkerThread worker: workerThreads) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span> worker.start();<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> // Internal chores<a name="line.728"></a>
-<span class="sourceLineNo">729</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span> // Add completed cleaner chore<a name="line.731"></a>
-<span class="sourceLineNo">732</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.732"></a>
-<span class="sourceLineNo">733</span> }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span> public void stop() {<a name="line.735"></a>
-<span class="sourceLineNo">736</span> if (!running.getAndSet(false)) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span> return;<a name="line.737"></a>
-<span class="sourceLineNo">738</span> }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span> LOG.info("Stopping");<a name="line.740"></a>
-<span class="sourceLineNo">741</span> scheduler.stop();<a name="line.741"></a>
-<span class="sourceLineNo">742</span> timeoutExecutor.sendStopSignal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> @VisibleForTesting<a name="line.745"></a>
-<span class="sourceLineNo">746</span> public void join() {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> assert !isRunning() : "expected not running";<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span> // stop the timeout executor<a name="line.749"></a>
-<span class="sourceLineNo">750</span> timeoutExecutor.awaitTermination();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span> // stop the worker threads<a name="line.752"></a>
-<span class="sourceLineNo">753</span> for (WorkerThread worker: workerThreads) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span> worker.awaitTermination();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span> // Destroy the Thread Group for the executors<a name="line.757"></a>
-<span class="sourceLineNo">758</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.758"></a>
-<span class="sourceLineNo">759</span> try {<a name="line.759"></a>
-<span class="sourceLineNo">760</span> threadGroup.destroy();<a name="line.760"></a>
-<span class="sourceLineNo">761</span> } catch (IllegalThreadStateException e) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.threadGroup, e.getMessage());<a name="line.763"></a>
-<span class="sourceLineNo">764</span> // This dumps list of threads on STDOUT.<a name="line.764"></a>
-<span class="sourceLineNo">765</span> this.threadGroup.list();<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span> // reset the in-memory state for testing<a name="line.768"></a>
-<span class="sourceLineNo">769</span> completed.clear();<a name="line.769"></a>
-<span class="sourceLineNo">770</span> rollbackStack.clear();<a name="line.770"></a>
-<span class="sourceLineNo">771</span> procedures.clear();<a name="line.771"></a>
-<span class="sourceLineNo">772</span> nonceKeysToProcIdsMap.clear();<a name="line.772"></a>
-<span class="sourceLineNo">773</span> scheduler.clear();<a name="line.773"></a>
-<span class="sourceLineNo">774</span> lastProcId.set(-1);<a name="line.774"></a>
-<span class="sourceLineNo">775</span> }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span> public void refreshConfiguration(final Configuration conf) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span> this.conf = conf;<a name="line.778"></a>
-<span class="sourceLineNo">779</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.779"></a>
-<span class="sourceLineNo">780</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span> }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">689</span> // Acquire the store lease.<a name="line.689"></a>
+<span class="sourceLineNo">690</span> st = System.nanoTime();<a name="line.690"></a>
+<span class="sourceLineNo">691</span> store.recoverLease();<a name="line.691"></a>
+<span class="sourceLineNo">692</span> et = System.nanoTime();<a name="line.692"></a>
+<span class="sourceLineNo">693</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.693"></a>
+<span class="sourceLineNo">694</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> // start the procedure scheduler<a name="line.696"></a>
+<span class="sourceLineNo">697</span> scheduler.start();<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> // TODO: Split in two steps.<a name="line.699"></a>
+<span class="sourceLineNo">700</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.700"></a>
+<span class="sourceLineNo">701</span> // The first one will make sure that we have the latest id,<a name="line.701"></a>
+<span class="sourceLineNo">702</span> // so we can start the threads and accept new procedures.<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // The second step will do the actual load of old procedures.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> st = System.nanoTime();<a name="line.704"></a>
+<span class="sourceLineNo">705</span> load(abortOnCorruption);<a name="line.705"></a>
+<span class="sourceLineNo">706</span> et = System.nanoTime();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.707"></a>
+<span class="sourceLineNo">708</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.708"></a>
+<span class="sourceLineNo">709</span> }<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span> /**<a name="line.711"></a>
+<span class="sourceLineNo">712</span> * Start the workers.<a name="line.712"></a>
+<span class="sourceLineNo">713</span> */<a name="line.713"></a>
+<span class="sourceLineNo">714</span> public void startWorkers() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span> if (!running.compareAndSet(false, true)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Already running");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> return;<a name="line.717"></a>
+<span class="sourceLineNo">718</span> }<a name="line.718"></a>
+<span class="sourceLineNo">719</span> // Start the executors. Here we must have the lastProcId set.<a name="line.719"></a>
+<span class="sourceLineNo">720</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.720"></a>
+<span class="sourceLineNo">721</span> timeoutExecutor.start();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (WorkerThread worker: workerThreads) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> worker.start();<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span> // Internal chores<a name="line.726"></a>
+<span class="sourceLineNo">727</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.727"></a>
+<span class="sourceLineNo">728</span><a name="line.728"></a>
+<span class="sourceLineNo">729</span> // Add completed cleaner chore<a name="line.729"></a>
+<span class="sourceLineNo">730</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.730"></a>
+<span class="sourceLineNo">731</span> }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span> public void stop() {<a name="line.733"></a>
+<span class="sourceLineNo">734</span> if (!running.getAndSet(false)) {<a name="line.734"></a>
+<span class="sourceLineNo">735</span> return;<a name="line.735"></a>
+<span class="sourceLineNo">736</span> }<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span> LOG.info("Stopping");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> scheduler.stop();<a name="line.739"></a>
+<span class="sourceLineNo">740</span> timeoutExecutor.sendStopSignal();<a name="line.740"></a>
+<span class="sourceLineNo">741</span> }<a name="line.741"></a>
+<span class="sourceLineNo">742</span><a name="line.742"></a>
+<span class="sourceLineNo">743</span> @VisibleForTesting<a name="line.743"></a>
+<span class="sourceLineNo">744</span> public void join() {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> assert !isRunning() : "expected not running";<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span> // stop the timeout executor<a name="line.747"></a>
+<span class="sourceLineNo">748</span> timeoutExecutor.awaitTermination();<a name="line.748"></a>
+<span class="sourceLineNo">749</span><a name="line.749"></a>
+<span class="sourceLineNo">750</span> // stop the worker threads<a name="line.750"></a>
+<span class="sourceLineNo">751</span> for (WorkerThread worker: workerThreads) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span> worker.awaitTermination();<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> // Destroy the Thread Group for the executors<a name="line.755"></a>
+<span class="sourceLineNo">756</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> try {<a name="line.757"></a>
+<span class="sourceLineNo">758</span> threadGroup.destroy();<a name="line.758"></a>
+<span class="sourceLineNo">759</span> } catch (IllegalThreadStateException e) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.threadGroup, e.getMessage());<a name="line.761"></a>
+<span class="sourceLineNo">762</span> // This dumps list of threads on STDOUT.<a name="line.762"></a>
+<span class="sourceLineNo">763</span> this.threadGroup.list();<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span><a name="line.765"></a>
+<span class="sourceLineNo">766</span> // reset the in-memory state for testing<a name="line.766"></a>
+<span class="sourceLineNo">767</span> completed.clear();<a name="line.767"></a>
+<span class="sourceLineNo">768</span> rollbackStack.clear();<a name="line.768"></a>
+<span class="sourceLineNo">769</span> procedures.clear();<a name="line.769"></a>
+<span class="sourceLineNo">770</span> nonceKeysToProcIdsMap.clear();<a name="line.770"></a>
+<span class="sourceLineNo">771</span> scheduler.clear();<a name="line.771"></a>
+<span class="sourceLineNo">772</span> lastProcId.set(-1);<a name="line.772"></a>
+<span class="sourceLineNo">773</span> }<a name="line.773"></a>
+<span class="sourceLineNo">774</span><a name="line.774"></a>
+<span class="sourceLineNo">775</span> public void refreshConfiguration(final Configuration conf) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span> this.conf = conf;<a name="line.776"></a>
+<span class="sourceLineNo">777</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.777"></a>
+<span class="sourceLineNo">778</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.778"></a>
+<span class="sourceLineNo">779</span> }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span> // ==========================================================================<a name="line.781"></a>
+<span class="sourceLineNo">782</span> // Accessors<a name="line.782"></a>
<span class="sourceLineNo">783</span> // ==========================================================================<a name="line.783"></a>
-<span class="sourceLineNo">784</span> // Accessors<a name="line.784"></a>
-<span class="sourceLineNo">785</span> // ==========================================================================<a name="line.785"></a>
-<span class="sourceLineNo">786</span> public boolean isRunning() {<a name="line.786"></a>
-<span class="sourceLineNo">787</span> return running.get();<a name="line.787"></a>
-<span class="sourceLineNo">788</span> }<a name="line.788"></a>
-<span class="sourceLineNo">789</span><a name="line.789"></a>
-<span class="sourceLineNo">790</span> /**<a name="line.790"></a>
-<span class="sourceLineNo">791</span> * @return the current number of worker threads.<a name="line.791"></a>
-<span class="sourceLineNo">792</span> */<a name="line.792"></a>
-<span class="sourceLineNo">793</span> public int getWorkerThreadCount() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span> return workerThreads.size();<a name="line.794"></a>
-<span class="sourceLineNo">795</span> }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span> /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span> * @return the core pool size settings.<a name="line.798"></a>
-<span class="sourceLineNo">799</span> */<a name="line.799"></a>
-<span class="sourceLineNo">800</span> public int getCorePoolSize() {<a name="line.800"></a>
-<span class="sourceLineNo">801</span> return corePoolSize;<a name="line.801"></a>
-<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span> public int getActiveExecutorCount() {<a name="line.804"></a>
-<span class="sourceLineNo">805</span> return activeExecutorCount.get();<a name="line.805"></a>
-<span class="sourceLineNo">806</span> }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span> public TEnvironment getEnvironment() {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.environment;<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> public ProcedureStore getStore() {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> return this.store;<a name="line.813"></a>
-<span class="sourceLineNo">814</span> }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span> ProcedureScheduler getScheduler() {<a name="line.816"></a>
-<span class="sourceLineNo">817</span> return scheduler;<a name="line.817"></a>
-<span class="sourceLineNo">818</span> }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.821"></a>
-<span class="sourceLineNo">822</span> this.scheduler.signalAll();<a name="line.822"></a>
-<span class="sourceLineNo">823</span> }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
+<span class="sourceLineNo">784</span> public boolean isRunning() {<a name="line.784"></a>
+<span class="sourceLineNo">785</span> return running.get();<a name="line.785"></a>
+<span class="sourceLineNo">786</span> }<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span> /**<a name="line.788"></a>
+<span class="sourceLineNo">789</span> * @return the current number of worker threads.<a name="line.789"></a>
+<span class="sourceLineNo">790</span> */<a name="line.790"></a>
+<span class="sourceLineNo">791</span> public int getWorkerThreadCount() {<a name="line.791"></a>
+<span class="sourceLineNo">792</span> return workerThreads.size();<a name="line.792"></a>
+<span class="sourceLineNo">793</span> }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span> * @return the core pool size settings.<a name="line.796"></a>
+<span class="sourceLineNo">797</span> */<a name="line.797"></a>
+<span class="sourceLineNo">798</span> public int getCorePoolSize() {<a name="line.798"></a>
+<span class="sourceLineNo">799</span> return corePoolSize;<a name="line.799"></a>
+<span class="sourceLineNo">800</span> }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span> public int getActiveExecutorCount() {<a name="line.802"></a>
+<span class="sourceLineNo">803</span> return activeExecutorCount.get();<a name="line.803"></a>
+<span class="sourceLineNo">804</span> }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span> public TEnvironment getEnvironment() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.environment;<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> public ProcedureStore getStore() {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> return this.store;<a name="line.811"></a>
+<span class="sourceLineNo">812</span> }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span> ProcedureScheduler getScheduler() {<a name="line.814"></a>
+<span class="sourceLineNo">815</span> return scheduler;<a name="line.815"></a>
+<span class="sourceLineNo">816</span> }<a name="line.816"></a>
+<span class="sourceLineNo">817</span><a name="line.817"></a>
+<span class="sourceLineNo">818</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.819"></a>
+<span class="sourceLineNo">820</span> this.scheduler.signalAll();<a name="line.820"></a>
+<span class="sourceLineNo">821</span> }<a name="line.821"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span><a name="line.826"></a>
+<span class="sourceLineNo">827</span> // ==========================================================================<a name="line.827"></a>
+<span class="sourceLineNo">828</span> // Submit/Remove Chores<a name="line.828"></a>
<span class="sourceLineNo">829</span> // ==========================================================================<a name="line.829"></a>
-<span class="sourceLineNo">830</span> // Submit/Remove Chores<a name="line.830"></a>
-<span class="sourceLineNo">831</span> // ==========================================================================<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span> * Add a chore procedure to the executor<a name="line.834"></a>
-<span class="sourceLineNo">835</span> * @param chore the chore to add<a name="line.835"></a>
-<span class="sourceLineNo">836</span> */<a name="line.836"></a>
-<span class="sourceLineNo">837</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.837"></a>
-<span class="sourceLineNo">838</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.838"></a>
-<span class="sourceLineNo">839</span> timeoutExecutor.add(chore);<a name="line.839"></a>
-<span class="sourceLineNo">840</span> }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span> /**<a name="line.842"></a>
-<span class="sourceLineNo">843</span> * Remove a chore procedure from the executor<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * @param chore the chore to remove<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return whether the chore is removed, or it will be removed later<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> chore.setState(ProcedureState.SUCCESS);<a name="line.848"></a>
-<span class="sourceLineNo">849</span> return timeoutExecutor.remove(chore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span> }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span> /**<a name="line.831"></a>
+<span class="sourceLineNo">832</span> * Add a chore procedure to the executor<a name="line.832"></a>
+<span class="sourceLineNo">833</span> * @param chore the chore to add<a name="line.833"></a>
+<span class="sourceLineNo">834</span> */<a name="line.834"></a>
+<span class="sourceLineNo">835</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.835"></a>
+<span class="sourceLineNo">836</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.836"></a>
+<span class="sourceLineNo">837</span> timeoutExecutor.add(chore);<a name="line.837"></a>
+<span class="sourceLineNo">838</span> }<a name="line.838"></a>
+<span class="sourceLineNo">839</span><a name="line.839"></a>
+<span class="sourceLineNo">840</span> /**<a name="line.840"></a>
+<span class="sourceLineNo">841</span> * Remove a chore procedure from the executor<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * @param chore the chore to remove<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return whether the chore is removed, or it will be removed later<a name="line.843"></a>
+<span class="sourceLineNo">844</span> */<a name="line.844"></a>
+<span class="sourceLineNo">845</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span> chore.setState(ProcedureState.SUCCESS);<a name="line.846"></a>
+<span class="sourceLineNo">847</span> return timeoutExecutor.remove(chore);<a name="line.847"></a>
+<span class="sourceLineNo">848</span> }<a name="line.848"></a>
+<span class="sourceLineNo">849</span><a name="line.849"></a>
+<span class="sourceLineNo">850</span> // ==========================================================================<a name="line.850"></a>
+<span class="sourceLineNo">851</span> // Nonce Procedure helpers<a name="line.851"></a>
<span class="sourceLineNo">852</span> // ==========================================================================<a name="line.852"></a>
-<span class="sourceLineNo">853</span> // Nonce Procedure helpers<a name="line.853"></a>
-<span class="sourceLineNo">854</span> // ==========================================================================<a name="line.854"></a>
-<span class="sourceLineNo">855</span> /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.856"></a>
-<span class="sourceLineNo">857</span> * @param nonceGroup<a name="line.857"></a>
-<span class="sourceLineNo">858</span> * @param nonce<a name="line.858"></a>
-<span class="sourceLineNo">859</span> * @return the generated NonceKey<a name="line.859"></a>
-<span class="sourceLineNo">860</span> */<a name="line.860"></a>
-<span class="sourceLineNo">861</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.862"></a>
-<span class="sourceLineNo">863</span> }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span> /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.866"></a>
-<span class="sourceLineNo">867</span> * A procId will be reserved and on submitProcedure(),<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.868"></a>
-<span class="sourceLineNo">869</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.870"></a>
-<span class="sourceLineNo">871</span> * and submit the procedure.<a name="line.871"></a>
-<span class="sourceLineNo">872</span> *<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.873"></a>
-<span class="sourceLineNo">874</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.874"></a>
-<span class="sourceLineNo">875</span> */<a name="line.875"></a>
-<span class="sourceLineNo">876</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> if (nonceKey == null) return -1;<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span> // check if we have already a Reserved ID for the nonce<a name="line.879"></a>
-<span class="sourceLineNo">880</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (oldProcId == null) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.882"></a>
-<span class="sourceLineNo">883</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.883"></a>
-<span class="sourceLineNo">884</span> final long newProcId = nextProcId();<a name="line.884"></a>
-<span class="sourceLineNo">885</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> if (oldProcId == null) return -1;<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span><a name="line.888"></a>
-<span class="sourceLineNo">889</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.889"></a>
-<span class="sourceLineNo">890</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.890"></a>
-<span class="sourceLineNo">891</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.891"></a>
-<span class="sourceLineNo">892</span> while (isRunning() &&<a name="line.892"></a>
-<span class="sourceLineNo">893</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.893"></a>
-<span class="sourceLineNo">894</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> if (traceEnabled) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.896"></a>
-<span class="sourceLineNo">897</span> }<a name="line.897"></a>
-<span class="sourceLineNo">898</span> Threads.sleep(100);<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span> return oldProcId.longValue();<a name="line.900"></a>
-<span class="sourceLineNo">901</span> }<a name="line.901"></a>
-<span class="sourceLineNo">902</span><a name="line.902"></a>
-<span class="sourceLineNo">903</span> /**<a name="line.903"></a>
-<span class="sourceLineNo">904</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.904"></a>
-<span class="sourceLineNo">905</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.905"></a>
-<span class="sourceLineNo">906</span> */<a name="line.906"></a>
-<span class="sourceLineNo">907</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.907"></a>
-<span class="sourceLineNo">908</span> if (nonceKey == null) return;<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.910"></a>
-<span class="sourceLineNo">911</span> if (procId == null) return;<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span> // if the procedure was not submitted, remove the nonce<a name="line.913"></a>
-<span class="sourceLineNo">914</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.915"></a>
-<span class="sourceLineNo">916</span> }<a name="line.916"></a>
-<span class="sourceLineNo">917</span> }<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.919"></a>
-<span class="sourceLineNo">920</span> private String procName;<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span> public FailedProcedure() {<a name="line.922"></a>
-<span class="sourceLineNo">923</span> }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.925"></a>
-<span class="sourceLineNo">926</span> NonceKey nonceKey, IOException exception) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span> this.procName = procName;<a name="line.927"></a>
-<span class="sourceLineNo">928</span> setProcId(procId);<a name="line.928"></a>
-<span class="sourceLineNo">929</span> setState(ProcedureState.ROLLEDBACK);<a name="line.929"></a>
-<span class="sourceLineNo">930</span> setOwner(owner);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> setNonceKey(nonceKey);<a name="line.931"></a>
-<span class="sourceLineNo">932</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.932"></a>
-<span class="sourceLineNo">933</span> setSubmittedTime(currentTime);<a name="line.933"></a>
-<span class="sourceLineNo">934</span> setLastUpdate(currentTime);<a name="line.934"></a>
-<span class="sourceLineNo">935</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.935"></a>
-<span class="sourceLineNo">936</span> }<a name="line.936"></a>
-<span class="sourceLineNo">937</span><a name="line.937"></a>
-<span class="sourceLineNo">938</span> @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span> public String getProcName() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span> return procName;<a name="line.940"></a>
-<span class="sourceLineNo">941</span> }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span> @Override<a name="line.943"></a>
-<span class="sourceLineNo">944</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.944"></a>
-<span class="sourceLineNo">945</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.945"></a>
-<span class="sourceLineNo">946</span> InterruptedException {<a name="line.946"></a>
-<span class="sourceLineNo">947</span> throw new UnsupportedOperationException();<a name="line.947"></a>
-<span class="sourceLineNo">948</span> }<a name="line.948"></a>
-<span class="sourceLineNo">949</span><a name="line.949"></a>
-<span class="sourceLineNo">950</span> @Override<a name="line.950"></a>
-<span class="sourceLineNo">951</span> protected void rollback(TEnvironment env)<a name="line.951"></a>
-<span class="sourceLineNo">952</span> throws IOException, InterruptedException {<a name="line.952"></a>
-<span class="sourceLineNo">953</span> throw new UnsupportedOperationException();<a name="line.953"></a>
-<span class="sourceLineNo">954</span> }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span> @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span> protected boolean abort(TEnvironment env) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span> throw new UnsupportedOperationException();<a name="line.958"></a>
-<span class="sourceLineNo">959</span> }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span> @Override<a name="line.961"></a>
-<span class="sourceLineNo">962</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.962"></a>
-<span class="sourceLineNo">963</span> throws IOException {<a name="line.963"></a>
-<span class="sourceLineNo">964</span> }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span> @Override<a name="line.966"></a>
-<span class="sourceLineNo">967</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.967"></a>
-<span class="sourceLineNo">968</span> throws IOException {<a name="line.968"></a>
-<span class="sourceLineNo">969</span> }<a name="line.969"></a>
-<span class="sourceLineNo">970</span> }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span> /**<a name="line.972"></a>
-<span class="sourceLineNo">973</span> * If the failure failed before submitting it, we may want to give back the<a name="line.973"></a>
-<span class="sourceLineNo">974</span> * same error to the requests with the same nonceKey.<a name="line.974"></a>
-<span class="sourceLineNo">975</span> *<a name="line.975"></a>
-<span class="sourceLineNo">976</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.976"></a>
-<span class="sourceLineNo">977</span> * @param procName name of the procedure, used to inform the user<a name="line.977"></a>
-<span class="sourceLineNo">978</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.978"></a>
-<span class="sourceLineNo">979</span> * @param exception the failure to report to the user<a name="line.979"></a>
-<span class="sourceLineNo">980</span> */<a name="line.980"></a>
-<span class="sourceLineNo">981</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.981"></a>
-<span class="sourceLineNo">982</span> IOException exception) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span> if (nonceKey == null) {<a name="line.983"></a>
-<span class="sourceLineNo">984</span> return;<a name="line.984"></a>
-<span class="sourceLineNo">985</span> }<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.987"></a>
-<span class="sourceLineNo">988</span> if (procId == null || completed.containsKey(procId)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span> return;<a name="line.989"></a>
-<span class="sourceLineNo">990</span> }<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span> Procedure<TEnvironment> proc =<a name="line.992"></a>
-<span class="sourceLineNo">993</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.993"></a>
-<span class="sourceLineNo">994</span><a name="line.994"></a>
-<span class="sourceLineNo">995</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.995"></a>
-<span class="sourceLineNo">996</span> }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">853</span> /**<a name="line.853"></a>
+<span class="sourceLineNo">854</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.854"></a>
+<span class="sourceLineNo">855</span> * @param nonceGroup<a name="line.855"></a>
+<span class="sourceLineNo">856</span> * @param nonce<a name="line.856"></a>
+<span class="sourceLineNo">857</span> * @return the generated NonceKey<a name="line.857"></a>
+<span class="sourceLineNo">858</span> */<a name="line.858"></a>
+<span class="sourceLineNo">859</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.860"></a>
+<span class="sourceLineNo">861</span> }<a name="line.861"></a>
+<span class="sourceLineNo">862</span><a name="line.862"></a>
+<span class="sourceLineNo">863</span> /**<a name="line.863"></a>
+<span class="sourceLineNo">864</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.864"></a>
+<span class="sourceLineNo">865</span> * A procId will be reserved and on submitProcedure(),<a name="line.865"></a>
+<span class="sourceLineNo">866</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.866"></a>
+<span class="sourceLineNo">867</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.867"></a>
+<span class="sourceLineNo">868</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.868"></a>
+<span class="sourceLineNo">869</span> * and submit the procedure.<a name="line.869"></a>
+<span class="sourceLineNo">870</span> *<a name="line.870"></a>
+<span class="sourceLineNo">871</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.871"></a>
+<span class="sourceLineNo">872</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.872"></a>
+<span class="sourceLineNo">873</span> */<a name="line.873"></a>
+<span class="sourceLineNo">874</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.874"></a>
+<span class="sourceLineNo">875</span> if (nonceKey == null) return -1;<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span> // check if we have already a Reserved ID for the nonce<a name="line.877"></a>
+<span class="sourceLineNo">878</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.878"></a>
+<span class="sourceLineNo">879</span> if (oldProcId == null) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.880"></a>
+<span class="sourceLineNo">881</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.881"></a>
+<span class="sourceLineNo">882</span> final long newProcId = nextProcId();<a name="line.882"></a>
+<span class="sourceLineNo">883</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.883"></a>
+<span class="sourceLineNo">884</span> if (oldProcId == null) return -1;<a name="line.884"></a>
+<span class="sourceLineNo">885</span> }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.887"></a>
+<span class="sourceLineNo">888</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.888"></a>
+<span class="sourceLineNo">889</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.889"></a>
+<span class="sourceLineNo">890</span> while (isRunning() &&<a name="line.890"></a>
+<span class="sourceLineNo">891</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.891"></a>
+<span class="sourceLineNo">892</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> if (traceEnabled) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> Threads.sleep(100);<a name="line.896"></a>
+<span class="sourceLineNo">897</span> }<a name="line.897"></a>
+<span class="sourceLineNo">898</span> return oldProcId.longValue();<a name="line.898"></a>
+<span class="sourceLineNo">899</span> }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span> /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.903"></a>
+<span class="sourceLineNo">904</span> */<a name="line.904"></a>
+<span class="sourceLineNo">905</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span> if (nonceKey == null) return;<a name="line.906"></a>
+<span class="sourceLineNo">907</span><a name="line.907"></a>
+<span class="sourceLineNo">908</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.908"></a>
+<span class="sourceLineNo">909</span> if (procId == null) return;<a name="line.909"></a>
+<span class="sourceLineNo">910</span><a name="line.910"></a>
+<span class="sourceLineNo">911</span> // if the procedure was not submitted, remove the nonce<a name="line.911"></a>
+<span class="sourceLineNo">912</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.912"></a>
+<span class="sourceLineNo">913</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.913"></a>
+<span class="sourceLineNo">914</span> }<a name="line.914"></a>
+<span class="sourceLineNo">915</span> }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.917"></a>
+<span class="sourceLineNo">918</span> private String procName;<a name="line.918"></a>
+<span class="sourceLineNo">919</span><a name="line.919"></a>
+<span class="sourceLineNo">920</span> public FailedProcedure() {<a name="line.920"></a>
+<span class="sourceLineNo">921</span> }<a name="line.921"></a>
+<span class="sourceLineNo">922</span><a name="line.922"></a>
+<span class="sourceLineNo">923</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.923"></a>
+<span class="sourceLineNo">924</span> NonceKey nonceKey, IOException exception) {<a name="line.924"></a>
+<span class="sourceLineNo">925</span> this.procName = procName;<a name="line.925"></a>
+<span class="sourceLineNo">926</span> setProcId(procId);<a name="line.926"></a>
+<span class="sourceLineNo">927</span> setState(ProcedureState.ROLLEDBACK);<a name="line.927"></a>
+<span class="sourceLineNo">928</span> setOwner(owner);<a name="line.928"></a>
+<span class="sourceLineNo">929</span> setNonceKey(nonceKey);<a name="line.929"></a>
+<span class="sourceLineNo">930</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.930"></a>
+<span class="sourceLineNo">931</span> setSubmittedTime(currentTime);<a name="line.931"></a>
+<span class="sourceLineNo">932</span> setLastUpdate(currentTime);<a name="line.932"></a>
+<span class="sourceLineNo">933</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.933"></a>
+<span class="sourceLineNo">934</span> }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span> @Override<a name="line.936"></a>
+<span class="sourceLineNo">937</span> public String getProcName() {<a name="line.937"></a>
+<span class="sourceLineNo">938</span> return procName;<a name="line.938"></a>
+<span class="sourceLineNo">939</span> }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span> @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.942"></a>
+<span class="sourceLineNo">943</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.943"></a>
+<span class="sourceLineNo">944</span> InterruptedException {<a name="line.944"></a>
+<span class="sourceLineNo">945</span> throw new UnsupportedOperationException();<a name="line.945"></a>
+<span class="sourceLineNo">946</span> }<a name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span> @Override<a name="line.948"></a>
+<span class="sourceLineNo">949</span> protected void rollback(TEnvironment env)<a name="line.949"></a>
+<span class="sourceLineNo">950</span> throws IOException, InterruptedException {<a name="line.950"></a>
+<span class="sourceLineNo">951</span> throw new UnsupportedOperationException();<a name="line.951"></a>
+<span class="sourceLineNo">952</span> }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span> @Override<a name="line.954"></a>
+<span class="sourceLineNo">955</span> protected boolean abort(TEnvironment env) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span> throw new UnsupportedOperationException();<a name="line.956"></a>
+<span class="sourceLineNo">957</span> }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span> @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.960"></a>
+<span class="sourceLineNo">961</span> throws IOException {<a name="line.961"></a>
+<span class="sourceLineNo">962</span> }<a name="line.962"></a>
+<span class="sourceLineNo">963</span><a name="line.963"></a>
+<span class="sourceLineNo">964</span> @Override<a name="line.964"></a>
+<span class="sourceLineNo">965</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.965"></a>
+<span class="sourceLineNo">966</span> throws IOException {<a name="line.966"></a>
+<span class="sourceLineNo">967</span> }<a name="line.967"></a>
+<span class="sourceLineNo">968</span> }<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span> /**<a name="line.970"></a>
+<span class="sourceLineNo">971</span> * If the failure failed before submitting it, we may want to give back the<a name="line.971"></a>
+<span class="sourceLineNo">972</span> * same error to the requests with the same nonceKey.<a name="line.972"></a>
+<span class="sourceLineNo">973</span> *<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * @param procName name of the procedure, used to inform the user<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * @param exception the failure to report to the user<a name="line.977"></a>
+<span class="sourceLineNo">978</span> */<a name="line.978"></a>
+<span class="sourceLineNo">979</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.979"></a>
+<span class="sourceLineNo">980</span> IOException exception) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span> if (nonceKey == null) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span> return;<a name="line.982"></a>
+<span class="sourceLineNo">983</span> }<a name="line.983"></a>
+<span class="sourceLineNo">984</span><a name="line.984"></a>
+<span class="sourceLineNo">985</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.985"></a>
+<span class="sourceLineNo">986</span> if (procId == null || completed.containsKey(procId)) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span> return;<a name="line.987"></a>
+<span class="sourceLineNo">988</span> }<a name="line.988"></a>
+<span class="sourceLineNo">989</span><a name="line.989"></a>
+<span class="sourceLineNo">990</span> Procedure<TEnvironment> proc =<a name="line.990"></a>
+<span class="sourceLineNo">991</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.991"></a>
+<span class="sourceLineNo">992</span><a name="line.992"></a>
+<span class="sourceLineNo">993</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.993"></a>
+<span class="sourceLineNo">994</span> }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span> // ==========================================================================<a name="line.996"></a>
+<span class="sourceLineNo">997</span> // Submit/Abort Procedure<a name="line.997"></a>
<span class="sourceLineNo">998</span> // ==========================================================================<a name="line.998"></a>
-<span class="sourceLineNo">999</span> // Submit/Abort Procedure<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> // ==========================================================================<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> /**<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> * Add a new root-procedure to the executor.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> * @param proc the new procedure to execute.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> * @return the procedure id, that can be used to monitor the operation<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> */<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> public long submitProcedure(Procedure<TEnvironment> proc) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> return submitProcedure(proc, null);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span><a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> /**<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> * Bypass a procedure. If the procedure is set to bypass, all the logic in<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> * execute/rollback will be ignored and it will return success, whatever.<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> * It is used to recover buggy stuck procedures, releasing the lock resources<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> * and letting other procedures run. Bypassing one procedure (and its ancestors will<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> * be bypassed automatically) may leave the cluster in a middle state, e.g. region<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> * not assigned, or some hdfs files left behind. After getting rid of those stuck procedures,<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> * the operators may have to do some clean up on hdfs or schedule some assign procedures<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> * to let region online. DO AT YOUR OWN RISK.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> * <p><a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> * A procedure can be bypassed only if<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span> * 1. The procedure is in state of RUNNABLE, WAITING, WAITING_TIMEOUT<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> * or it is a root procedure without any child.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * 2. No other worker thread is executing it<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> * 3. No child procedure has been submitted<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> *<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> * <p><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> * If all the requirements are meet, the procedure and its ancestors will be<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> * bypassed and persisted to WAL.<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> *<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span> * <p><a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> * If the procedure is in WAITING state, will set it to RUNNABLE add it to run queue.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> * TODO: What about WAITING_TIMEOUT?<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> * @param pids the procedure id<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> * @param lockWait time to wait lock<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> * @param force if force set to true, we will bypass the procedure even if it is executing.<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> * This is for procedures which can't break out during executing(due to bug, mostly)<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> * In this case, bypassing the procedure is not enough, since it is already stuck<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> * there. We need to restart the master after bypassing, and letting the problematic<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span> * procedure to execute wth bypass=true, so in that condition, the procedure can be<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> * successfully bypassed.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> * @param recursive We will do an expensive search for children of each pid. EXPENSIVE!<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> * @return true if bypass success<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> * @throws IOException IOException<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span> */<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> public List<Boolean> bypassProcedure(List<Long> pids, long lockWait, boolean force,<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span> boolean recursive)<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> throws IOException {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> List<Boolean> result = new ArrayList<Boolean>(pids.size());<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> for(long pid: pids) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span> result.add(bypassProcedure(pid, lockWait, force, recursive));<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> return result;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span> }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> boolean bypassProcedure(long pid, long lockWait, boolean override, boolean recursive)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span> throws IOException {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> Preconditions.checkArgument(lockWait > 0, "lockWait should be positive");<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span> final Procedure<TEnvironment> procedure = getProcedure(pid);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span> if (procedure == null) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> LOG.debug("Procedure pid={} does not exist, skipping bypass", pid);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> return false;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span> }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span><a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> LOG.debug("Begin bypass {} with lockWait={}, override={}, recursive={}",<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span> procedure, lockWait, override, recursive);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> IdLock.Entry lockEntry = procExecutionLock.tryLockEntry(procedure.getProcId(), lockWait);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> if (lockEntry == null && !override) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> LOG.debug("Waited {} ms, but {} is still running, skipping bypass with force={}",<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> lockWait, procedure, override);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> } else if (lockEntry == null) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> LOG.debug("Waited {} ms, but {} is still running, begin bypass with force={}",<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span> lockWait, procedure, override);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // check whether the procedure is already finished<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> if (procedure.isFinished()) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> LOG.debug("{} is already finished, skipping bypass", procedure);<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> return false;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> if (procedure.hasChildren()) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> if (recursive) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> // EXPENSIVE. Checks each live procedure of which there could be many!!!<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span> // Is there another way to get children of a procedure?<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> LOG.info("Recursive bypass on children of pid={}", procedure.getProcId());<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> this.procedures.forEachValue(1 /*Single-threaded*/,<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> // Transformer<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> v -> v.getParentProcId() == procedure.getProcId()? v: null,<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> // Consumer<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span> v
<TRUNCATED>
[29/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 0561578..8fb5a05 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -51489,7 +51489,7 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize--">getStorefilesSize()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize-java.util.function.Predicate-">getStorefilesSize(Predicate<HStoreFile>)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize-java.util.Collection-java.util.function.Predicate-">getStorefilesSize(Collection<HStoreFile>, Predicate<HStoreFile>)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/Store.html#getStorefilesSize--">getStorefilesSize()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></dt>
<dd> </dd>
@@ -53441,6 +53441,8 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupRequest.html#getTotalTasks--">getTotalTasks()</a></span> - Method in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupRequest.html" title="class in org.apache.hadoop.hbase.backup">BackupRequest</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HStore.html#getTotalUmcompressedBytes-java.util.List-">getTotalUmcompressedBytes(List<HStoreFile>)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html#getTotalUncompressedBytes--">getTotalUncompressedBytes()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile">FixedFileTrailer</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileReader.html#getTotalUncompressedBytes--">getTotalUncompressedBytes()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileReader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileReader</a></dt>
@@ -64308,8 +64310,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#isNextFinished--">isNextFinished()</a></span> - Method in interface org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></dt>
<dd>
-<div class="block">Calling this method does not need to converting the protobuf message to the Procedure class,
- so if it returns true we can call <a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--"><code>ProcedureStore.ProcedureIterator.skipNext()</code></a> to skip the procedure without
+<div class="block">Calling this method does not need to convert the protobuf message to the Procedure class, so
+ if it returns true we can call <a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--"><code>ProcedureStore.ProcedureIterator.skipNext()</code></a> to skip the procedure without
deserializing.</div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureTree.Iter.html#isNextFinished--">isNextFinished()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureTree.Iter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureTree.Iter</a></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index a2ca0d5..f7aa217 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,9 +167,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index d4aa23c..9c3fec8 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -555,23 +555,23 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
index e67b778..329f62f 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
@@ -201,8 +201,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 2aafe24..0b3542b 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -183,13 +183,13 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 8214ab1..f7c3bb1 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -274,12 +274,12 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 7557e4f..427b9f5 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -353,9 +353,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index a77bff8..c069040 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -293,10 +293,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index abd92a9..1799704 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -198,8 +198,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 92d2987..fa12394 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -348,10 +348,10 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 59af371..96eed6e 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -215,10 +215,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index fa88f86..9318b85 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -437,19 +437,19 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<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><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
index ddcc915..34c0705 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.919">ProcedureExecutor.FailedProcedure</a><TEnvironment>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.917">ProcedureExecutor.FailedProcedure</a><TEnvironment>
extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><TEnvironment></pre>
</li>
</ul>
@@ -279,7 +279,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
<ul class="blockListLast">
<li class="blockList">
<h4>procName</h4>
-<pre>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> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.920">procName</a></pre>
+<pre>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> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.918">procName</a></pre>
</li>
</ul>
</li>
@@ -296,7 +296,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
<ul class="blockList">
<li class="blockList">
<h4>FailedProcedure</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.922">FailedProcedure</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.920">FailedProcedure</a>()</pre>
</li>
</ul>
<a name="FailedProcedure-long-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.util.NonceKey-java.io.IOException-">
@@ -305,7 +305,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
<ul class="blockListLast">
<li class="blockList">
<h4>FailedProcedure</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.925">FailedProcedure</a>(long procId,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.923">FailedProcedure</a>(long procId,
<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> procName,
<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> owner,
<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a> nonceKey,
@@ -326,7 +326,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
<ul class="blockList">
<li class="blockList">
<h4>getProcName</h4>
-<pre>public <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/ProcedureExecutor.FailedProcedure.html#line.939">getProcName</a>()</pre>
+<pre>public <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/ProcedureExecutor.FailedProcedure.html#line.937">getProcName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcName--">getProcName</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html" title="type parameter in ProcedureExecutor.FailedProcedure">TEnvironment</a>></code></dd>
@@ -341,7 +341,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>protected <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html" title="type parameter in ProcedureExecutor.FailedProcedure">TEnvironment</a>>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.944">execute</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html" title="type parameter in ProcedureExecutor.FailedProcedure">TEnvironment</a> env)
+<pre>protected <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html" title="type parameter in ProcedureExecutor.FailedProcedure">TEnvironment</a>>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.942">execute</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html" title="type parameter in ProcedureExecutor.FailedProcedure">TEnvironment</a> 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>
@@ -373,7 +373,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
<ul class="blockList">
<li class="blockList">
<h4>rollback</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.951">rollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html" title="type parameter in ProcedureExecutor.FailedProcedure">TEnvironment</a> env)
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.949">rollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html" title="type parameter in ProcedureExecutor.FailedProcedure">TEnvironment</a> 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"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback-TEnvironment-">Procedure</a></code></span></div>
@@ -402,7 +402,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
<ul class="blockList">
<li class="blockList">
<h4>abort</h4>
-<pre>protected boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.957">abort</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html" title="type parameter in ProcedureExecutor.FailedProcedure">TEnvironment</a> env)</pre>
+<pre>protected boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.955">abort</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html" title="type parameter in ProcedureExecutor.FailedProcedure">TEnvironment</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort-TEnvironment-">Procedure</a></code></span></div>
<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
@@ -425,7 +425,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.962">serializeStateData</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.960">serializeStateData</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> 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"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -447,7 +447,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
<ul class="blockListLast">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.967">deserializeStateData</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#line.965">deserializeStateData</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> 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"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
index a836e51..ed0c0c3 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html
@@ -132,7 +132,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2129">ProcedureExecutor.KeepAliveWorkerThread</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2127">ProcedureExecutor.KeepAliveWorkerThread</a>
extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.WorkerThread</a></pre>
</li>
</ul>
@@ -252,7 +252,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
<ul class="blockListLast">
<li class="blockList">
<h4>KeepAliveWorkerThread</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html#line.2131">KeepAliveWorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a> group)</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html#line.2129">KeepAliveWorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a> group)</pre>
</li>
</ul>
</li>
@@ -269,7 +269,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
<ul class="blockListLast">
<li class="blockList">
<h4>keepAlive</h4>
-<pre>protected boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html#line.2136">keepAlive</a>(long lastUpdate)</pre>
+<pre>protected boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.KeepAliveWorkerThread.html#line.2134">keepAlive</a>(long lastUpdate)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#keepAlive-long-">keepAlive</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.WorkerThread</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
index 4c76a29..05c9773 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2149">ProcedureExecutor.WorkerMonitor</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2147">ProcedureExecutor.WorkerMonitor</a>
extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">InlineChore</a></pre>
</li>
</ul>
@@ -277,7 +277,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>WORKER_MONITOR_INTERVAL_CONF_KEY</h4>
-<pre>public static final <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/ProcedureExecutor.WorkerMonitor.html#line.2150">WORKER_MONITOR_INTERVAL_CONF_KEY</a></pre>
+<pre>public static final <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/ProcedureExecutor.WorkerMonitor.html#line.2148">WORKER_MONITOR_INTERVAL_CONF_KEY</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_MONITOR_INTERVAL_CONF_KEY">Constant Field Values</a></dd>
@@ -290,7 +290,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_WORKER_MONITOR_INTERVAL</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2152">DEFAULT_WORKER_MONITOR_INTERVAL</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2150">DEFAULT_WORKER_MONITOR_INTERVAL</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_MONITOR_INTERVAL">Constant Field Values</a></dd>
@@ -303,7 +303,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>WORKER_STUCK_THRESHOLD_CONF_KEY</h4>
-<pre>public static final <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/ProcedureExecutor.WorkerMonitor.html#line.2154">WORKER_STUCK_THRESHOLD_CONF_KEY</a></pre>
+<pre>public static final <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/ProcedureExecutor.WorkerMonitor.html#line.2152">WORKER_STUCK_THRESHOLD_CONF_KEY</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_STUCK_THRESHOLD_CONF_KEY">Constant Field Values</a></dd>
@@ -316,7 +316,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_WORKER_STUCK_THRESHOLD</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2156">DEFAULT_WORKER_STUCK_THRESHOLD</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2154">DEFAULT_WORKER_STUCK_THRESHOLD</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_STUCK_THRESHOLD">Constant Field Values</a></dd>
@@ -329,7 +329,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</h4>
-<pre>public static final <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/ProcedureExecutor.WorkerMonitor.html#line.2158">WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</a></pre>
+<pre>public static final <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/ProcedureExecutor.WorkerMonitor.html#line.2156">WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY">Constant Field Values</a></dd>
@@ -342,7 +342,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</h4>
-<pre>private static final float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2160">DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</a></pre>
+<pre>private static final float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2158">DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_ADD_STUCK_PERCENTAGE">Constant Field Values</a></dd>
@@ -355,7 +355,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>addWorkerStuckPercentage</h4>
-<pre>private float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2162">addWorkerStuckPercentage</a></pre>
+<pre>private float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2160">addWorkerStuckPercentage</a></pre>
</li>
</ul>
<a name="timeoutInterval">
@@ -364,7 +364,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>timeoutInterval</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2163">timeoutInterval</a></pre>
+<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2161">timeoutInterval</a></pre>
</li>
</ul>
<a name="stuckThreshold">
@@ -373,7 +373,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockListLast">
<li class="blockList">
<h4>stuckThreshold</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2164">stuckThreshold</a></pre>
+<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2162">stuckThreshold</a></pre>
</li>
</ul>
</li>
@@ -390,7 +390,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockListLast">
<li class="blockList">
<h4>WorkerMonitor</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2166">WorkerMonitor</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2164">WorkerMonitor</a>()</pre>
</li>
</ul>
</li>
@@ -407,7 +407,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2171">run</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2169">run</a>()</pre>
</li>
</ul>
<a name="checkForStuckWorkers--">
@@ -416,7 +416,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>checkForStuckWorkers</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2179">checkForStuckWorkers</a>()</pre>
+<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2177">checkForStuckWorkers</a>()</pre>
</li>
</ul>
<a name="checkThreadCount-int-">
@@ -425,7 +425,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>checkThreadCount</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2195">checkThreadCount</a>(int stuckCount)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2193">checkThreadCount</a>(int stuckCount)</pre>
</li>
</ul>
<a name="refreshConfig--">
@@ -434,7 +434,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockList">
<li class="blockList">
<h4>refreshConfig</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2214">refreshConfig</a>()</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2212">refreshConfig</a>()</pre>
</li>
</ul>
<a name="getTimeoutInterval--">
@@ -443,7 +443,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.h
<ul class="blockListLast">
<li class="blockList">
<h4>getTimeoutInterval</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2224">getTimeoutInterval</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.2222">getTimeoutInterval</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html#getTimeoutInterval--">getTimeoutInterval</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">InlineChore</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
index 866fefb..e39db3b 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
@@ -131,7 +131,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2050">ProcedureExecutor.WorkerThread</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.2048">ProcedureExecutor.WorkerThread</a>
extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThread.html" title="class in org.apache.hadoop.hbase.procedure2">StoppableThread</a></pre>
</li>
</ul>
@@ -282,7 +282,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
<ul class="blockList">
<li class="blockList">
<h4>executionStartTime</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2051">executionStartTime</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2049">executionStartTime</a></pre>
</li>
</ul>
<a name="activeProcedure">
@@ -291,7 +291,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
<ul class="blockListLast">
<li class="blockList">
<h4>activeProcedure</h4>
-<pre>private volatile <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2052">activeProcedure</a></pre>
+<pre>private volatile <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2050">activeProcedure</a></pre>
</li>
</ul>
</li>
@@ -308,7 +308,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
<ul class="blockList">
<li class="blockList">
<h4>WorkerThread</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2054">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a> group)</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2052">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a> group)</pre>
</li>
</ul>
<a name="WorkerThread-java.lang.ThreadGroup-java.lang.String-">
@@ -317,7 +317,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
<ul class="blockListLast">
<li class="blockList">
<h4>WorkerThread</h4>
-<pre>protected <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2058">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a> group,
+<pre>protected <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2056">WorkerThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a> group,
<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> prefix)</pre>
</li>
</ul>
@@ -335,7 +335,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
<ul class="blockList">
<li class="blockList">
<h4>sendStopSignal</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2064">sendStopSignal</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2062">sendStopSignal</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThread.html#sendStopSignal--">sendStopSignal</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThread.html" title="class in org.apache.hadoop.hbase.procedure2">StoppableThread</a></code></dd>
@@ -348,7 +348,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2068">run</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2066">run</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code> in interface <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -363,7 +363,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
<ul class="blockList">
<li class="blockList">
<h4>toString</h4>
-<pre>public <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/ProcedureExecutor.WorkerThread.html#line.2109">toString</a>()</pre>
+<pre>public <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/ProcedureExecutor.WorkerThread.html#line.2107">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/Thread.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code> in class <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></code></dd>
@@ -376,7 +376,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
<ul class="blockList">
<li class="blockList">
<h4>getCurrentRunTime</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2117">getCurrentRunTime</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2115">getCurrentRunTime</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the time since the current procedure is running</dd>
@@ -389,7 +389,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/StoppableThre
<ul class="blockListLast">
<li class="blockList">
<h4>keepAlive</h4>
-<pre>protected boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2122">keepAlive</a>(long lastUpdate)</pre>
+<pre>protected boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.2120">keepAlive</a>(long lastUpdate)</pre>
</li>
</ul>
</li>
[10/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 8d98ec3..f2d5735 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -179,4148 +179,4147 @@
<span class="sourceLineNo">171</span> * avoiding port contention if another local HBase instance is already running).<a name="line.171"></a>
<span class="sourceLineNo">172</span> * <p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.172"></a>
<span class="sourceLineNo">173</span> * setting it to true.<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * Trigger pre commit.<a name="line.174"></a>
-<span class="sourceLineNo">175</span> */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>@InterfaceAudience.Public<a name="line.176"></a>
-<span class="sourceLineNo">177</span>@SuppressWarnings("deprecation")<a name="line.177"></a>
-<span class="sourceLineNo">178</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span> /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * used in mini dfs.<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * @deprecated can be used only with mini dfs<a name="line.184"></a>
-<span class="sourceLineNo">185</span> */<a name="line.185"></a>
-<span class="sourceLineNo">186</span> @Deprecated<a name="line.186"></a>
-<span class="sourceLineNo">187</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.189"></a>
-<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * The default number of regions per regionserver when creating a pre-split<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * table.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.194"></a>
+<span class="sourceLineNo">174</span> */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>@InterfaceAudience.Public<a name="line.175"></a>
+<span class="sourceLineNo">176</span>@SuppressWarnings("deprecation")<a name="line.176"></a>
+<span class="sourceLineNo">177</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span> /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * used in mini dfs.<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * @deprecated can be used only with mini dfs<a name="line.183"></a>
+<span class="sourceLineNo">184</span> */<a name="line.184"></a>
+<span class="sourceLineNo">185</span> @Deprecated<a name="line.185"></a>
+<span class="sourceLineNo">186</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
+<span class="sourceLineNo">189</span> /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * table.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> */<a name="line.192"></a>
+<span class="sourceLineNo">193</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.197"></a>
-<span class="sourceLineNo">198</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> private MiniDFSCluster dfsCluster = null;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span> private MiniMRCluster mrCluster = null;<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.205"></a>
-<span class="sourceLineNo">206</span> private volatile boolean miniClusterRunning;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span> private String hadoopLogDir;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.210"></a>
-<span class="sourceLineNo">211</span> * HBaseTestingUtility*/<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private Path dataTestDirOnTestFS = null;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span> /**<a name="line.214"></a>
-<span class="sourceLineNo">215</span> * Shared cluster connection.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> */<a name="line.216"></a>
-<span class="sourceLineNo">217</span> private volatile Connection connection;<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static String FS_URI;<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.222"></a>
-<span class="sourceLineNo">223</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Checks to see if a specific port is available.<a name="line.226"></a>
-<span class="sourceLineNo">227</span> *<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * @param port the port number to check for availability<a name="line.228"></a>
-<span class="sourceLineNo">229</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.229"></a>
-<span class="sourceLineNo">230</span> */<a name="line.230"></a>
-<span class="sourceLineNo">231</span> public static boolean available(int port) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span> ServerSocket ss = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> DatagramSocket ds = null;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> try {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> ss = new ServerSocket(port);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> ss.setReuseAddress(true);<a name="line.236"></a>
-<span class="sourceLineNo">237</span> ds = new DatagramSocket(port);<a name="line.237"></a>
-<span class="sourceLineNo">238</span> ds.setReuseAddress(true);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> return true;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> } catch (IOException e) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // Do nothing<a name="line.241"></a>
-<span class="sourceLineNo">242</span> } finally {<a name="line.242"></a>
-<span class="sourceLineNo">243</span> if (ds != null) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> ds.close();<a name="line.244"></a>
-<span class="sourceLineNo">245</span> }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> if (ss != null) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span> try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> ss.close();<a name="line.249"></a>
-<span class="sourceLineNo">250</span> } catch (IOException e) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> /* should not be thrown */<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span> }<a name="line.253"></a>
-<span class="sourceLineNo">254</span> }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span> return false;<a name="line.256"></a>
-<span class="sourceLineNo">257</span> }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span> /**<a name="line.259"></a>
-<span class="sourceLineNo">260</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.260"></a>
-<span class="sourceLineNo">261</span> * testing.<a name="line.261"></a>
-<span class="sourceLineNo">262</span> */<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.263"></a>
-<span class="sourceLineNo">264</span> List<Object[]> configurations = new ArrayList<>();<a name="line.264"></a>
-<span class="sourceLineNo">265</span> for (Compression.Algorithm comprAlgo :<a name="line.265"></a>
-<span class="sourceLineNo">266</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> for (BloomType bloomType : BloomType.values()) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span> }<a name="line.270"></a>
-<span class="sourceLineNo">271</span> return Collections.unmodifiableList(configurations);<a name="line.271"></a>
-<span class="sourceLineNo">272</span> }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span> /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span> * Create combination of memstoreTS and tags<a name="line.275"></a>
-<span class="sourceLineNo">276</span> */<a name="line.276"></a>
-<span class="sourceLineNo">277</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> List<Object[]> configurations = new ArrayList<>();<a name="line.278"></a>
-<span class="sourceLineNo">279</span> configurations.add(new Object[] { false, false });<a name="line.279"></a>
-<span class="sourceLineNo">280</span> configurations.add(new Object[] { false, true });<a name="line.280"></a>
-<span class="sourceLineNo">281</span> configurations.add(new Object[] { true, false });<a name="line.281"></a>
-<span class="sourceLineNo">282</span> configurations.add(new Object[] { true, true });<a name="line.282"></a>
-<span class="sourceLineNo">283</span> return Collections.unmodifiableList(configurations);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> List<Object[]> configurations = new ArrayList<>();<a name="line.287"></a>
-<span class="sourceLineNo">288</span> configurations.add(new Object[] { false, false, true });<a name="line.288"></a>
-<span class="sourceLineNo">289</span> configurations.add(new Object[] { false, false, false });<a name="line.289"></a>
-<span class="sourceLineNo">290</span> configurations.add(new Object[] { false, true, true });<a name="line.290"></a>
-<span class="sourceLineNo">291</span> configurations.add(new Object[] { false, true, false });<a name="line.291"></a>
-<span class="sourceLineNo">292</span> configurations.add(new Object[] { true, false, true });<a name="line.292"></a>
-<span class="sourceLineNo">293</span> configurations.add(new Object[] { true, false, false });<a name="line.293"></a>
-<span class="sourceLineNo">294</span> configurations.add(new Object[] { true, true, true });<a name="line.294"></a>
-<span class="sourceLineNo">295</span> configurations.add(new Object[] { true, true, false });<a name="line.295"></a>
-<span class="sourceLineNo">296</span> return Collections.unmodifiableList(configurations);<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.299"></a>
-<span class="sourceLineNo">300</span> bloomAndCompressionCombinations();<a name="line.300"></a>
+<span class="sourceLineNo">196</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span> private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
+<span class="sourceLineNo">202</span> private MiniMRCluster mrCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span> private volatile boolean miniClusterRunning;<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span> private String hadoopLogDir;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
+<span class="sourceLineNo">210</span> * HBaseTestingUtility*/<a name="line.210"></a>
+<span class="sourceLineNo">211</span> private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Shared cluster connection.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private volatile Connection connection;<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static String FS_URI;<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.221"></a>
+<span class="sourceLineNo">222</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span> * Checks to see if a specific port is available.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> *<a name="line.226"></a>
+<span class="sourceLineNo">227</span> * @param port the port number to check for availability<a name="line.227"></a>
+<span class="sourceLineNo">228</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.228"></a>
+<span class="sourceLineNo">229</span> */<a name="line.229"></a>
+<span class="sourceLineNo">230</span> public static boolean available(int port) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span> ServerSocket ss = null;<a name="line.231"></a>
+<span class="sourceLineNo">232</span> DatagramSocket ds = null;<a name="line.232"></a>
+<span class="sourceLineNo">233</span> try {<a name="line.233"></a>
+<span class="sourceLineNo">234</span> ss = new ServerSocket(port);<a name="line.234"></a>
+<span class="sourceLineNo">235</span> ss.setReuseAddress(true);<a name="line.235"></a>
+<span class="sourceLineNo">236</span> ds = new DatagramSocket(port);<a name="line.236"></a>
+<span class="sourceLineNo">237</span> ds.setReuseAddress(true);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> return true;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> } catch (IOException e) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> // Do nothing<a name="line.240"></a>
+<span class="sourceLineNo">241</span> } finally {<a name="line.241"></a>
+<span class="sourceLineNo">242</span> if (ds != null) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span> ds.close();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span> if (ss != null) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span> try {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> ss.close();<a name="line.248"></a>
+<span class="sourceLineNo">249</span> } catch (IOException e) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> /* should not be thrown */<a name="line.250"></a>
+<span class="sourceLineNo">251</span> }<a name="line.251"></a>
+<span class="sourceLineNo">252</span> }<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> return false;<a name="line.255"></a>
+<span class="sourceLineNo">256</span> }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span> /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * testing.<a name="line.260"></a>
+<span class="sourceLineNo">261</span> */<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> List<Object[]> configurations = new ArrayList<>();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> for (Compression.Algorithm comprAlgo :<a name="line.264"></a>
+<span class="sourceLineNo">265</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span> for (BloomType bloomType : BloomType.values()) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.267"></a>
+<span class="sourceLineNo">268</span> }<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span> return Collections.unmodifiableList(configurations);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span> /**<a name="line.273"></a>
+<span class="sourceLineNo">274</span> * Create combination of memstoreTS and tags<a name="line.274"></a>
+<span class="sourceLineNo">275</span> */<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> List<Object[]> configurations = new ArrayList<>();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> configurations.add(new Object[] { false, false });<a name="line.278"></a>
+<span class="sourceLineNo">279</span> configurations.add(new Object[] { false, true });<a name="line.279"></a>
+<span class="sourceLineNo">280</span> configurations.add(new Object[] { true, false });<a name="line.280"></a>
+<span class="sourceLineNo">281</span> configurations.add(new Object[] { true, true });<a name="line.281"></a>
+<span class="sourceLineNo">282</span> return Collections.unmodifiableList(configurations);<a name="line.282"></a>
+<span class="sourceLineNo">283</span> }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span> List<Object[]> configurations = new ArrayList<>();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> configurations.add(new Object[] { false, false, true });<a name="line.287"></a>
+<span class="sourceLineNo">288</span> configurations.add(new Object[] { false, false, false });<a name="line.288"></a>
+<span class="sourceLineNo">289</span> configurations.add(new Object[] { false, true, true });<a name="line.289"></a>
+<span class="sourceLineNo">290</span> configurations.add(new Object[] { false, true, false });<a name="line.290"></a>
+<span class="sourceLineNo">291</span> configurations.add(new Object[] { true, false, true });<a name="line.291"></a>
+<span class="sourceLineNo">292</span> configurations.add(new Object[] { true, false, false });<a name="line.292"></a>
+<span class="sourceLineNo">293</span> configurations.add(new Object[] { true, true, true });<a name="line.293"></a>
+<span class="sourceLineNo">294</span> configurations.add(new Object[] { true, true, false });<a name="line.294"></a>
+<span class="sourceLineNo">295</span> return Collections.unmodifiableList(configurations);<a name="line.295"></a>
+<span class="sourceLineNo">296</span> }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.298"></a>
+<span class="sourceLineNo">299</span> bloomAndCompressionCombinations();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.304"></a>
-<span class="sourceLineNo">305</span> *<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> *<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.311"></a>
-<span class="sourceLineNo">312</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.312"></a>
-<span class="sourceLineNo">313</span> * at which point they will switch to using mini DFS for storage.<a name="line.313"></a>
-<span class="sourceLineNo">314</span> */<a name="line.314"></a>
-<span class="sourceLineNo">315</span> public HBaseTestingUtility() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> this(HBaseConfiguration.create());<a name="line.316"></a>
-<span class="sourceLineNo">317</span> }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.320"></a>
-<span class="sourceLineNo">321</span> *<a name="line.321"></a>
-<span class="sourceLineNo">322</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.322"></a>
-<span class="sourceLineNo">323</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.323"></a>
-<span class="sourceLineNo">324</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.324"></a>
-<span class="sourceLineNo">325</span> *<a name="line.325"></a>
-<span class="sourceLineNo">326</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.326"></a>
-<span class="sourceLineNo">327</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.327"></a>
-<span class="sourceLineNo">328</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.328"></a>
-<span class="sourceLineNo">329</span> * at which point they will switch to using mini DFS for storage.<a name="line.329"></a>
-<span class="sourceLineNo">330</span> *<a name="line.330"></a>
-<span class="sourceLineNo">331</span> * @param conf The configuration to use for further operations<a name="line.331"></a>
-<span class="sourceLineNo">332</span> */<a name="line.332"></a>
-<span class="sourceLineNo">333</span> public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span> super(conf);<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.336"></a>
-<span class="sourceLineNo">337</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> // Save this for when setting default file:// breaks things<a name="line.339"></a>
-<span class="sourceLineNo">340</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.341"></a>
-<span class="sourceLineNo">342</span> }<a name="line.342"></a>
-<span class="sourceLineNo">343</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span> // Every cluster is a local cluster until we start DFS<a name="line.346"></a>
-<span class="sourceLineNo">347</span> // Note that conf could be null, but this.conf will not be<a name="line.347"></a>
-<span class="sourceLineNo">348</span> String dataTestDir = getDataTestDir().toString();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> this.conf.set("fs.defaultFS","file:///");<a name="line.349"></a>
-<span class="sourceLineNo">350</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> // If the value for random ports isn't set set it to true, thus making<a name="line.353"></a>
-<span class="sourceLineNo">354</span> // tests opt-out for random port assignment<a name="line.354"></a>
-<span class="sourceLineNo">355</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.355"></a>
-<span class="sourceLineNo">356</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.356"></a>
-<span class="sourceLineNo">357</span> }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span> /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.360"></a>
-<span class="sourceLineNo">361</span> * @return a normal HBaseTestingUtility<a name="line.361"></a>
-<span class="sourceLineNo">362</span> */<a name="line.362"></a>
-<span class="sourceLineNo">363</span> @Deprecated<a name="line.363"></a>
-<span class="sourceLineNo">364</span> public static HBaseTestingUtility createLocalHTU() {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> return new HBaseTestingUtility();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span> /**<a name="line.368"></a>
-<span class="sourceLineNo">369</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.369"></a>
-<span class="sourceLineNo">370</span> * @return a normal HBaseTestingUtility<a name="line.370"></a>
-<span class="sourceLineNo">371</span> */<a name="line.371"></a>
-<span class="sourceLineNo">372</span> @Deprecated<a name="line.372"></a>
-<span class="sourceLineNo">373</span> public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return new HBaseTestingUtility(c);<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> /**<a name="line.377"></a>
-<span class="sourceLineNo">378</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> */<a name="line.379"></a>
-<span class="sourceLineNo">380</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.380"></a>
-<span class="sourceLineNo">381</span> closeRegionAndWAL((HRegion)r);<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> /**<a name="line.384"></a>
-<span class="sourceLineNo">385</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.385"></a>
-<span class="sourceLineNo">386</span> */<a name="line.386"></a>
-<span class="sourceLineNo">387</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> if (r == null) return;<a name="line.388"></a>
-<span class="sourceLineNo">389</span> r.close();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> if (r.getWAL() == null) return;<a name="line.390"></a>
-<span class="sourceLineNo">391</span> r.getWAL().close();<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span> /**<a name="line.394"></a>
-<span class="sourceLineNo">395</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.395"></a>
-<span class="sourceLineNo">396</span> * you use the returned Configuration since {@link Connection} instances<a name="line.396"></a>
-<span class="sourceLineNo">397</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.397"></a>
-<span class="sourceLineNo">398</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.398"></a>
-<span class="sourceLineNo">399</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.399"></a>
-<span class="sourceLineNo">400</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.400"></a>
-<span class="sourceLineNo">401</span> * make a copy and use that. Do<a name="line.401"></a>
-<span class="sourceLineNo">402</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.402"></a>
-<span class="sourceLineNo">403</span> * @return Instance of Configuration.<a name="line.403"></a>
-<span class="sourceLineNo">404</span> */<a name="line.404"></a>
-<span class="sourceLineNo">405</span> @Override<a name="line.405"></a>
-<span class="sourceLineNo">406</span> public Configuration getConfiguration() {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> return super.getConfiguration();<a name="line.407"></a>
-<span class="sourceLineNo">408</span> }<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span> this.hbaseCluster = hbaseCluster;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span> /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.415"></a>
-<span class="sourceLineNo">416</span> * Give it a random name so can have many concurrent tests running if<a name="line.416"></a>
-<span class="sourceLineNo">417</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.417"></a>
-<span class="sourceLineNo">418</span> * System property, as it's what minidfscluster bases<a name="line.418"></a>
-<span class="sourceLineNo">419</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.419"></a>
-<span class="sourceLineNo">420</span> * instances -- another instance could grab the temporary<a name="line.420"></a>
-<span class="sourceLineNo">421</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * single instance only is how the minidfscluster works.<a name="line.422"></a>
-<span class="sourceLineNo">423</span> *<a name="line.423"></a>
-<span class="sourceLineNo">424</span> * We also create the underlying directory for<a name="line.424"></a>
-<span class="sourceLineNo">425</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.425"></a>
-<span class="sourceLineNo">426</span> * in the conf, and as a system property for hadoop.tmp.dir<a name="line.426"></a>
-<span class="sourceLineNo">427</span> *<a name="line.427"></a>
-<span class="sourceLineNo">428</span> * @return The calculated data test build directory, if newly-created.<a name="line.428"></a>
-<span class="sourceLineNo">429</span> */<a name="line.429"></a>
-<span class="sourceLineNo">430</span> @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span> protected Path setupDataTestDir() {<a name="line.431"></a>
-<span class="sourceLineNo">432</span> Path testPath = super.setupDataTestDir();<a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (null == testPath) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> return null;<a name="line.434"></a>
-<span class="sourceLineNo">435</span> }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span> createSubDirAndSystemProperty(<a name="line.437"></a>
-<span class="sourceLineNo">438</span> "hadoop.log.dir",<a name="line.438"></a>
-<span class="sourceLineNo">439</span> testPath, "hadoop-log-dir");<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.441"></a>
-<span class="sourceLineNo">442</span> // we want our own value to ensure uniqueness on the same machine<a name="line.442"></a>
-<span class="sourceLineNo">443</span> createSubDirAndSystemProperty(<a name="line.443"></a>
-<span class="sourceLineNo">444</span> "hadoop.tmp.dir",<a name="line.444"></a>
-<span class="sourceLineNo">445</span> testPath, "hadoop-tmp-dir");<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.447"></a>
-<span class="sourceLineNo">448</span> createSubDir(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "mapreduce.cluster.local.dir",<a name="line.449"></a>
-<span class="sourceLineNo">450</span> testPath, "mapred-local-dir");<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span> return testPath;<a name="line.452"></a>
-<span class="sourceLineNo">453</span> }<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span> private void createSubDirAndSystemProperty(<a name="line.455"></a>
-<span class="sourceLineNo">456</span> String propertyName, Path parent, String subDirName){<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> String sysValue = System.getProperty(propertyName);<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> if (sysValue != null) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span> // There is already a value set. So we do nothing but hope<a name="line.461"></a>
-<span class="sourceLineNo">462</span> // that there will be no conflicts<a name="line.462"></a>
-<span class="sourceLineNo">463</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.463"></a>
-<span class="sourceLineNo">464</span> sysValue + " so I do NOT create it in " + parent);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> String confValue = conf.get(propertyName);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.466"></a>
-<span class="sourceLineNo">467</span> LOG.warn(<a name="line.467"></a>
-<span class="sourceLineNo">468</span> propertyName + " property value differs in configuration and system: "+<a name="line.468"></a>
-<span class="sourceLineNo">469</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.469"></a>
-<span class="sourceLineNo">470</span> " Erasing configuration value by system value."<a name="line.470"></a>
-<span class="sourceLineNo">471</span> );<a name="line.471"></a>
-<span class="sourceLineNo">472</span> }<a name="line.472"></a>
-<span class="sourceLineNo">473</span> conf.set(propertyName, sysValue);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> } else {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.475"></a>
-<span class="sourceLineNo">476</span> createSubDir(propertyName, parent, subDirName);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span> }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span> /**<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.482"></a>
-<span class="sourceLineNo">483</span> * for the test filesystem by default<a name="line.483"></a>
-<span class="sourceLineNo">484</span> * @see #setupDataTestDirOnTestFS()<a name="line.484"></a>
-<span class="sourceLineNo">485</span> * @see #getTestFileSystem()<a name="line.485"></a>
-<span class="sourceLineNo">486</span> */<a name="line.486"></a>
-<span class="sourceLineNo">487</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span> FileSystem fs = getTestFileSystem();<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span><a name="line.491"></a>
-<span class="sourceLineNo">492</span> /**<a name="line.492"></a>
-<span class="sourceLineNo">493</span> * @return META table descriptor<a name="line.493"></a>
-<span class="sourceLineNo">494</span> * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.494"></a>
-<span class="sourceLineNo">495</span> * use {@link #getMetaTableDescriptorBuilder()}<a name="line.495"></a>
-<span class="sourceLineNo">496</span> */<a name="line.496"></a>
-<span class="sourceLineNo">497</span> @Deprecated<a name="line.497"></a>
-<span class="sourceLineNo">498</span> public HTableDescriptor getMetaTableDescriptor() {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.499"></a>
-<span class="sourceLineNo">500</span> }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> /**<a name="line.502"></a>
-<span class="sourceLineNo">503</span> * @return META table descriptor<a name="line.503"></a>
-<span class="sourceLineNo">504</span> */<a name="line.504"></a>
-<span class="sourceLineNo">505</span> public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span> return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.507"></a>
-<span class="sourceLineNo">508</span> } catch (IOException e) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span> throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.509"></a>
-<span class="sourceLineNo">510</span> }<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> /**<a name="line.513"></a>
-<span class="sourceLineNo">514</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.514"></a>
-<span class="sourceLineNo">515</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.515"></a>
-<span class="sourceLineNo">516</span> * if the test relies on it.<a name="line.516"></a>
-<span class="sourceLineNo">517</span> * @return a unique path in the test filesystem<a name="line.517"></a>
-<span class="sourceLineNo">518</span> */<a name="line.518"></a>
-<span class="sourceLineNo">519</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.519"></a>
-<span class="sourceLineNo">520</span> if (dataTestDirOnTestFS == null) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span> setupDataTestDirOnTestFS();<a name="line.521"></a>
-<span class="sourceLineNo">522</span> }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span> return dataTestDirOnTestFS;<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> /**<a name="line.527"></a>
-<span class="sourceLineNo">528</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.528"></a>
-<span class="sourceLineNo">529</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.529"></a>
-<span class="sourceLineNo">530</span> * if the test relies on it.<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * @return a unique path in the test filesystem<a name="line.531"></a>
-<span class="sourceLineNo">532</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.532"></a>
-<span class="sourceLineNo">533</span> */<a name="line.533"></a>
-<span class="sourceLineNo">534</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span> /**<a name="line.538"></a>
-<span class="sourceLineNo">539</span> * Sets up a path in test filesystem to be used by tests.<a name="line.539"></a>
-<span class="sourceLineNo">540</span> * Creates a new directory if not already setup.<a name="line.540"></a>
-<span class="sourceLineNo">541</span> */<a name="line.541"></a>
-<span class="sourceLineNo">542</span> private void setupDataTestDirOnTestFS() throws IOException {<a name="line.542"></a>
-<span class="sourceLineNo">543</span> if (dataTestDirOnTestFS != null) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span> LOG.warn("Data test on test fs dir already setup in "<a name="line.544"></a>
-<span class="sourceLineNo">545</span> + dataTestDirOnTestFS.toString());<a name="line.545"></a>
-<span class="sourceLineNo">546</span> return;<a name="line.546"></a>
-<span class="sourceLineNo">547</span> }<a name="line.547"></a>
-<span class="sourceLineNo">548</span> dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.548"></a>
-<span class="sourceLineNo">549</span> }<a name="line.549"></a>
-<span class="sourceLineNo">550</span><a name="line.550"></a>
-<span class="sourceLineNo">551</span> /**<a name="line.551"></a>
-<span class="sourceLineNo">552</span> * Sets up a new path in test filesystem to be used by tests.<a name="line.552"></a>
-<span class="sourceLineNo">553</span> */<a name="line.553"></a>
-<span class="sourceLineNo">554</span> private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.554"></a>
-<span class="sourceLineNo">555</span> //The file system can be either local, mini dfs, or if the configuration<a name="line.555"></a>
-<span class="sourceLineNo">556</span> //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.556"></a>
-<span class="sourceLineNo">557</span> //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.557"></a>
-<span class="sourceLineNo">558</span> //the working directory, and create a unique sub dir there<a name="line.558"></a>
-<span class="sourceLineNo">559</span> FileSystem fs = getTestFileSystem();<a name="line.559"></a>
-<span class="sourceLineNo">560</span> Path newDataTestDir;<a name="line.560"></a>
-<span class="sourceLineNo">561</span> String randomStr = getRandomUUID().toString();<a name="line.561"></a>
-<span class="sourceLineNo">562</span> if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.563"></a>
-<span class="sourceLineNo">564</span> File dataTestDir = new File(newDataTestDir.toString());<a name="line.564"></a>
-<span class="sourceLineNo">565</span> if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.565"></a>
-<span class="sourceLineNo">566</span> } else {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> Path base = getBaseTestDirOnTestFS();<a name="line.567"></a>
-<span class="sourceLineNo">568</span> newDataTestDir = new Path(base, randomStr);<a name="line.568"></a>
-<span class="sourceLineNo">569</span> if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.569"></a>
-<span class="sourceLineNo">570</span> }<a name="line.570"></a>
-<span class="sourceLineNo">571</span> return newDataTestDir;<a name="line.571"></a>
-<span class="sourceLineNo">572</span> }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span> /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span> * Cleans the test data directory on the test filesystem.<a name="line.575"></a>
-<span class="sourceLineNo">576</span> * @return True if we removed the test dirs<a name="line.576"></a>
-<span class="sourceLineNo">577</span> * @throws IOException<a name="line.577"></a>
-<span class="sourceLineNo">578</span> */<a name="line.578"></a>
-<span class="sourceLineNo">579</span> public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span> boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> if (ret)<a name="line.581"></a>
-<span class="sourceLineNo">582</span> dataTestDirOnTestFS = null;<a name="line.582"></a>
-<span class="sourceLineNo">583</span> return ret;<a name="line.583"></a>
-<span class="sourceLineNo">584</span> }<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span> /**<a name="line.586"></a>
-<span class="sourceLineNo">587</span> * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.587"></a>
-<span class="sourceLineNo">588</span> * @return True if we removed child<a name="line.588"></a>
-<span class="sourceLineNo">589</span> * @throws IOException<a name="line.589"></a>
-<span class="sourceLineNo">590</span> */<a name="line.590"></a>
-<span class="sourceLineNo">591</span> public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return getTestFileSystem().delete(cpath, true);<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span> /**<a name="line.596"></a>
-<span class="sourceLineNo">597</span> * Start a minidfscluster.<a name="line.597"></a>
-<span class="sourceLineNo">598</span> * @param servers How many DNs to start.<a name="line.598"></a>
-<span class="sourceLineNo">599</span> * @throws Exception<a name="line.599"></a>
-<span class="sourceLineNo">600</span> * @see #shutdownMiniDFSCluster()<a name="line.600"></a>
-<span class="sourceLineNo">601</span> * @return The mini dfs cluster created.<a name="line.601"></a>
-<span class="sourceLineNo">602</span> */<a name="line.602"></a>
-<span class="sourceLineNo">603</span> public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.603"></a>
-<span class="sourceLineNo">604</span> return startMiniDFSCluster(servers, null);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> }<a name="line.605"></a>
-<span class="sourceLineNo">606</span><a name="line.606"></a>
-<span class="sourceLineNo">607</span> /**<a name="line.607"></a>
-<span class="sourceLineNo">608</span> * Start a minidfscluster.<a name="line.608"></a>
-<span class="sourceLineNo">609</span> * This is useful if you want to run datanode on distinct hosts for things<a name="line.609"></a>
-<span class="sourceLineNo">610</span> * like HDFS block location verification.<a name="line.610"></a>
-<span class="sourceLineNo">611</span> * If you start MiniDFSCluster without host names, all instances of the<a name="line.611"></a>
-<span class="sourceLineNo">612</span> * datanodes will have the same host name.<a name="line.612"></a>
-<span class="sourceLineNo">613</span> * @param hosts hostnames DNs to run on.<a name="line.613"></a>
-<span class="sourceLineNo">614</span> * @throws Exception<a name="line.614"></a>
-<span class="sourceLineNo">615</span> * @see #shutdownMiniDFSCluster()<a name="line.615"></a>
-<span class="sourceLineNo">616</span> * @return The mini dfs cluster created.<a name="line.616"></a>
-<span class="sourceLineNo">617</span> */<a name="line.617"></a>
-<span class="sourceLineNo">618</span> public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throws Exception {<a name="line.619"></a>
-<span class="sourceLineNo">620</span> if ( hosts != null && hosts.length != 0) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span> return startMiniDFSCluster(hosts.length, hosts);<a name="line.621"></a>
-<span class="sourceLineNo">622</span> } else {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> return startMiniDFSCluster(1, null);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> }<a name="line.624"></a>
-<span class="sourceLineNo">625</span> }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
-<span class="sourceLineNo">628</span> * Start a minidfscluster.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> * Can only create one.<a name="line.629"></a>
-<span class="sourceLineNo">630</span> * @param servers How many DNs to start.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> * @param hosts hostnames DNs to run on.<a name="line.631"></a>
-<span class="sourceLineNo">632</span> * @throws Exception<a name="line.632"></a>
-<span class="sourceLineNo">633</span> * @see #shutdownMiniDFSCluster()<a name="line.633"></a>
-<span class="sourceLineNo">634</span> * @return The mini dfs cluster created.<a name="line.634"></a>
-<span class="sourceLineNo">635</span> */<a name="line.635"></a>
-<span class="sourceLineNo">636</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.636"></a>
-<span class="sourceLineNo">637</span> throws Exception {<a name="line.637"></a>
-<span class="sourceLineNo">638</span> return startMiniDFSCluster(servers, null, hosts);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span> private void setFs() throws IOException {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> if(this.dfsCluster == null){<a name="line.642"></a>
-<span class="sourceLineNo">643</span> LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.643"></a>
-<span class="sourceLineNo">644</span> return;<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span> FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.646"></a>
-<span class="sourceLineNo">647</span> FSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.647"></a>
-<span class="sourceLineNo">648</span><a name="line.648"></a>
-<span class="sourceLineNo">649</span> // re-enable this check with dfs<a name="line.649"></a>
-<span class="sourceLineNo">650</span> conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.650"></a>
-<span class="sourceLineNo">651</span> }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String racks[], String hosts[])<a name="line.653"></a>
-<span class="sourceLineNo">654</span> throws Exception {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> createDirsAndSetProperties();<a name="line.655"></a>
-<span class="sourceLineNo">656</span> EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span> // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.658"></a>
-<span class="sourceLineNo">659</span> org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.util.MBeans.class).<a name="line.659"></a>
-<span class="sourceLineNo">660</span> setLevel(org.apache.log4j.Level.ERROR);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class).<a name="line.661"></a>
-<span class="sourceLineNo">662</span> setLevel(org.apache.log4j.Level.ERROR);<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span> TraceUtil.initTracer(conf);<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span> this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.666"></a>
-<span class="sourceLineNo">667</span> true, null, racks, hosts, null);<a name="line.667"></a>
-<span class="sourceLineNo">668</span><a name="line.668"></a>
-<span class="sourceLineNo">669</span> // Set this just-started cluster as our filesystem.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> setFs();<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span> // Wait for the cluster to be totally up<a name="line.672"></a>
-<span class="sourceLineNo">673</span> this.dfsCluster.waitClusterUp();<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span> //reset the test directory for test file system<a name="line.675"></a>
-<span class="sourceLineNo">676</span> dataTestDirOnTestFS = null;<a name="line.676"></a>
-<span class="sourceLineNo">677</span> String dataTestDir = getDataTestDir().toString();<a name="line.677"></a>
-<span class="sourceLineNo">678</span> conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.678"></a>
-<span class="sourceLineNo">679</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.679"></a>
-<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span> return this.dfsCluster;<a name="line.681"></a>
-<span class="sourceLineNo">682</span> }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span> public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> createDirsAndSetProperties();<a name="line.685"></a>
-<span class="sourceLineNo">686</span> dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.686"></a>
-<span class="sourceLineNo">687</span> null, null, null);<a name="line.687"></a>
-<span class="sourceLineNo">688</span> return dfsCluster;<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> /** This is used before starting HDFS and map-reduce mini-clusters */<a name="line.691"></a>
-<span class="sourceLineNo">692</span> private void createDirsAndSetProperties() throws IOException {<a name="line.692"></a>
-<span class="sourceLineNo">693</span> setupClusterTestDir();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.694"></a>
-<span class="sourceLineNo">695</span> System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.695"></a>
-<span class="sourceLineNo">696</span> createDirAndSetProperty("cache_data", "test.cache.data");<a name="line.696"></a>
-<span class="sourceLineNo">697</span> createDirAndSetProperty("hadoop_tmp", "hadoop.tmp.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span> hadoopLogDir = createDirAndSetProperty("hadoop_logs", "hadoop.log.dir");<a name="line.698"></a>
-<span class="sourceLineNo">699</span> createDirAndSetProperty("mapred_local", "mapreduce.cluster.local.dir");<a name="line.699"></a>
-<span class="sourceLineNo">700</span> createDirAndSetProperty("mapred_temp", "mapreduce.cluster.temp.dir");<a name="line.700"></a>
-<span class="sourceLineNo">701</span> enableShortCircuit();<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span> Path root = getDataTestDirOnTestFS("hadoop");<a name="line.703"></a>
-<span class="sourceLineNo">704</span> conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.704"></a>
-<span class="sourceLineNo">705</span> new Path(root, "mapred-output-dir").toString());<a name="line.705"></a>
-<span class="sourceLineNo">706</span> conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.706"></a>
-<span class="sourceLineNo">707</span> conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.707"></a>
-<span class="sourceLineNo">708</span> new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.708"></a>
-<span class="sourceLineNo">709</span> conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.709"></a>
-<span class="sourceLineNo">710</span> conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.710"></a>
-<span class="sourceLineNo">711</span> new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.711"></a>
-<span class="sourceLineNo">712</span> }<a name="line.712"></a>
+<span class="sourceLineNo">302</span> /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.303"></a>
+<span class="sourceLineNo">304</span> *<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> *<a name="line.308"></a>
+<span class="sourceLineNo">309</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.309"></a>
+<span class="sourceLineNo">310</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.310"></a>
+<span class="sourceLineNo">311</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * at which point they will switch to using mini DFS for storage.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public HBaseTestingUtility() {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> this(HBaseConfiguration.create());<a name="line.315"></a>
+<span class="sourceLineNo">316</span> }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> /**<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.319"></a>
+<span class="sourceLineNo">320</span> *<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.322"></a>
+<span class="sourceLineNo">323</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.323"></a>
+<span class="sourceLineNo">324</span> *<a name="line.324"></a>
+<span class="sourceLineNo">325</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.326"></a>
+<span class="sourceLineNo">327</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.327"></a>
+<span class="sourceLineNo">328</span> * at which point they will switch to using mini DFS for storage.<a name="line.328"></a>
+<span class="sourceLineNo">329</span> *<a name="line.329"></a>
+<span class="sourceLineNo">330</span> * @param conf The configuration to use for further operations<a name="line.330"></a>
+<span class="sourceLineNo">331</span> */<a name="line.331"></a>
+<span class="sourceLineNo">332</span> public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> super(conf);<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.335"></a>
+<span class="sourceLineNo">336</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> // Save this for when setting default file:// breaks things<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.343"></a>
+<span class="sourceLineNo">344</span> }<a name="line.344"></a>
+<span class="sourceLineNo">345</span> // Every cluster is a local cluster until we start DFS<a name="line.345"></a>
+<span class="sourceLineNo">346</span> // Note that conf could be null, but this.conf will not be<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String dataTestDir = getDataTestDir().toString();<a name="line.347"></a>
+<span class="sourceLineNo">348</span> this.conf.set("fs.defaultFS","file:///");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.349"></a>
+<span class="sourceLineNo">350</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.351"></a>
+<span class="sourceLineNo">352</span> // If the value for random ports isn't set set it to true, thus making<a name="line.352"></a>
+<span class="sourceLineNo">353</span> // tests opt-out for random port assignment<a name="line.353"></a>
+<span class="sourceLineNo">354</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.354"></a>
+<span class="sourceLineNo">355</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.355"></a>
+<span class="sourceLineNo">356</span> }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> /**<a name="line.358"></a>
+<span class="sourceLineNo">359</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @return a normal HBaseTestingUtility<a name="line.360"></a>
+<span class="sourceLineNo">361</span> */<a name="line.361"></a>
+<span class="sourceLineNo">362</span> @Deprecated<a name="line.362"></a>
+<span class="sourceLineNo">363</span> public static HBaseTestingUtility createLocalHTU() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span> return new HBaseTestingUtility();<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span> /**<a name="line.367"></a>
+<span class="sourceLineNo">368</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.368"></a>
+<span class="sourceLineNo">369</span> * @return a normal HBaseTestingUtility<a name="line.369"></a>
+<span class="sourceLineNo">370</span> */<a name="line.370"></a>
+<span class="sourceLineNo">371</span> @Deprecated<a name="line.371"></a>
+<span class="sourceLineNo">372</span> public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return new HBaseTestingUtility(c);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span> /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.377"></a>
+<span class="sourceLineNo">378</span> */<a name="line.378"></a>
+<span class="sourceLineNo">379</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> closeRegionAndWAL((HRegion)r);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.384"></a>
+<span class="sourceLineNo">385</span> */<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> if (r == null) return;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> r.close();<a name="line.388"></a>
+<span class="sourceLineNo">389</span> if (r.getWAL() == null) return;<a name="line.389"></a>
+<span class="sourceLineNo">390</span> r.getWAL().close();<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.394"></a>
+<span class="sourceLineNo">395</span> * you use the returned Configuration since {@link Connection} instances<a name="line.395"></a>
+<span class="sourceLineNo">396</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.396"></a>
+<span class="sourceLineNo">397</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.397"></a>
+<span class="sourceLineNo">398</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.398"></a>
+<span class="sourceLineNo">399</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.399"></a>
+<span class="sourceLineNo">400</span> * make a copy and use that. Do<a name="line.400"></a>
+<span class="sourceLineNo">401</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.401"></a>
+<span class="sourceLineNo">402</span> * @return Instance of Configuration.<a name="line.402"></a>
+<span class="sourceLineNo">403</span> */<a name="line.403"></a>
+<span class="sourceLineNo">404</span> @Override<a name="line.404"></a>
+<span class="sourceLineNo">405</span> public Configuration getConfiguration() {<a name="line.405"></a>
+<span class="sourceLineNo">406</span> return super.getConfiguration();<a name="line.406"></a>
+<span class="sourceLineNo">407</span> }<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> this.hbaseCluster = hbaseCluster;<a name="line.410"></a>
+<span class="sourceLineNo">411</span> }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span> /**<a name="line.413"></a>
+<span class="sourceLineNo">414</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.414"></a>
+<span class="sourceLineNo">415</span> * Give it a random name so can have many concurrent tests running if<a name="line.415"></a>
+<span class="sourceLineNo">416</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.416"></a>
+<span class="sourceLineNo">417</span> * System property, as it's what minidfscluster bases<a name="line.417"></a>
+<span class="sourceLineNo">418</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.418"></a>
+<span class="sourceLineNo">419</span> * instances -- another instance could grab the temporary<a name="line.419"></a>
+<span class="sourceLineNo">420</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> * single instance only is how the minidfscluster works.<a name="line.421"></a>
+<span class="sourceLineNo">422</span> *<a name="line.422"></a>
+<span class="sourceLineNo">423</span> * We also create the underlying directory for<a name="line.423"></a>
+<span class="sourceLineNo">424</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.424"></a>
+<span class="sourceLineNo">425</span> * in the conf, and as a system property for hadoop.tmp.dir<a name="line.425"></a>
+<span class="sourceLineNo">426</span> *<a name="line.426"></a>
+<span class="sourceLineNo">427</span> * @return The calculated data test build directory, if newly-created.<a name="line.427"></a>
+<span class="sourceLineNo">428</span> */<a name="line.428"></a>
+<span class="sourceLineNo">429</span> @Override<a name="line.429"></a>
+<span class="sourceLineNo">430</span> protected Path setupDataTestDir() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span> Path testPath = super.setupDataTestDir();<a name="line.431"></a>
+<span class="sourceLineNo">432</span> if (null == testPath) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span> return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span> }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span> createSubDirAndSystemProperty(<a name="line.436"></a>
+<span class="sourceLineNo">437</span> "hadoop.log.dir",<a name="line.437"></a>
+<span class="sourceLineNo">438</span> testPath, "hadoop-log-dir");<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.440"></a>
+<span class="sourceLineNo">441</span> // we want our own value to ensure uniqueness on the same machine<a name="line.441"></a>
+<span class="sourceLineNo">442</span> createSubDirAndSystemProperty(<a name="line.442"></a>
+<span class="sourceLineNo">443</span> "hadoop.tmp.dir",<a name="line.443"></a>
+<span class="sourceLineNo">444</span> testPath, "hadoop-tmp-dir");<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.446"></a>
+<span class="sourceLineNo">447</span> createSubDir(<a name="line.447"></a>
+<span class="sourceLineNo">448</span> "mapreduce.cluster.local.dir",<a name="line.448"></a>
+<span class="sourceLineNo">449</span> testPath, "mapred-local-dir");<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span> return testPath;<a name="line.451"></a>
+<span class="sourceLineNo">452</span> }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private void createSubDirAndSystemProperty(<a name="line.454"></a>
+<span class="sourceLineNo">455</span> String propertyName, Path parent, String subDirName){<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> String sysValue = System.getProperty(propertyName);<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span> if (sysValue != null) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span> // There is already a value set. So we do nothing but hope<a name="line.460"></a>
+<span class="sourceLineNo">461</span> // that there will be no conflicts<a name="line.461"></a>
+<span class="sourceLineNo">462</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.462"></a>
+<span class="sourceLineNo">463</span> sysValue + " so I do NOT create it in " + parent);<a name="line.463"></a>
+<span class="sourceLineNo">464</span> String confValue = conf.get(propertyName);<a name="line.464"></a>
+<span class="sourceLineNo">465</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.465"></a>
+<span class="sourceLineNo">466</span> LOG.warn(<a name="line.466"></a>
+<span class="sourceLineNo">467</span> propertyName + " property value differs in configuration and system: "+<a name="line.467"></a>
+<span class="sourceLineNo">468</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.468"></a>
+<span class="sourceLineNo">469</span> " Erasing configuration value by system value."<a name="line.469"></a>
+<span class="sourceLineNo">470</span> );<a name="line.470"></a>
+<span class="sourceLineNo">471</span> }<a name="line.471"></a>
+<span class="sourceLineNo">472</span> conf.set(propertyName, sysValue);<a name="line.472"></a>
+<span class="sourceLineNo">473</span> } else {<a name="line.473"></a>
+<span class="sourceLineNo">474</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.474"></a>
+<span class="sourceLineNo">475</span> createSubDir(propertyName, parent, subDirName);<a name="line.475"></a>
+<span class="sourceLineNo">476</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.476"></a>
+<span class="sourceLineNo">477</span> }<a name="line.477"></a>
+<span class="sourceLineNo">478</span> }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span> /**<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.481"></a>
+<span class="sourceLineNo">482</span> * for the test filesystem by default<a name="line.482"></a>
+<span class="sourceLineNo">483</span> * @see #setupDataTestDirOnTestFS()<a name="line.483"></a>
+<span class="sourceLineNo">484</span> * @see #getTestFileSystem()<a name="line.484"></a>
+<span class="sourceLineNo">485</span> */<a name="line.485"></a>
+<span class="sourceLineNo">486</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span> FileSystem fs = getTestFileSystem();<a name="line.487"></a>
+<span class="sourceLineNo">488</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.488"></a>
+<span class="sourceLineNo">489</span> }<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span> /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span> * @return META table descriptor<a name="line.492"></a>
+<span class="sourceLineNo">493</span> * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.493"></a>
+<span class="sourceLineNo">494</span> * use {@link #getMetaTableDescriptorBuilder()}<a name="line.494"></a>
+<span class="sourceLineNo">495</span> */<a name="line.495"></a>
+<span class="sourceLineNo">496</span> @Deprecated<a name="line.496"></a>
+<span class="sourceLineNo">497</span> public HTableDescriptor getMetaTableDescriptor() {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span> /**<a name="line.501"></a>
+<span class="sourceLineNo">502</span> * @return META table descriptor<a name="line.502"></a>
+<span class="sourceLineNo">503</span> */<a name="line.503"></a>
+<span class="sourceLineNo">504</span> public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.504"></a>
+<span class="sourceLineNo">505</span> try {<a name="line.505"></a>
+<span class="sourceLineNo">506</span> return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.506"></a>
+<span class="sourceLineNo">507</span> } catch (IOException e) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span> throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.508"></a>
+<span class="sourceLineNo">509</span> }<a name="line.509"></a>
+<span class="sourceLineNo">510</span> }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> /**<a name="line.512"></a>
+<span class="sourceLineNo">513</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.513"></a>
+<span class="sourceLineNo">514</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.514"></a>
+<span class="sourceLineNo">515</span> * if the test relies on it.<a name="line.515"></a>
+<span class="sourceLineNo">516</span> * @return a unique path in the test filesystem<a name="line.516"></a>
+<span class="sourceLineNo">517</span> */<a name="line.517"></a>
+<span class="sourceLineNo">518</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.518"></a>
+<span class="sourceLineNo">519</span> if (dataTestDirOnTestFS == null) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span> setupDataTestDirOnTestFS();<a name="line.520"></a>
+<span class="sourceLineNo">521</span> }<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span> return dataTestDirOnTestFS;<a name="line.523"></a>
+<span class="sourceLineNo">524</span> }<a name="line.524"></a>
+<span class="sourceLineNo">525</span><a name="line.525"></a>
+<span class="sourceLineNo">526</span> /**<a name="line.526"></a>
+<span class="sourceLineNo">527</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.527"></a>
+<span class="sourceLineNo">528</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.528"></a>
+<span class="sourceLineNo">529</span> * if the test relies on it.<a name="line.529"></a>
+<span class="sourceLineNo">530</span> * @return a unique path in the test filesystem<a name="line.530"></a>
+<span class="sourceLineNo">531</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.531"></a>
+<span class="sourceLineNo">532</span> */<a name="line.532"></a>
+<span class="sourceLineNo">533</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.534"></a>
+<span class="sourceLineNo">535</span> }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span> /**<a name="line.537"></a>
+<span clas
<TRUNCATED>
[09/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 5307adc..97cc026 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -52428,6 +52428,10 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi.html#testGetRegionByStateOfTable--">testGetRegionByStateOfTable()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi.html" title="class in org.apache.hadoop.hbase.client">TestAsyncRegionAdminApi</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAdmin2.html#testGetRegionInfo--">testGetRegionInfo()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAdmin2.html" title="class in org.apache.hadoop.hbase.client">TestAdmin2</a></dt>
+<dd>
+<div class="block">TestCase for HBASE-21355</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncClusterAdminApi.html#testGetRegionLoads--">testGetRegionLoads()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncClusterAdminApi.html" title="class in org.apache.hadoop.hbase.client">TestAsyncClusterAdminApi</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi2.html#testGetRegionLocation--">testGetRegionLocation()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi2.html" title="class in org.apache.hadoop.hbase.client">TestAsyncRegionAdminApi2</a></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
index 2023dd8..53aba37 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static interface <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3784">HBaseTestingUtility.PortAllocator.AvailablePortChecker</a></pre>
+<pre>static interface <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3783">HBaseTestingUtility.PortAllocator.AvailablePortChecker</a></pre>
</li>
</ul>
</div>
@@ -149,7 +149,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockListLast">
<li class="blockList">
<h4>available</h4>
-<pre>boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html#line.3785">available</a>(int port)</pre>
+<pre>boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html#line.3784">available</a>(int port)</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
index 79bb384..a276748 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3723">HBaseTestingUtility.PortAllocator</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3722">HBaseTestingUtility.PortAllocator</a>
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></pre>
</li>
</ul>
@@ -250,7 +250,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>MIN_RANDOM_PORT</h4>
-<pre>private static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3724">MIN_RANDOM_PORT</a></pre>
+<pre>private static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3723">MIN_RANDOM_PORT</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PortAllocator.MIN_RANDOM_PORT">Constant Field Values</a></dd>
@@ -263,7 +263,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>MAX_RANDOM_PORT</h4>
-<pre>private static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3725">MAX_RANDOM_PORT</a></pre>
+<pre>private static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3724">MAX_RANDOM_PORT</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PortAllocator.MAX_RANDOM_PORT">Constant Field Values</a></dd>
@@ -276,7 +276,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>takenRandomPorts</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<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>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3728">takenRandomPorts</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<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>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3727">takenRandomPorts</a></pre>
<div class="block">A set of ports that have been claimed using <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#randomFreePort--"><code>randomFreePort()</code></a>.</div>
</li>
</ul>
@@ -286,7 +286,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>random</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3730">random</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3729">random</a></pre>
</li>
</ul>
<a name="portChecker">
@@ -295,7 +295,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>portChecker</h4>
-<pre>private final <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html" title="interface in org.apache.hadoop.hbase">HBaseTestingUtility.PortAllocator.AvailablePortChecker</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3731">portChecker</a></pre>
+<pre>private final <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html" title="interface in org.apache.hadoop.hbase">HBaseTestingUtility.PortAllocator.AvailablePortChecker</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3730">portChecker</a></pre>
</li>
</ul>
</li>
@@ -312,7 +312,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>PortAllocator</h4>
-<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3733">PortAllocator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> random)</pre>
+<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3732">PortAllocator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> random)</pre>
</li>
</ul>
<a name="PortAllocator-java.util.Random-org.apache.hadoop.hbase.HBaseTestingUtility.PortAllocator.AvailablePortChecker-">
@@ -321,7 +321,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>PortAllocator</h4>
-<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3749">PortAllocator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> random,
+<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3748">PortAllocator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> random,
<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html" title="interface in org.apache.hadoop.hbase">HBaseTestingUtility.PortAllocator.AvailablePortChecker</a> portChecker)</pre>
</li>
</ul>
@@ -339,7 +339,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>randomFreePort</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3758">randomFreePort</a>()</pre>
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3757">randomFreePort</a>()</pre>
<div class="block">Returns a random free port and marks that port as taken. Not thread-safe. Expected to be
called from single-threaded test setup code/</div>
</li>
@@ -350,7 +350,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>randomPort</h4>
-<pre>private int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3779">randomPort</a>()</pre>
+<pre>private int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3778">randomPort</a>()</pre>
<div class="block">Returns a random port. These ports cannot be registered with IANA and are
intended for dynamic allocation (see http://bit.ly/dynports).</div>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
index 8076874..f92edd1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2123">HBaseTestingUtility.SeenRowTracker</a>
+<pre>public static class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2122">HBaseTestingUtility.SeenRowTracker</a>
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></pre>
<div class="block">A tracker for tracking and validating table rows
generated with <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#loadTable-org.apache.hadoop.hbase.client.Table-byte:A-"><code>HBaseTestingUtility.loadTable(Table, byte[])</code></a></div>
@@ -231,7 +231,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>dim</h4>
-<pre>int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2124">dim</a></pre>
+<pre>int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2123">dim</a></pre>
</li>
</ul>
<a name="seenRows">
@@ -240,7 +240,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>seenRows</h4>
-<pre>int[][][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2125">seenRows</a></pre>
+<pre>int[][][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2124">seenRows</a></pre>
</li>
</ul>
<a name="startRow">
@@ -249,7 +249,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>startRow</h4>
-<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2126">startRow</a></pre>
+<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2125">startRow</a></pre>
</li>
</ul>
<a name="stopRow">
@@ -258,7 +258,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>stopRow</h4>
-<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2127">stopRow</a></pre>
+<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2126">stopRow</a></pre>
</li>
</ul>
</li>
@@ -275,7 +275,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>SeenRowTracker</h4>
-<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2129">SeenRowTracker</a>(byte[] startRow,
+<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2128">SeenRowTracker</a>(byte[] startRow,
byte[] stopRow)</pre>
</li>
</ul>
@@ -293,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>reset</h4>
-<pre>void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2134">reset</a>()</pre>
+<pre>void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2133">reset</a>()</pre>
</li>
</ul>
<a name="i-byte-">
@@ -302,7 +302,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>i</h4>
-<pre>int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2140">i</a>(byte b)</pre>
+<pre>int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2139">i</a>(byte b)</pre>
</li>
</ul>
<a name="addRow-byte:A-">
@@ -311,7 +311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>addRow</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2144">addRow</a>(byte[] row)</pre>
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2143">addRow</a>(byte[] row)</pre>
</li>
</ul>
<a name="validate--">
@@ -320,7 +320,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>validate</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2151">validate</a>()</pre>
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2150">validate</a>()</pre>
<div class="block">Validate that all the rows between startRow and stopRow are seen exactly once, and
all other rows none</div>
</li>
[05/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
index 8d98ec3..f2d5735 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
@@ -179,4148 +179,4147 @@
<span class="sourceLineNo">171</span> * avoiding port contention if another local HBase instance is already running).<a name="line.171"></a>
<span class="sourceLineNo">172</span> * <p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.172"></a>
<span class="sourceLineNo">173</span> * setting it to true.<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * Trigger pre commit.<a name="line.174"></a>
-<span class="sourceLineNo">175</span> */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>@InterfaceAudience.Public<a name="line.176"></a>
-<span class="sourceLineNo">177</span>@SuppressWarnings("deprecation")<a name="line.177"></a>
-<span class="sourceLineNo">178</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span> /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.182"></a>
-<span class="sourceLineNo">183</span> * used in mini dfs.<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * @deprecated can be used only with mini dfs<a name="line.184"></a>
-<span class="sourceLineNo">185</span> */<a name="line.185"></a>
-<span class="sourceLineNo">186</span> @Deprecated<a name="line.186"></a>
-<span class="sourceLineNo">187</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.189"></a>
-<span class="sourceLineNo">190</span> /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * The default number of regions per regionserver when creating a pre-split<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * table.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.194"></a>
+<span class="sourceLineNo">174</span> */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>@InterfaceAudience.Public<a name="line.175"></a>
+<span class="sourceLineNo">176</span>@SuppressWarnings("deprecation")<a name="line.176"></a>
+<span class="sourceLineNo">177</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span> /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * used in mini dfs.<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * @deprecated can be used only with mini dfs<a name="line.183"></a>
+<span class="sourceLineNo">184</span> */<a name="line.184"></a>
+<span class="sourceLineNo">185</span> @Deprecated<a name="line.185"></a>
+<span class="sourceLineNo">186</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
+<span class="sourceLineNo">189</span> /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * table.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> */<a name="line.192"></a>
+<span class="sourceLineNo">193</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.197"></a>
-<span class="sourceLineNo">198</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> private MiniDFSCluster dfsCluster = null;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span> private MiniMRCluster mrCluster = null;<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.205"></a>
-<span class="sourceLineNo">206</span> private volatile boolean miniClusterRunning;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span> private String hadoopLogDir;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.210"></a>
-<span class="sourceLineNo">211</span> * HBaseTestingUtility*/<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private Path dataTestDirOnTestFS = null;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span> /**<a name="line.214"></a>
-<span class="sourceLineNo">215</span> * Shared cluster connection.<a name="line.215"></a>
-<span class="sourceLineNo">216</span> */<a name="line.216"></a>
-<span class="sourceLineNo">217</span> private volatile Connection connection;<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static String FS_URI;<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.222"></a>
-<span class="sourceLineNo">223</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Checks to see if a specific port is available.<a name="line.226"></a>
-<span class="sourceLineNo">227</span> *<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * @param port the port number to check for availability<a name="line.228"></a>
-<span class="sourceLineNo">229</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.229"></a>
-<span class="sourceLineNo">230</span> */<a name="line.230"></a>
-<span class="sourceLineNo">231</span> public static boolean available(int port) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span> ServerSocket ss = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> DatagramSocket ds = null;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> try {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> ss = new ServerSocket(port);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> ss.setReuseAddress(true);<a name="line.236"></a>
-<span class="sourceLineNo">237</span> ds = new DatagramSocket(port);<a name="line.237"></a>
-<span class="sourceLineNo">238</span> ds.setReuseAddress(true);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> return true;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> } catch (IOException e) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // Do nothing<a name="line.241"></a>
-<span class="sourceLineNo">242</span> } finally {<a name="line.242"></a>
-<span class="sourceLineNo">243</span> if (ds != null) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> ds.close();<a name="line.244"></a>
-<span class="sourceLineNo">245</span> }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> if (ss != null) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span> try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> ss.close();<a name="line.249"></a>
-<span class="sourceLineNo">250</span> } catch (IOException e) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> /* should not be thrown */<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span> }<a name="line.253"></a>
-<span class="sourceLineNo">254</span> }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span> return false;<a name="line.256"></a>
-<span class="sourceLineNo">257</span> }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span> /**<a name="line.259"></a>
-<span class="sourceLineNo">260</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.260"></a>
-<span class="sourceLineNo">261</span> * testing.<a name="line.261"></a>
-<span class="sourceLineNo">262</span> */<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.263"></a>
-<span class="sourceLineNo">264</span> List<Object[]> configurations = new ArrayList<>();<a name="line.264"></a>
-<span class="sourceLineNo">265</span> for (Compression.Algorithm comprAlgo :<a name="line.265"></a>
-<span class="sourceLineNo">266</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> for (BloomType bloomType : BloomType.values()) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span> }<a name="line.270"></a>
-<span class="sourceLineNo">271</span> return Collections.unmodifiableList(configurations);<a name="line.271"></a>
-<span class="sourceLineNo">272</span> }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span> /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span> * Create combination of memstoreTS and tags<a name="line.275"></a>
-<span class="sourceLineNo">276</span> */<a name="line.276"></a>
-<span class="sourceLineNo">277</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> List<Object[]> configurations = new ArrayList<>();<a name="line.278"></a>
-<span class="sourceLineNo">279</span> configurations.add(new Object[] { false, false });<a name="line.279"></a>
-<span class="sourceLineNo">280</span> configurations.add(new Object[] { false, true });<a name="line.280"></a>
-<span class="sourceLineNo">281</span> configurations.add(new Object[] { true, false });<a name="line.281"></a>
-<span class="sourceLineNo">282</span> configurations.add(new Object[] { true, true });<a name="line.282"></a>
-<span class="sourceLineNo">283</span> return Collections.unmodifiableList(configurations);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> List<Object[]> configurations = new ArrayList<>();<a name="line.287"></a>
-<span class="sourceLineNo">288</span> configurations.add(new Object[] { false, false, true });<a name="line.288"></a>
-<span class="sourceLineNo">289</span> configurations.add(new Object[] { false, false, false });<a name="line.289"></a>
-<span class="sourceLineNo">290</span> configurations.add(new Object[] { false, true, true });<a name="line.290"></a>
-<span class="sourceLineNo">291</span> configurations.add(new Object[] { false, true, false });<a name="line.291"></a>
-<span class="sourceLineNo">292</span> configurations.add(new Object[] { true, false, true });<a name="line.292"></a>
-<span class="sourceLineNo">293</span> configurations.add(new Object[] { true, false, false });<a name="line.293"></a>
-<span class="sourceLineNo">294</span> configurations.add(new Object[] { true, true, true });<a name="line.294"></a>
-<span class="sourceLineNo">295</span> configurations.add(new Object[] { true, true, false });<a name="line.295"></a>
-<span class="sourceLineNo">296</span> return Collections.unmodifiableList(configurations);<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.299"></a>
-<span class="sourceLineNo">300</span> bloomAndCompressionCombinations();<a name="line.300"></a>
+<span class="sourceLineNo">196</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
+<span class="sourceLineNo">197</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span> private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
+<span class="sourceLineNo">202</span> private MiniMRCluster mrCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span> private volatile boolean miniClusterRunning;<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span> private String hadoopLogDir;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
+<span class="sourceLineNo">210</span> * HBaseTestingUtility*/<a name="line.210"></a>
+<span class="sourceLineNo">211</span> private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Shared cluster connection.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private volatile Connection connection;<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static String FS_URI;<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.221"></a>
+<span class="sourceLineNo">222</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span> * Checks to see if a specific port is available.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> *<a name="line.226"></a>
+<span class="sourceLineNo">227</span> * @param port the port number to check for availability<a name="line.227"></a>
+<span class="sourceLineNo">228</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.228"></a>
+<span class="sourceLineNo">229</span> */<a name="line.229"></a>
+<span class="sourceLineNo">230</span> public static boolean available(int port) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span> ServerSocket ss = null;<a name="line.231"></a>
+<span class="sourceLineNo">232</span> DatagramSocket ds = null;<a name="line.232"></a>
+<span class="sourceLineNo">233</span> try {<a name="line.233"></a>
+<span class="sourceLineNo">234</span> ss = new ServerSocket(port);<a name="line.234"></a>
+<span class="sourceLineNo">235</span> ss.setReuseAddress(true);<a name="line.235"></a>
+<span class="sourceLineNo">236</span> ds = new DatagramSocket(port);<a name="line.236"></a>
+<span class="sourceLineNo">237</span> ds.setReuseAddress(true);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> return true;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> } catch (IOException e) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> // Do nothing<a name="line.240"></a>
+<span class="sourceLineNo">241</span> } finally {<a name="line.241"></a>
+<span class="sourceLineNo">242</span> if (ds != null) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span> ds.close();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span> if (ss != null) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span> try {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> ss.close();<a name="line.248"></a>
+<span class="sourceLineNo">249</span> } catch (IOException e) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> /* should not be thrown */<a name="line.250"></a>
+<span class="sourceLineNo">251</span> }<a name="line.251"></a>
+<span class="sourceLineNo">252</span> }<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> return false;<a name="line.255"></a>
+<span class="sourceLineNo">256</span> }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span> /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * testing.<a name="line.260"></a>
+<span class="sourceLineNo">261</span> */<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> List<Object[]> configurations = new ArrayList<>();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> for (Compression.Algorithm comprAlgo :<a name="line.264"></a>
+<span class="sourceLineNo">265</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span> for (BloomType bloomType : BloomType.values()) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.267"></a>
+<span class="sourceLineNo">268</span> }<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span> return Collections.unmodifiableList(configurations);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span> /**<a name="line.273"></a>
+<span class="sourceLineNo">274</span> * Create combination of memstoreTS and tags<a name="line.274"></a>
+<span class="sourceLineNo">275</span> */<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> List<Object[]> configurations = new ArrayList<>();<a name="line.277"></a>
+<span class="sourceLineNo">278</span> configurations.add(new Object[] { false, false });<a name="line.278"></a>
+<span class="sourceLineNo">279</span> configurations.add(new Object[] { false, true });<a name="line.279"></a>
+<span class="sourceLineNo">280</span> configurations.add(new Object[] { true, false });<a name="line.280"></a>
+<span class="sourceLineNo">281</span> configurations.add(new Object[] { true, true });<a name="line.281"></a>
+<span class="sourceLineNo">282</span> return Collections.unmodifiableList(configurations);<a name="line.282"></a>
+<span class="sourceLineNo">283</span> }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span> List<Object[]> configurations = new ArrayList<>();<a name="line.286"></a>
+<span class="sourceLineNo">287</span> configurations.add(new Object[] { false, false, true });<a name="line.287"></a>
+<span class="sourceLineNo">288</span> configurations.add(new Object[] { false, false, false });<a name="line.288"></a>
+<span class="sourceLineNo">289</span> configurations.add(new Object[] { false, true, true });<a name="line.289"></a>
+<span class="sourceLineNo">290</span> configurations.add(new Object[] { false, true, false });<a name="line.290"></a>
+<span class="sourceLineNo">291</span> configurations.add(new Object[] { true, false, true });<a name="line.291"></a>
+<span class="sourceLineNo">292</span> configurations.add(new Object[] { true, false, false });<a name="line.292"></a>
+<span class="sourceLineNo">293</span> configurations.add(new Object[] { true, true, true });<a name="line.293"></a>
+<span class="sourceLineNo">294</span> configurations.add(new Object[] { true, true, false });<a name="line.294"></a>
+<span class="sourceLineNo">295</span> return Collections.unmodifiableList(configurations);<a name="line.295"></a>
+<span class="sourceLineNo">296</span> }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.298"></a>
+<span class="sourceLineNo">299</span> bloomAndCompressionCombinations();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.304"></a>
-<span class="sourceLineNo">305</span> *<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> *<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.311"></a>
-<span class="sourceLineNo">312</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.312"></a>
-<span class="sourceLineNo">313</span> * at which point they will switch to using mini DFS for storage.<a name="line.313"></a>
-<span class="sourceLineNo">314</span> */<a name="line.314"></a>
-<span class="sourceLineNo">315</span> public HBaseTestingUtility() {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> this(HBaseConfiguration.create());<a name="line.316"></a>
-<span class="sourceLineNo">317</span> }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.320"></a>
-<span class="sourceLineNo">321</span> *<a name="line.321"></a>
-<span class="sourceLineNo">322</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.322"></a>
-<span class="sourceLineNo">323</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.323"></a>
-<span class="sourceLineNo">324</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.324"></a>
-<span class="sourceLineNo">325</span> *<a name="line.325"></a>
-<span class="sourceLineNo">326</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.326"></a>
-<span class="sourceLineNo">327</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.327"></a>
-<span class="sourceLineNo">328</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.328"></a>
-<span class="sourceLineNo">329</span> * at which point they will switch to using mini DFS for storage.<a name="line.329"></a>
-<span class="sourceLineNo">330</span> *<a name="line.330"></a>
-<span class="sourceLineNo">331</span> * @param conf The configuration to use for further operations<a name="line.331"></a>
-<span class="sourceLineNo">332</span> */<a name="line.332"></a>
-<span class="sourceLineNo">333</span> public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span> super(conf);<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.336"></a>
-<span class="sourceLineNo">337</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> // Save this for when setting default file:// breaks things<a name="line.339"></a>
-<span class="sourceLineNo">340</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.341"></a>
-<span class="sourceLineNo">342</span> }<a name="line.342"></a>
-<span class="sourceLineNo">343</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span> // Every cluster is a local cluster until we start DFS<a name="line.346"></a>
-<span class="sourceLineNo">347</span> // Note that conf could be null, but this.conf will not be<a name="line.347"></a>
-<span class="sourceLineNo">348</span> String dataTestDir = getDataTestDir().toString();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> this.conf.set("fs.defaultFS","file:///");<a name="line.349"></a>
-<span class="sourceLineNo">350</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> // If the value for random ports isn't set set it to true, thus making<a name="line.353"></a>
-<span class="sourceLineNo">354</span> // tests opt-out for random port assignment<a name="line.354"></a>
-<span class="sourceLineNo">355</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.355"></a>
-<span class="sourceLineNo">356</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.356"></a>
-<span class="sourceLineNo">357</span> }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span> /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.360"></a>
-<span class="sourceLineNo">361</span> * @return a normal HBaseTestingUtility<a name="line.361"></a>
-<span class="sourceLineNo">362</span> */<a name="line.362"></a>
-<span class="sourceLineNo">363</span> @Deprecated<a name="line.363"></a>
-<span class="sourceLineNo">364</span> public static HBaseTestingUtility createLocalHTU() {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> return new HBaseTestingUtility();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span> /**<a name="line.368"></a>
-<span class="sourceLineNo">369</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.369"></a>
-<span class="sourceLineNo">370</span> * @return a normal HBaseTestingUtility<a name="line.370"></a>
-<span class="sourceLineNo">371</span> */<a name="line.371"></a>
-<span class="sourceLineNo">372</span> @Deprecated<a name="line.372"></a>
-<span class="sourceLineNo">373</span> public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return new HBaseTestingUtility(c);<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> /**<a name="line.377"></a>
-<span class="sourceLineNo">378</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> */<a name="line.379"></a>
-<span class="sourceLineNo">380</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.380"></a>
-<span class="sourceLineNo">381</span> closeRegionAndWAL((HRegion)r);<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> /**<a name="line.384"></a>
-<span class="sourceLineNo">385</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.385"></a>
-<span class="sourceLineNo">386</span> */<a name="line.386"></a>
-<span class="sourceLineNo">387</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> if (r == null) return;<a name="line.388"></a>
-<span class="sourceLineNo">389</span> r.close();<a name="line.389"></a>
-<span class="sourceLineNo">390</span> if (r.getWAL() == null) return;<a name="line.390"></a>
-<span class="sourceLineNo">391</span> r.getWAL().close();<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span> /**<a name="line.394"></a>
-<span class="sourceLineNo">395</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.395"></a>
-<span class="sourceLineNo">396</span> * you use the returned Configuration since {@link Connection} instances<a name="line.396"></a>
-<span class="sourceLineNo">397</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.397"></a>
-<span class="sourceLineNo">398</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.398"></a>
-<span class="sourceLineNo">399</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.399"></a>
-<span class="sourceLineNo">400</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.400"></a>
-<span class="sourceLineNo">401</span> * make a copy and use that. Do<a name="line.401"></a>
-<span class="sourceLineNo">402</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.402"></a>
-<span class="sourceLineNo">403</span> * @return Instance of Configuration.<a name="line.403"></a>
-<span class="sourceLineNo">404</span> */<a name="line.404"></a>
-<span class="sourceLineNo">405</span> @Override<a name="line.405"></a>
-<span class="sourceLineNo">406</span> public Configuration getConfiguration() {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> return super.getConfiguration();<a name="line.407"></a>
-<span class="sourceLineNo">408</span> }<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span> this.hbaseCluster = hbaseCluster;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span> /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.415"></a>
-<span class="sourceLineNo">416</span> * Give it a random name so can have many concurrent tests running if<a name="line.416"></a>
-<span class="sourceLineNo">417</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.417"></a>
-<span class="sourceLineNo">418</span> * System property, as it's what minidfscluster bases<a name="line.418"></a>
-<span class="sourceLineNo">419</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.419"></a>
-<span class="sourceLineNo">420</span> * instances -- another instance could grab the temporary<a name="line.420"></a>
-<span class="sourceLineNo">421</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * single instance only is how the minidfscluster works.<a name="line.422"></a>
-<span class="sourceLineNo">423</span> *<a name="line.423"></a>
-<span class="sourceLineNo">424</span> * We also create the underlying directory for<a name="line.424"></a>
-<span class="sourceLineNo">425</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.425"></a>
-<span class="sourceLineNo">426</span> * in the conf, and as a system property for hadoop.tmp.dir<a name="line.426"></a>
-<span class="sourceLineNo">427</span> *<a name="line.427"></a>
-<span class="sourceLineNo">428</span> * @return The calculated data test build directory, if newly-created.<a name="line.428"></a>
-<span class="sourceLineNo">429</span> */<a name="line.429"></a>
-<span class="sourceLineNo">430</span> @Override<a name="line.430"></a>
-<span class="sourceLineNo">431</span> protected Path setupDataTestDir() {<a name="line.431"></a>
-<span class="sourceLineNo">432</span> Path testPath = super.setupDataTestDir();<a name="line.432"></a>
-<span class="sourceLineNo">433</span> if (null == testPath) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> return null;<a name="line.434"></a>
-<span class="sourceLineNo">435</span> }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span> createSubDirAndSystemProperty(<a name="line.437"></a>
-<span class="sourceLineNo">438</span> "hadoop.log.dir",<a name="line.438"></a>
-<span class="sourceLineNo">439</span> testPath, "hadoop-log-dir");<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.441"></a>
-<span class="sourceLineNo">442</span> // we want our own value to ensure uniqueness on the same machine<a name="line.442"></a>
-<span class="sourceLineNo">443</span> createSubDirAndSystemProperty(<a name="line.443"></a>
-<span class="sourceLineNo">444</span> "hadoop.tmp.dir",<a name="line.444"></a>
-<span class="sourceLineNo">445</span> testPath, "hadoop-tmp-dir");<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.447"></a>
-<span class="sourceLineNo">448</span> createSubDir(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "mapreduce.cluster.local.dir",<a name="line.449"></a>
-<span class="sourceLineNo">450</span> testPath, "mapred-local-dir");<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span> return testPath;<a name="line.452"></a>
-<span class="sourceLineNo">453</span> }<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span> private void createSubDirAndSystemProperty(<a name="line.455"></a>
-<span class="sourceLineNo">456</span> String propertyName, Path parent, String subDirName){<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> String sysValue = System.getProperty(propertyName);<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> if (sysValue != null) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span> // There is already a value set. So we do nothing but hope<a name="line.461"></a>
-<span class="sourceLineNo">462</span> // that there will be no conflicts<a name="line.462"></a>
-<span class="sourceLineNo">463</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.463"></a>
-<span class="sourceLineNo">464</span> sysValue + " so I do NOT create it in " + parent);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> String confValue = conf.get(propertyName);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.466"></a>
-<span class="sourceLineNo">467</span> LOG.warn(<a name="line.467"></a>
-<span class="sourceLineNo">468</span> propertyName + " property value differs in configuration and system: "+<a name="line.468"></a>
-<span class="sourceLineNo">469</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.469"></a>
-<span class="sourceLineNo">470</span> " Erasing configuration value by system value."<a name="line.470"></a>
-<span class="sourceLineNo">471</span> );<a name="line.471"></a>
-<span class="sourceLineNo">472</span> }<a name="line.472"></a>
-<span class="sourceLineNo">473</span> conf.set(propertyName, sysValue);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> } else {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.475"></a>
-<span class="sourceLineNo">476</span> createSubDir(propertyName, parent, subDirName);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span> }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span> /**<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.482"></a>
-<span class="sourceLineNo">483</span> * for the test filesystem by default<a name="line.483"></a>
-<span class="sourceLineNo">484</span> * @see #setupDataTestDirOnTestFS()<a name="line.484"></a>
-<span class="sourceLineNo">485</span> * @see #getTestFileSystem()<a name="line.485"></a>
-<span class="sourceLineNo">486</span> */<a name="line.486"></a>
-<span class="sourceLineNo">487</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.487"></a>
-<span class="sourceLineNo">488</span> FileSystem fs = getTestFileSystem();<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span><a name="line.491"></a>
-<span class="sourceLineNo">492</span> /**<a name="line.492"></a>
-<span class="sourceLineNo">493</span> * @return META table descriptor<a name="line.493"></a>
-<span class="sourceLineNo">494</span> * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.494"></a>
-<span class="sourceLineNo">495</span> * use {@link #getMetaTableDescriptorBuilder()}<a name="line.495"></a>
-<span class="sourceLineNo">496</span> */<a name="line.496"></a>
-<span class="sourceLineNo">497</span> @Deprecated<a name="line.497"></a>
-<span class="sourceLineNo">498</span> public HTableDescriptor getMetaTableDescriptor() {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.499"></a>
-<span class="sourceLineNo">500</span> }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> /**<a name="line.502"></a>
-<span class="sourceLineNo">503</span> * @return META table descriptor<a name="line.503"></a>
-<span class="sourceLineNo">504</span> */<a name="line.504"></a>
-<span class="sourceLineNo">505</span> public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span> return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.507"></a>
-<span class="sourceLineNo">508</span> } catch (IOException e) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span> throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.509"></a>
-<span class="sourceLineNo">510</span> }<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> /**<a name="line.513"></a>
-<span class="sourceLineNo">514</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.514"></a>
-<span class="sourceLineNo">515</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.515"></a>
-<span class="sourceLineNo">516</span> * if the test relies on it.<a name="line.516"></a>
-<span class="sourceLineNo">517</span> * @return a unique path in the test filesystem<a name="line.517"></a>
-<span class="sourceLineNo">518</span> */<a name="line.518"></a>
-<span class="sourceLineNo">519</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.519"></a>
-<span class="sourceLineNo">520</span> if (dataTestDirOnTestFS == null) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span> setupDataTestDirOnTestFS();<a name="line.521"></a>
-<span class="sourceLineNo">522</span> }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span> return dataTestDirOnTestFS;<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> /**<a name="line.527"></a>
-<span class="sourceLineNo">528</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.528"></a>
-<span class="sourceLineNo">529</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.529"></a>
-<span class="sourceLineNo">530</span> * if the test relies on it.<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * @return a unique path in the test filesystem<a name="line.531"></a>
-<span class="sourceLineNo">532</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.532"></a>
-<span class="sourceLineNo">533</span> */<a name="line.533"></a>
-<span class="sourceLineNo">534</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span> /**<a name="line.538"></a>
-<span class="sourceLineNo">539</span> * Sets up a path in test filesystem to be used by tests.<a name="line.539"></a>
-<span class="sourceLineNo">540</span> * Creates a new directory if not already setup.<a name="line.540"></a>
-<span class="sourceLineNo">541</span> */<a name="line.541"></a>
-<span class="sourceLineNo">542</span> private void setupDataTestDirOnTestFS() throws IOException {<a name="line.542"></a>
-<span class="sourceLineNo">543</span> if (dataTestDirOnTestFS != null) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span> LOG.warn("Data test on test fs dir already setup in "<a name="line.544"></a>
-<span class="sourceLineNo">545</span> + dataTestDirOnTestFS.toString());<a name="line.545"></a>
-<span class="sourceLineNo">546</span> return;<a name="line.546"></a>
-<span class="sourceLineNo">547</span> }<a name="line.547"></a>
-<span class="sourceLineNo">548</span> dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.548"></a>
-<span class="sourceLineNo">549</span> }<a name="line.549"></a>
-<span class="sourceLineNo">550</span><a name="line.550"></a>
-<span class="sourceLineNo">551</span> /**<a name="line.551"></a>
-<span class="sourceLineNo">552</span> * Sets up a new path in test filesystem to be used by tests.<a name="line.552"></a>
-<span class="sourceLineNo">553</span> */<a name="line.553"></a>
-<span class="sourceLineNo">554</span> private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.554"></a>
-<span class="sourceLineNo">555</span> //The file system can be either local, mini dfs, or if the configuration<a name="line.555"></a>
-<span class="sourceLineNo">556</span> //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.556"></a>
-<span class="sourceLineNo">557</span> //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.557"></a>
-<span class="sourceLineNo">558</span> //the working directory, and create a unique sub dir there<a name="line.558"></a>
-<span class="sourceLineNo">559</span> FileSystem fs = getTestFileSystem();<a name="line.559"></a>
-<span class="sourceLineNo">560</span> Path newDataTestDir;<a name="line.560"></a>
-<span class="sourceLineNo">561</span> String randomStr = getRandomUUID().toString();<a name="line.561"></a>
-<span class="sourceLineNo">562</span> if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.563"></a>
-<span class="sourceLineNo">564</span> File dataTestDir = new File(newDataTestDir.toString());<a name="line.564"></a>
-<span class="sourceLineNo">565</span> if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.565"></a>
-<span class="sourceLineNo">566</span> } else {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> Path base = getBaseTestDirOnTestFS();<a name="line.567"></a>
-<span class="sourceLineNo">568</span> newDataTestDir = new Path(base, randomStr);<a name="line.568"></a>
-<span class="sourceLineNo">569</span> if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.569"></a>
-<span class="sourceLineNo">570</span> }<a name="line.570"></a>
-<span class="sourceLineNo">571</span> return newDataTestDir;<a name="line.571"></a>
-<span class="sourceLineNo">572</span> }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span> /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span> * Cleans the test data directory on the test filesystem.<a name="line.575"></a>
-<span class="sourceLineNo">576</span> * @return True if we removed the test dirs<a name="line.576"></a>
-<span class="sourceLineNo">577</span> * @throws IOException<a name="line.577"></a>
-<span class="sourceLineNo">578</span> */<a name="line.578"></a>
-<span class="sourceLineNo">579</span> public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span> boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> if (ret)<a name="line.581"></a>
-<span class="sourceLineNo">582</span> dataTestDirOnTestFS = null;<a name="line.582"></a>
-<span class="sourceLineNo">583</span> return ret;<a name="line.583"></a>
-<span class="sourceLineNo">584</span> }<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span> /**<a name="line.586"></a>
-<span class="sourceLineNo">587</span> * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.587"></a>
-<span class="sourceLineNo">588</span> * @return True if we removed child<a name="line.588"></a>
-<span class="sourceLineNo">589</span> * @throws IOException<a name="line.589"></a>
-<span class="sourceLineNo">590</span> */<a name="line.590"></a>
-<span class="sourceLineNo">591</span> public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return getTestFileSystem().delete(cpath, true);<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span> /**<a name="line.596"></a>
-<span class="sourceLineNo">597</span> * Start a minidfscluster.<a name="line.597"></a>
-<span class="sourceLineNo">598</span> * @param servers How many DNs to start.<a name="line.598"></a>
-<span class="sourceLineNo">599</span> * @throws Exception<a name="line.599"></a>
-<span class="sourceLineNo">600</span> * @see #shutdownMiniDFSCluster()<a name="line.600"></a>
-<span class="sourceLineNo">601</span> * @return The mini dfs cluster created.<a name="line.601"></a>
-<span class="sourceLineNo">602</span> */<a name="line.602"></a>
-<span class="sourceLineNo">603</span> public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.603"></a>
-<span class="sourceLineNo">604</span> return startMiniDFSCluster(servers, null);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> }<a name="line.605"></a>
-<span class="sourceLineNo">606</span><a name="line.606"></a>
-<span class="sourceLineNo">607</span> /**<a name="line.607"></a>
-<span class="sourceLineNo">608</span> * Start a minidfscluster.<a name="line.608"></a>
-<span class="sourceLineNo">609</span> * This is useful if you want to run datanode on distinct hosts for things<a name="line.609"></a>
-<span class="sourceLineNo">610</span> * like HDFS block location verification.<a name="line.610"></a>
-<span class="sourceLineNo">611</span> * If you start MiniDFSCluster without host names, all instances of the<a name="line.611"></a>
-<span class="sourceLineNo">612</span> * datanodes will have the same host name.<a name="line.612"></a>
-<span class="sourceLineNo">613</span> * @param hosts hostnames DNs to run on.<a name="line.613"></a>
-<span class="sourceLineNo">614</span> * @throws Exception<a name="line.614"></a>
-<span class="sourceLineNo">615</span> * @see #shutdownMiniDFSCluster()<a name="line.615"></a>
-<span class="sourceLineNo">616</span> * @return The mini dfs cluster created.<a name="line.616"></a>
-<span class="sourceLineNo">617</span> */<a name="line.617"></a>
-<span class="sourceLineNo">618</span> public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throws Exception {<a name="line.619"></a>
-<span class="sourceLineNo">620</span> if ( hosts != null && hosts.length != 0) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span> return startMiniDFSCluster(hosts.length, hosts);<a name="line.621"></a>
-<span class="sourceLineNo">622</span> } else {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> return startMiniDFSCluster(1, null);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> }<a name="line.624"></a>
-<span class="sourceLineNo">625</span> }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
-<span class="sourceLineNo">628</span> * Start a minidfscluster.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> * Can only create one.<a name="line.629"></a>
-<span class="sourceLineNo">630</span> * @param servers How many DNs to start.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> * @param hosts hostnames DNs to run on.<a name="line.631"></a>
-<span class="sourceLineNo">632</span> * @throws Exception<a name="line.632"></a>
-<span class="sourceLineNo">633</span> * @see #shutdownMiniDFSCluster()<a name="line.633"></a>
-<span class="sourceLineNo">634</span> * @return The mini dfs cluster created.<a name="line.634"></a>
-<span class="sourceLineNo">635</span> */<a name="line.635"></a>
-<span class="sourceLineNo">636</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.636"></a>
-<span class="sourceLineNo">637</span> throws Exception {<a name="line.637"></a>
-<span class="sourceLineNo">638</span> return startMiniDFSCluster(servers, null, hosts);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span> private void setFs() throws IOException {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> if(this.dfsCluster == null){<a name="line.642"></a>
-<span class="sourceLineNo">643</span> LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.643"></a>
-<span class="sourceLineNo">644</span> return;<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span> FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.646"></a>
-<span class="sourceLineNo">647</span> FSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.647"></a>
-<span class="sourceLineNo">648</span><a name="line.648"></a>
-<span class="sourceLineNo">649</span> // re-enable this check with dfs<a name="line.649"></a>
-<span class="sourceLineNo">650</span> conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.650"></a>
-<span class="sourceLineNo">651</span> }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String racks[], String hosts[])<a name="line.653"></a>
-<span class="sourceLineNo">654</span> throws Exception {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> createDirsAndSetProperties();<a name="line.655"></a>
-<span class="sourceLineNo">656</span> EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span> // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.658"></a>
-<span class="sourceLineNo">659</span> org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.util.MBeans.class).<a name="line.659"></a>
-<span class="sourceLineNo">660</span> setLevel(org.apache.log4j.Level.ERROR);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class).<a name="line.661"></a>
-<span class="sourceLineNo">662</span> setLevel(org.apache.log4j.Level.ERROR);<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span> TraceUtil.initTracer(conf);<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span> this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.666"></a>
-<span class="sourceLineNo">667</span> true, null, racks, hosts, null);<a name="line.667"></a>
-<span class="sourceLineNo">668</span><a name="line.668"></a>
-<span class="sourceLineNo">669</span> // Set this just-started cluster as our filesystem.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> setFs();<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span> // Wait for the cluster to be totally up<a name="line.672"></a>
-<span class="sourceLineNo">673</span> this.dfsCluster.waitClusterUp();<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span> //reset the test directory for test file system<a name="line.675"></a>
-<span class="sourceLineNo">676</span> dataTestDirOnTestFS = null;<a name="line.676"></a>
-<span class="sourceLineNo">677</span> String dataTestDir = getDataTestDir().toString();<a name="line.677"></a>
-<span class="sourceLineNo">678</span> conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.678"></a>
-<span class="sourceLineNo">679</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.679"></a>
-<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span> return this.dfsCluster;<a name="line.681"></a>
-<span class="sourceLineNo">682</span> }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span> public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> createDirsAndSetProperties();<a name="line.685"></a>
-<span class="sourceLineNo">686</span> dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.686"></a>
-<span class="sourceLineNo">687</span> null, null, null);<a name="line.687"></a>
-<span class="sourceLineNo">688</span> return dfsCluster;<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> /** This is used before starting HDFS and map-reduce mini-clusters */<a name="line.691"></a>
-<span class="sourceLineNo">692</span> private void createDirsAndSetProperties() throws IOException {<a name="line.692"></a>
-<span class="sourceLineNo">693</span> setupClusterTestDir();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.694"></a>
-<span class="sourceLineNo">695</span> System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.695"></a>
-<span class="sourceLineNo">696</span> createDirAndSetProperty("cache_data", "test.cache.data");<a name="line.696"></a>
-<span class="sourceLineNo">697</span> createDirAndSetProperty("hadoop_tmp", "hadoop.tmp.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span> hadoopLogDir = createDirAndSetProperty("hadoop_logs", "hadoop.log.dir");<a name="line.698"></a>
-<span class="sourceLineNo">699</span> createDirAndSetProperty("mapred_local", "mapreduce.cluster.local.dir");<a name="line.699"></a>
-<span class="sourceLineNo">700</span> createDirAndSetProperty("mapred_temp", "mapreduce.cluster.temp.dir");<a name="line.700"></a>
-<span class="sourceLineNo">701</span> enableShortCircuit();<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span> Path root = getDataTestDirOnTestFS("hadoop");<a name="line.703"></a>
-<span class="sourceLineNo">704</span> conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.704"></a>
-<span class="sourceLineNo">705</span> new Path(root, "mapred-output-dir").toString());<a name="line.705"></a>
-<span class="sourceLineNo">706</span> conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.706"></a>
-<span class="sourceLineNo">707</span> conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.707"></a>
-<span class="sourceLineNo">708</span> new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.708"></a>
-<span class="sourceLineNo">709</span> conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.709"></a>
-<span class="sourceLineNo">710</span> conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.710"></a>
-<span class="sourceLineNo">711</span> new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.711"></a>
-<span class="sourceLineNo">712</span> }<a name="line.712"></a>
+<span class="sourceLineNo">302</span> /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.303"></a>
+<span class="sourceLineNo">304</span> *<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> *<a name="line.308"></a>
+<span class="sourceLineNo">309</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.309"></a>
+<span class="sourceLineNo">310</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.310"></a>
+<span class="sourceLineNo">311</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * at which point they will switch to using mini DFS for storage.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public HBaseTestingUtility() {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> this(HBaseConfiguration.create());<a name="line.315"></a>
+<span class="sourceLineNo">316</span> }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> /**<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.319"></a>
+<span class="sourceLineNo">320</span> *<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.322"></a>
+<span class="sourceLineNo">323</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.323"></a>
+<span class="sourceLineNo">324</span> *<a name="line.324"></a>
+<span class="sourceLineNo">325</span> * <p>Previously, there was a distinction between the type of utility returned by<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.326"></a>
+<span class="sourceLineNo">327</span> * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.327"></a>
+<span class="sourceLineNo">328</span> * at which point they will switch to using mini DFS for storage.<a name="line.328"></a>
+<span class="sourceLineNo">329</span> *<a name="line.329"></a>
+<span class="sourceLineNo">330</span> * @param conf The configuration to use for further operations<a name="line.330"></a>
+<span class="sourceLineNo">331</span> */<a name="line.331"></a>
+<span class="sourceLineNo">332</span> public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> super(conf);<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.335"></a>
+<span class="sourceLineNo">336</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> // Save this for when setting default file:// breaks things<a name="line.338"></a>
+<span class="sourceLineNo">339</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.340"></a>
+<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">342</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.343"></a>
+<span class="sourceLineNo">344</span> }<a name="line.344"></a>
+<span class="sourceLineNo">345</span> // Every cluster is a local cluster until we start DFS<a name="line.345"></a>
+<span class="sourceLineNo">346</span> // Note that conf could be null, but this.conf will not be<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String dataTestDir = getDataTestDir().toString();<a name="line.347"></a>
+<span class="sourceLineNo">348</span> this.conf.set("fs.defaultFS","file:///");<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.349"></a>
+<span class="sourceLineNo">350</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.351"></a>
+<span class="sourceLineNo">352</span> // If the value for random ports isn't set set it to true, thus making<a name="line.352"></a>
+<span class="sourceLineNo">353</span> // tests opt-out for random port assignment<a name="line.353"></a>
+<span class="sourceLineNo">354</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.354"></a>
+<span class="sourceLineNo">355</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.355"></a>
+<span class="sourceLineNo">356</span> }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> /**<a name="line.358"></a>
+<span class="sourceLineNo">359</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @return a normal HBaseTestingUtility<a name="line.360"></a>
+<span class="sourceLineNo">361</span> */<a name="line.361"></a>
+<span class="sourceLineNo">362</span> @Deprecated<a name="line.362"></a>
+<span class="sourceLineNo">363</span> public static HBaseTestingUtility createLocalHTU() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span> return new HBaseTestingUtility();<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span> /**<a name="line.367"></a>
+<span class="sourceLineNo">368</span> * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.368"></a>
+<span class="sourceLineNo">369</span> * @return a normal HBaseTestingUtility<a name="line.369"></a>
+<span class="sourceLineNo">370</span> */<a name="line.370"></a>
+<span class="sourceLineNo">371</span> @Deprecated<a name="line.371"></a>
+<span class="sourceLineNo">372</span> public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return new HBaseTestingUtility(c);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span> /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.377"></a>
+<span class="sourceLineNo">378</span> */<a name="line.378"></a>
+<span class="sourceLineNo">379</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> closeRegionAndWAL((HRegion)r);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.384"></a>
+<span class="sourceLineNo">385</span> */<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> if (r == null) return;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> r.close();<a name="line.388"></a>
+<span class="sourceLineNo">389</span> if (r.getWAL() == null) return;<a name="line.389"></a>
+<span class="sourceLineNo">390</span> r.getWAL().close();<a name="line.390"></a>
+<span class="sourceLineNo">391</span> }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.394"></a>
+<span class="sourceLineNo">395</span> * you use the returned Configuration since {@link Connection} instances<a name="line.395"></a>
+<span class="sourceLineNo">396</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.396"></a>
+<span class="sourceLineNo">397</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.397"></a>
+<span class="sourceLineNo">398</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.398"></a>
+<span class="sourceLineNo">399</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.399"></a>
+<span class="sourceLineNo">400</span> * make a copy and use that. Do<a name="line.400"></a>
+<span class="sourceLineNo">401</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.401"></a>
+<span class="sourceLineNo">402</span> * @return Instance of Configuration.<a name="line.402"></a>
+<span class="sourceLineNo">403</span> */<a name="line.403"></a>
+<span class="sourceLineNo">404</span> @Override<a name="line.404"></a>
+<span class="sourceLineNo">405</span> public Configuration getConfiguration() {<a name="line.405"></a>
+<span class="sourceLineNo">406</span> return super.getConfiguration();<a name="line.406"></a>
+<span class="sourceLineNo">407</span> }<a name="line.407"></a>
+<span class="sourceLineNo">408</span><a name="line.408"></a>
+<span class="sourceLineNo">409</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> this.hbaseCluster = hbaseCluster;<a name="line.410"></a>
+<span class="sourceLineNo">411</span> }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span> /**<a name="line.413"></a>
+<span class="sourceLineNo">414</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.414"></a>
+<span class="sourceLineNo">415</span> * Give it a random name so can have many concurrent tests running if<a name="line.415"></a>
+<span class="sourceLineNo">416</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.416"></a>
+<span class="sourceLineNo">417</span> * System property, as it's what minidfscluster bases<a name="line.417"></a>
+<span class="sourceLineNo">418</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.418"></a>
+<span class="sourceLineNo">419</span> * instances -- another instance could grab the temporary<a name="line.419"></a>
+<span class="sourceLineNo">420</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> * single instance only is how the minidfscluster works.<a name="line.421"></a>
+<span class="sourceLineNo">422</span> *<a name="line.422"></a>
+<span class="sourceLineNo">423</span> * We also create the underlying directory for<a name="line.423"></a>
+<span class="sourceLineNo">424</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.424"></a>
+<span class="sourceLineNo">425</span> * in the conf, and as a system property for hadoop.tmp.dir<a name="line.425"></a>
+<span class="sourceLineNo">426</span> *<a name="line.426"></a>
+<span class="sourceLineNo">427</span> * @return The calculated data test build directory, if newly-created.<a name="line.427"></a>
+<span class="sourceLineNo">428</span> */<a name="line.428"></a>
+<span class="sourceLineNo">429</span> @Override<a name="line.429"></a>
+<span class="sourceLineNo">430</span> protected Path setupDataTestDir() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span> Path testPath = super.setupDataTestDir();<a name="line.431"></a>
+<span class="sourceLineNo">432</span> if (null == testPath) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span> return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span> }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span> createSubDirAndSystemProperty(<a name="line.436"></a>
+<span class="sourceLineNo">437</span> "hadoop.log.dir",<a name="line.437"></a>
+<span class="sourceLineNo">438</span> testPath, "hadoop-log-dir");<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.440"></a>
+<span class="sourceLineNo">441</span> // we want our own value to ensure uniqueness on the same machine<a name="line.441"></a>
+<span class="sourceLineNo">442</span> createSubDirAndSystemProperty(<a name="line.442"></a>
+<span class="sourceLineNo">443</span> "hadoop.tmp.dir",<a name="line.443"></a>
+<span class="sourceLineNo">444</span> testPath, "hadoop-tmp-dir");<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.446"></a>
+<span class="sourceLineNo">447</span> createSubDir(<a name="line.447"></a>
+<span class="sourceLineNo">448</span> "mapreduce.cluster.local.dir",<a name="line.448"></a>
+<span class="sourceLineNo">449</span> testPath, "mapred-local-dir");<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span> return testPath;<a name="line.451"></a>
+<span class="sourceLineNo">452</span> }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private void createSubDirAndSystemProperty(<a name="line.454"></a>
+<span class="sourceLineNo">455</span> String propertyName, Path parent, String subDirName){<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> String sysValue = System.getProperty(propertyName);<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span> if (sysValue != null) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span> // There is already a value set. So we do nothing but hope<a name="line.460"></a>
+<span class="sourceLineNo">461</span> // that there will be no conflicts<a name="line.461"></a>
+<span class="sourceLineNo">462</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.462"></a>
+<span class="sourceLineNo">463</span> sysValue + " so I do NOT create it in " + parent);<a name="line.463"></a>
+<span class="sourceLineNo">464</span> String confValue = conf.get(propertyName);<a name="line.464"></a>
+<span class="sourceLineNo">465</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.465"></a>
+<span class="sourceLineNo">466</span> LOG.warn(<a name="line.466"></a>
+<span class="sourceLineNo">467</span> propertyName + " property value differs in configuration and system: "+<a name="line.467"></a>
+<span class="sourceLineNo">468</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.468"></a>
+<span class="sourceLineNo">469</span> " Erasing configuration value by system value."<a name="line.469"></a>
+<span class="sourceLineNo">470</span> );<a name="line.470"></a>
+<span class="sourceLineNo">471</span> }<a name="line.471"></a>
+<span class="sourceLineNo">472</span> conf.set(propertyName, sysValue);<a name="line.472"></a>
+<span class="sourceLineNo">473</span> } else {<a name="line.473"></a>
+<span class="sourceLineNo">474</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.474"></a>
+<span class="sourceLineNo">475</span> createSubDir(propertyName, parent, subDirName);<a name="line.475"></a>
+<span class="sourceLineNo">476</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.476"></a>
+<span class="sourceLineNo">477</span> }<a name="line.477"></a>
+<span class="sourceLineNo">478</span> }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span> /**<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.481"></a>
+<span class="sourceLineNo">482</span> * for the test filesystem by default<a name="line.482"></a>
+<span class="sourceLineNo">483</span> * @see #setupDataTestDirOnTestFS()<a name="line.483"></a>
+<span class="sourceLineNo">484</span> * @see #getTestFileSystem()<a name="line.484"></a>
+<span class="sourceLineNo">485</span> */<a name="line.485"></a>
+<span class="sourceLineNo">486</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span> FileSystem fs = getTestFileSystem();<a name="line.487"></a>
+<span class="sourceLineNo">488</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.488"></a>
+<span class="sourceLineNo">489</span> }<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span> /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span> * @return META table descriptor<a name="line.492"></a>
+<span class="sourceLineNo">493</span> * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.493"></a>
+<span class="sourceLineNo">494</span> * use {@link #getMetaTableDescriptorBuilder()}<a name="line.494"></a>
+<span class="sourceLineNo">495</span> */<a name="line.495"></a>
+<span class="sourceLineNo">496</span> @Deprecated<a name="line.496"></a>
+<span class="sourceLineNo">497</span> public HTableDescriptor getMetaTableDescriptor() {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span> /**<a name="line.501"></a>
+<span class="sourceLineNo">502</span> * @return META table descriptor<a name="line.502"></a>
+<span class="sourceLineNo">503</span> */<a name="line.503"></a>
+<span class="sourceLineNo">504</span> public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.504"></a>
+<span class="sourceLineNo">505</span> try {<a name="line.505"></a>
+<span class="sourceLineNo">506</span> return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.506"></a>
+<span class="sourceLineNo">507</span> } catch (IOException e) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span> throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.508"></a>
+<span class="sourceLineNo">509</span> }<a name="line.509"></a>
+<span class="sourceLineNo">510</span> }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> /**<a name="line.512"></a>
+<span class="sourceLineNo">513</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.513"></a>
+<span class="sourceLineNo">514</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.514"></a>
+<span class="sourceLineNo">515</span> * if the test relies on it.<a name="line.515"></a>
+<span class="sourceLineNo">516</span> * @return a unique path in the test filesystem<a name="line.516"></a>
+<span class="sourceLineNo">517</span> */<a name="line.517"></a>
+<span class="sourceLineNo">518</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.518"></a>
+<span class="sourceLineNo">519</span> if (dataTestDirOnTestFS == null) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span> setupDataTestDirOnTestFS();<a name="line.520"></a>
+<span class="sourceLineNo">521</span> }<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span> return dataTestDirOnTestFS;<a name="line.523"></a>
+<span class="sourceLineNo">524</span> }<a name="line.524"></a>
+<span class="sourceLineNo">525</span><a name="line.525"></a>
+<span class="sourceLineNo">526</span> /**<a name="line.526"></a>
+<span class="sourceLineNo">527</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.527"></a>
+<span class="sourceLineNo">528</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.528"></a>
+<span class="sourceLineNo">529</span> * if the test relies on it.<a name="line.529"></a>
+<span class="sourceLineNo">530</span> * @return a unique path in the test filesystem<a name="line.530"></a>
+<span class="sourceLineNo">531</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.531"></a>
+<span class="sourceLineNo">532</span> */<a name="line.532"></a>
+<span class="sourceLineNo">533</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.534"></a>
+<span class="sourceLineNo">535</span> }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536
<TRUNCATED>
[17/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
index 688bd4e..37bf508 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
@@ -589,1651 +589,1649 @@
<span class="sourceLineNo">581</span> LOG.debug("Loading {}", proc);<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span> Long rootProcId = getRootProcedureId(proc);<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (rootProcId == null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.585"></a>
-<span class="sourceLineNo">586</span> scheduler.addBack(proc);<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (proc.hasParent()) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.591"></a>
-<span class="sourceLineNo">592</span> // corrupted procedures are handled later at step 3<a name="line.592"></a>
-<span class="sourceLineNo">593</span> if (parent != null && !proc.isFinished()) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> parent.incChildrenLatch();<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.598"></a>
-<span class="sourceLineNo">599</span> procStack.loadStack(proc);<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span> proc.setRootProcId(rootProcId);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> switch (proc.getState()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> case RUNNABLE:<a name="line.603"></a>
-<span class="sourceLineNo">604</span> runnableList.add(proc);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> break;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> case WAITING:<a name="line.606"></a>
-<span class="sourceLineNo">607</span> waitingList.add(proc);<a name="line.607"></a>
-<span class="sourceLineNo">608</span> break;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> case WAITING_TIMEOUT:<a name="line.609"></a>
-<span class="sourceLineNo">610</span> waitingTimeoutList.add(proc);<a name="line.610"></a>
-<span class="sourceLineNo">611</span> break;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> case FAILED:<a name="line.612"></a>
-<span class="sourceLineNo">613</span> failedList.add(proc);<a name="line.613"></a>
-<span class="sourceLineNo">614</span> break;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> case ROLLEDBACK:<a name="line.615"></a>
-<span class="sourceLineNo">616</span> case INITIALIZING:<a name="line.616"></a>
-<span class="sourceLineNo">617</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> LOG.error(msg);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throw new UnsupportedOperationException(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> default:<a name="line.620"></a>
-<span class="sourceLineNo">621</span> break;<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> // 4. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> waitingList.forEach(proc -> {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> if (!proc.hasChildren()) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> // Normally, WAITING procedures should be waken by its children.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> // But, there is a case that, all the children are successful and before<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // they can wake up their parent procedure, the master was killed.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // are not loaded because of their SUCCESS state.<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // So we need to continue to run this WAITING procedure. But before<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // will throw:<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.637"></a>
-<span class="sourceLineNo">638</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> runnableList.add(proc);<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span> });<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span> // 5. Push the procedures to the timeout executor<a name="line.643"></a>
-<span class="sourceLineNo">644</span> waitingTimeoutList.forEach(proc -> {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> proc.afterReplay(getEnvironment());<a name="line.645"></a>
-<span class="sourceLineNo">646</span> timeoutExecutor.add(proc);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> });<a name="line.647"></a>
-<span class="sourceLineNo">648</span> // 6. restore locks<a name="line.648"></a>
-<span class="sourceLineNo">649</span> restoreLocks();<a name="line.649"></a>
-<span class="sourceLineNo">650</span> // 7. Push the procedure to the scheduler<a name="line.650"></a>
-<span class="sourceLineNo">651</span> failedList.forEach(scheduler::addBack);<a name="line.651"></a>
-<span class="sourceLineNo">652</span> runnableList.forEach(p -> {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> p.afterReplay(getEnvironment());<a name="line.653"></a>
-<span class="sourceLineNo">654</span> if (!p.hasParent()) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.655"></a>
-<span class="sourceLineNo">656</span> }<a name="line.656"></a>
-<span class="sourceLineNo">657</span> scheduler.addBack(p);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> });<a name="line.658"></a>
-<span class="sourceLineNo">659</span> }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span> /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.662"></a>
-<span class="sourceLineNo">663</span> * <p/><a name="line.663"></a>
-<span class="sourceLineNo">664</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.664"></a>
-<span class="sourceLineNo">665</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.665"></a>
-<span class="sourceLineNo">666</span> * pending and in-progress procedures.<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * @param numThreads number of threads available for procedure execution.<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * is found on replay. otherwise false.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> // We have numThreads executor + one timer thread used for timing out<a name="line.672"></a>
-<span class="sourceLineNo">673</span> // procedures and triggering periodic procedures.<a name="line.673"></a>
-<span class="sourceLineNo">674</span> this.corePoolSize = numThreads;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> this.maxPoolSize = 10 * numThreads;<a name="line.675"></a>
-<span class="sourceLineNo">676</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.676"></a>
-<span class="sourceLineNo">677</span> corePoolSize, maxPoolSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.679"></a>
-<span class="sourceLineNo">680</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span> // Create the workers<a name="line.682"></a>
-<span class="sourceLineNo">683</span> workerId.set(0);<a name="line.683"></a>
-<span class="sourceLineNo">684</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.684"></a>
-<span class="sourceLineNo">685</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">584</span> // The orphan procedures will be passed to handleCorrupted, so add an assert here<a name="line.584"></a>
+<span class="sourceLineNo">585</span> assert rootProcId != null;<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (proc.hasParent()) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.588"></a>
+<span class="sourceLineNo">589</span> if (parent != null && !proc.isFinished()) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> parent.incChildrenLatch();<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> procStack.loadStack(proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span> proc.setRootProcId(rootProcId);<a name="line.597"></a>
+<span class="sourceLineNo">598</span> switch (proc.getState()) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> case RUNNABLE:<a name="line.599"></a>
+<span class="sourceLineNo">600</span> runnableList.add(proc);<a name="line.600"></a>
+<span class="sourceLineNo">601</span> break;<a name="line.601"></a>
+<span class="sourceLineNo">602</span> case WAITING:<a name="line.602"></a>
+<span class="sourceLineNo">603</span> waitingList.add(proc);<a name="line.603"></a>
+<span class="sourceLineNo">604</span> break;<a name="line.604"></a>
+<span class="sourceLineNo">605</span> case WAITING_TIMEOUT:<a name="line.605"></a>
+<span class="sourceLineNo">606</span> waitingTimeoutList.add(proc);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> break;<a name="line.607"></a>
+<span class="sourceLineNo">608</span> case FAILED:<a name="line.608"></a>
+<span class="sourceLineNo">609</span> failedList.add(proc);<a name="line.609"></a>
+<span class="sourceLineNo">610</span> break;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> case ROLLEDBACK:<a name="line.611"></a>
+<span class="sourceLineNo">612</span> case INITIALIZING:<a name="line.612"></a>
+<span class="sourceLineNo">613</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.613"></a>
+<span class="sourceLineNo">614</span> LOG.error(msg);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> throw new UnsupportedOperationException(msg);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> default:<a name="line.616"></a>
+<span class="sourceLineNo">617</span> break;<a name="line.617"></a>
+<span class="sourceLineNo">618</span> }<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span> // 3. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.621"></a>
+<span class="sourceLineNo">622</span> waitingList.forEach(proc -> {<a name="line.622"></a>
+<span class="sourceLineNo">623</span> if (!proc.hasChildren()) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // Normally, WAITING procedures should be waken by its children.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // But, there is a case that, all the children are successful and before<a name="line.625"></a>
+<span class="sourceLineNo">626</span> // they can wake up their parent procedure, the master was killed.<a name="line.626"></a>
+<span class="sourceLineNo">627</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.627"></a>
+<span class="sourceLineNo">628</span> // are not loaded because of their SUCCESS state.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // So we need to continue to run this WAITING procedure. But before<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // will throw:<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.633"></a>
+<span class="sourceLineNo">634</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> runnableList.add(proc);<a name="line.635"></a>
+<span class="sourceLineNo">636</span> } else {<a name="line.636"></a>
+<span class="sourceLineNo">637</span> proc.afterReplay(getEnvironment());<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span> });<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span> // 4. Push the procedures to the timeout executor<a name="line.641"></a>
+<span class="sourceLineNo">642</span> waitingTimeoutList.forEach(proc -> {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> proc.afterReplay(getEnvironment());<a name="line.643"></a>
+<span class="sourceLineNo">644</span> timeoutExecutor.add(proc);<a name="line.644"></a>
+<span class="sourceLineNo">645</span> });<a name="line.645"></a>
+<span class="sourceLineNo">646</span> // 5. restore locks<a name="line.646"></a>
+<span class="sourceLineNo">647</span> restoreLocks();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> // 6. Push the procedure to the scheduler<a name="line.648"></a>
+<span class="sourceLineNo">649</span> failedList.forEach(scheduler::addBack);<a name="line.649"></a>
+<span class="sourceLineNo">650</span> runnableList.forEach(p -> {<a name="line.650"></a>
+<span class="sourceLineNo">651</span> p.afterReplay(getEnvironment());<a name="line.651"></a>
+<span class="sourceLineNo">652</span> if (!p.hasParent()) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> scheduler.addBack(p);<a name="line.655"></a>
+<span class="sourceLineNo">656</span> });<a name="line.656"></a>
+<span class="sourceLineNo">657</span> }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span> /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.660"></a>
+<span class="sourceLineNo">661</span> * <p/><a name="line.661"></a>
+<span class="sourceLineNo">662</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.662"></a>
+<span class="sourceLineNo">663</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.663"></a>
+<span class="sourceLineNo">664</span> * pending and in-progress procedures.<a name="line.664"></a>
+<span class="sourceLineNo">665</span> * @param numThreads number of threads available for procedure execution.<a name="line.665"></a>
+<span class="sourceLineNo">666</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.666"></a>
+<span class="sourceLineNo">667</span> * is found on replay. otherwise false.<a name="line.667"></a>
+<span class="sourceLineNo">668</span> */<a name="line.668"></a>
+<span class="sourceLineNo">669</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> // We have numThreads executor + one timer thread used for timing out<a name="line.670"></a>
+<span class="sourceLineNo">671</span> // procedures and triggering periodic procedures.<a name="line.671"></a>
+<span class="sourceLineNo">672</span> this.corePoolSize = numThreads;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> this.maxPoolSize = 10 * numThreads;<a name="line.673"></a>
+<span class="sourceLineNo">674</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.674"></a>
+<span class="sourceLineNo">675</span> corePoolSize, maxPoolSize);<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.677"></a>
+<span class="sourceLineNo">678</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span> // Create the workers<a name="line.680"></a>
+<span class="sourceLineNo">681</span> workerId.set(0);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.682"></a>
+<span class="sourceLineNo">683</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> long st, et;<a name="line.687"></a>
<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> long st, et;<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> // Acquire the store lease.<a name="line.691"></a>
-<span class="sourceLineNo">692</span> st = System.nanoTime();<a name="line.692"></a>
-<span class="sourceLineNo">693</span> store.recoverLease();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> et = System.nanoTime();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.695"></a>
-<span class="sourceLineNo">696</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span> // start the procedure scheduler<a name="line.698"></a>
-<span class="sourceLineNo">699</span> scheduler.start();<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> // TODO: Split in two steps.<a name="line.701"></a>
-<span class="sourceLineNo">702</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.702"></a>
-<span class="sourceLineNo">703</span> // The first one will make sure that we have the latest id,<a name="line.703"></a>
-<span class="sourceLineNo">704</span> // so we can start the threads and accept new procedures.<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // The second step will do the actual load of old procedures.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> st = System.nanoTime();<a name="line.706"></a>
-<span class="sourceLineNo">707</span> load(abortOnCorruption);<a name="line.707"></a>
-<span class="sourceLineNo">708</span> et = System.nanoTime();<a name="line.708"></a>
-<span class="sourceLineNo">709</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.709"></a>
-<span class="sourceLineNo">710</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.710"></a>
-<span class="sourceLineNo">711</span> }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></a>
-<span class="sourceLineNo">713</span> /**<a name="line.713"></a>
-<span class="sourceLineNo">714</span> * Start the workers.<a name="line.714"></a>
-<span class="sourceLineNo">715</span> */<a name="line.715"></a>
-<span class="sourceLineNo">716</span> public void startWorkers() throws IOException {<a name="line.716"></a>
-<span class="sourceLineNo">717</span> if (!running.compareAndSet(false, true)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Already running");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span> // Start the executors. Here we must have the lastProcId set.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.722"></a>
-<span class="sourceLineNo">723</span> timeoutExecutor.start();<a name="line.723"></a>
-<span class="sourceLineNo">724</span> for (WorkerThread worker: workerThreads) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span> worker.start();<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> // Internal chores<a name="line.728"></a>
-<span class="sourceLineNo">729</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span> // Add completed cleaner chore<a name="line.731"></a>
-<span class="sourceLineNo">732</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.732"></a>
-<span class="sourceLineNo">733</span> }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span> public void stop() {<a name="line.735"></a>
-<span class="sourceLineNo">736</span> if (!running.getAndSet(false)) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span> return;<a name="line.737"></a>
-<span class="sourceLineNo">738</span> }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span> LOG.info("Stopping");<a name="line.740"></a>
-<span class="sourceLineNo">741</span> scheduler.stop();<a name="line.741"></a>
-<span class="sourceLineNo">742</span> timeoutExecutor.sendStopSignal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> @VisibleForTesting<a name="line.745"></a>
-<span class="sourceLineNo">746</span> public void join() {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> assert !isRunning() : "expected not running";<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span> // stop the timeout executor<a name="line.749"></a>
-<span class="sourceLineNo">750</span> timeoutExecutor.awaitTermination();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span> // stop the worker threads<a name="line.752"></a>
-<span class="sourceLineNo">753</span> for (WorkerThread worker: workerThreads) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span> worker.awaitTermination();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span> // Destroy the Thread Group for the executors<a name="line.757"></a>
-<span class="sourceLineNo">758</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.758"></a>
-<span class="sourceLineNo">759</span> try {<a name="line.759"></a>
-<span class="sourceLineNo">760</span> threadGroup.destroy();<a name="line.760"></a>
-<span class="sourceLineNo">761</span> } catch (IllegalThreadStateException e) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.threadGroup, e.getMessage());<a name="line.763"></a>
-<span class="sourceLineNo">764</span> // This dumps list of threads on STDOUT.<a name="line.764"></a>
-<span class="sourceLineNo">765</span> this.threadGroup.list();<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span> // reset the in-memory state for testing<a name="line.768"></a>
-<span class="sourceLineNo">769</span> completed.clear();<a name="line.769"></a>
-<span class="sourceLineNo">770</span> rollbackStack.clear();<a name="line.770"></a>
-<span class="sourceLineNo">771</span> procedures.clear();<a name="line.771"></a>
-<span class="sourceLineNo">772</span> nonceKeysToProcIdsMap.clear();<a name="line.772"></a>
-<span class="sourceLineNo">773</span> scheduler.clear();<a name="line.773"></a>
-<span class="sourceLineNo">774</span> lastProcId.set(-1);<a name="line.774"></a>
-<span class="sourceLineNo">775</span> }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span> public void refreshConfiguration(final Configuration conf) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span> this.conf = conf;<a name="line.778"></a>
-<span class="sourceLineNo">779</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.779"></a>
-<span class="sourceLineNo">780</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span> }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">689</span> // Acquire the store lease.<a name="line.689"></a>
+<span class="sourceLineNo">690</span> st = System.nanoTime();<a name="line.690"></a>
+<span class="sourceLineNo">691</span> store.recoverLease();<a name="line.691"></a>
+<span class="sourceLineNo">692</span> et = System.nanoTime();<a name="line.692"></a>
+<span class="sourceLineNo">693</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.693"></a>
+<span class="sourceLineNo">694</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> // start the procedure scheduler<a name="line.696"></a>
+<span class="sourceLineNo">697</span> scheduler.start();<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> // TODO: Split in two steps.<a name="line.699"></a>
+<span class="sourceLineNo">700</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.700"></a>
+<span class="sourceLineNo">701</span> // The first one will make sure that we have the latest id,<a name="line.701"></a>
+<span class="sourceLineNo">702</span> // so we can start the threads and accept new procedures.<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // The second step will do the actual load of old procedures.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> st = System.nanoTime();<a name="line.704"></a>
+<span class="sourceLineNo">705</span> load(abortOnCorruption);<a name="line.705"></a>
+<span class="sourceLineNo">706</span> et = System.nanoTime();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.707"></a>
+<span class="sourceLineNo">708</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.708"></a>
+<span class="sourceLineNo">709</span> }<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span> /**<a name="line.711"></a>
+<span class="sourceLineNo">712</span> * Start the workers.<a name="line.712"></a>
+<span class="sourceLineNo">713</span> */<a name="line.713"></a>
+<span class="sourceLineNo">714</span> public void startWorkers() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span> if (!running.compareAndSet(false, true)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Already running");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> return;<a name="line.717"></a>
+<span class="sourceLineNo">718</span> }<a name="line.718"></a>
+<span class="sourceLineNo">719</span> // Start the executors. Here we must have the lastProcId set.<a name="line.719"></a>
+<span class="sourceLineNo">720</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.720"></a>
+<span class="sourceLineNo">721</span> timeoutExecutor.start();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (WorkerThread worker: workerThreads) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> worker.start();<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span> // Internal chores<a name="line.726"></a>
+<span class="sourceLineNo">727</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.727"></a>
+<span class="sourceLineNo">728</span><a name="line.728"></a>
+<span class="sourceLineNo">729</span> // Add completed cleaner chore<a name="line.729"></a>
+<span class="sourceLineNo">730</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.730"></a>
+<span class="sourceLineNo">731</span> }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span> public void stop() {<a name="line.733"></a>
+<span class="sourceLineNo">734</span> if (!running.getAndSet(false)) {<a name="line.734"></a>
+<span class="sourceLineNo">735</span> return;<a name="line.735"></a>
+<span class="sourceLineNo">736</span> }<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span> LOG.info("Stopping");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> scheduler.stop();<a name="line.739"></a>
+<span class="sourceLineNo">740</span> timeoutExecutor.sendStopSignal();<a name="line.740"></a>
+<span class="sourceLineNo">741</span> }<a name="line.741"></a>
+<span class="sourceLineNo">742</span><a name="line.742"></a>
+<span class="sourceLineNo">743</span> @VisibleForTesting<a name="line.743"></a>
+<span class="sourceLineNo">744</span> public void join() {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> assert !isRunning() : "expected not running";<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span> // stop the timeout executor<a name="line.747"></a>
+<span class="sourceLineNo">748</span> timeoutExecutor.awaitTermination();<a name="line.748"></a>
+<span class="sourceLineNo">749</span><a name="line.749"></a>
+<span class="sourceLineNo">750</span> // stop the worker threads<a name="line.750"></a>
+<span class="sourceLineNo">751</span> for (WorkerThread worker: workerThreads) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span> worker.awaitTermination();<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> // Destroy the Thread Group for the executors<a name="line.755"></a>
+<span class="sourceLineNo">756</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> try {<a name="line.757"></a>
+<span class="sourceLineNo">758</span> threadGroup.destroy();<a name="line.758"></a>
+<span class="sourceLineNo">759</span> } catch (IllegalThreadStateException e) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.threadGroup, e.getMessage());<a name="line.761"></a>
+<span class="sourceLineNo">762</span> // This dumps list of threads on STDOUT.<a name="line.762"></a>
+<span class="sourceLineNo">763</span> this.threadGroup.list();<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span><a name="line.765"></a>
+<span class="sourceLineNo">766</span> // reset the in-memory state for testing<a name="line.766"></a>
+<span class="sourceLineNo">767</span> completed.clear();<a name="line.767"></a>
+<span class="sourceLineNo">768</span> rollbackStack.clear();<a name="line.768"></a>
+<span class="sourceLineNo">769</span> procedures.clear();<a name="line.769"></a>
+<span class="sourceLineNo">770</span> nonceKeysToProcIdsMap.clear();<a name="line.770"></a>
+<span class="sourceLineNo">771</span> scheduler.clear();<a name="line.771"></a>
+<span class="sourceLineNo">772</span> lastProcId.set(-1);<a name="line.772"></a>
+<span class="sourceLineNo">773</span> }<a name="line.773"></a>
+<span class="sourceLineNo">774</span><a name="line.774"></a>
+<span class="sourceLineNo">775</span> public void refreshConfiguration(final Configuration conf) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span> this.conf = conf;<a name="line.776"></a>
+<span class="sourceLineNo">777</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.777"></a>
+<span class="sourceLineNo">778</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.778"></a>
+<span class="sourceLineNo">779</span> }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span> // ==========================================================================<a name="line.781"></a>
+<span class="sourceLineNo">782</span> // Accessors<a name="line.782"></a>
<span class="sourceLineNo">783</span> // ==========================================================================<a name="line.783"></a>
-<span class="sourceLineNo">784</span> // Accessors<a name="line.784"></a>
-<span class="sourceLineNo">785</span> // ==========================================================================<a name="line.785"></a>
-<span class="sourceLineNo">786</span> public boolean isRunning() {<a name="line.786"></a>
-<span class="sourceLineNo">787</span> return running.get();<a name="line.787"></a>
-<span class="sourceLineNo">788</span> }<a name="line.788"></a>
-<span class="sourceLineNo">789</span><a name="line.789"></a>
-<span class="sourceLineNo">790</span> /**<a name="line.790"></a>
-<span class="sourceLineNo">791</span> * @return the current number of worker threads.<a name="line.791"></a>
-<span class="sourceLineNo">792</span> */<a name="line.792"></a>
-<span class="sourceLineNo">793</span> public int getWorkerThreadCount() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span> return workerThreads.size();<a name="line.794"></a>
-<span class="sourceLineNo">795</span> }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span> /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span> * @return the core pool size settings.<a name="line.798"></a>
-<span class="sourceLineNo">799</span> */<a name="line.799"></a>
-<span class="sourceLineNo">800</span> public int getCorePoolSize() {<a name="line.800"></a>
-<span class="sourceLineNo">801</span> return corePoolSize;<a name="line.801"></a>
-<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span> public int getActiveExecutorCount() {<a name="line.804"></a>
-<span class="sourceLineNo">805</span> return activeExecutorCount.get();<a name="line.805"></a>
-<span class="sourceLineNo">806</span> }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span> public TEnvironment getEnvironment() {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.environment;<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> public ProcedureStore getStore() {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> return this.store;<a name="line.813"></a>
-<span class="sourceLineNo">814</span> }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span> ProcedureScheduler getScheduler() {<a name="line.816"></a>
-<span class="sourceLineNo">817</span> return scheduler;<a name="line.817"></a>
-<span class="sourceLineNo">818</span> }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.821"></a>
-<span class="sourceLineNo">822</span> this.scheduler.signalAll();<a name="line.822"></a>
-<span class="sourceLineNo">823</span> }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
+<span class="sourceLineNo">784</span> public boolean isRunning() {<a name="line.784"></a>
+<span class="sourceLineNo">785</span> return running.get();<a name="line.785"></a>
+<span class="sourceLineNo">786</span> }<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span> /**<a name="line.788"></a>
+<span class="sourceLineNo">789</span> * @return the current number of worker threads.<a name="line.789"></a>
+<span class="sourceLineNo">790</span> */<a name="line.790"></a>
+<span class="sourceLineNo">791</span> public int getWorkerThreadCount() {<a name="line.791"></a>
+<span class="sourceLineNo">792</span> return workerThreads.size();<a name="line.792"></a>
+<span class="sourceLineNo">793</span> }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span> * @return the core pool size settings.<a name="line.796"></a>
+<span class="sourceLineNo">797</span> */<a name="line.797"></a>
+<span class="sourceLineNo">798</span> public int getCorePoolSize() {<a name="line.798"></a>
+<span class="sourceLineNo">799</span> return corePoolSize;<a name="line.799"></a>
+<span class="sourceLineNo">800</span> }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span> public int getActiveExecutorCount() {<a name="line.802"></a>
+<span class="sourceLineNo">803</span> return activeExecutorCount.get();<a name="line.803"></a>
+<span class="sourceLineNo">804</span> }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span> public TEnvironment getEnvironment() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.environment;<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> public ProcedureStore getStore() {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> return this.store;<a name="line.811"></a>
+<span class="sourceLineNo">812</span> }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span> ProcedureScheduler getScheduler() {<a name="line.814"></a>
+<span class="sourceLineNo">815</span> return scheduler;<a name="line.815"></a>
+<span class="sourceLineNo">816</span> }<a name="line.816"></a>
+<span class="sourceLineNo">817</span><a name="line.817"></a>
+<span class="sourceLineNo">818</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.819"></a>
+<span class="sourceLineNo">820</span> this.scheduler.signalAll();<a name="line.820"></a>
+<span class="sourceLineNo">821</span> }<a name="line.821"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span><a name="line.826"></a>
+<span class="sourceLineNo">827</span> // ==========================================================================<a name="line.827"></a>
+<span class="sourceLineNo">828</span> // Submit/Remove Chores<a name="line.828"></a>
<span class="sourceLineNo">829</span> // ==========================================================================<a name="line.829"></a>
-<span class="sourceLineNo">830</span> // Submit/Remove Chores<a name="line.830"></a>
-<span class="sourceLineNo">831</span> // ==========================================================================<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span> * Add a chore procedure to the executor<a name="line.834"></a>
-<span class="sourceLineNo">835</span> * @param chore the chore to add<a name="line.835"></a>
-<span class="sourceLineNo">836</span> */<a name="line.836"></a>
-<span class="sourceLineNo">837</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.837"></a>
-<span class="sourceLineNo">838</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.838"></a>
-<span class="sourceLineNo">839</span> timeoutExecutor.add(chore);<a name="line.839"></a>
-<span class="sourceLineNo">840</span> }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span> /**<a name="line.842"></a>
-<span class="sourceLineNo">843</span> * Remove a chore procedure from the executor<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * @param chore the chore to remove<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return whether the chore is removed, or it will be removed later<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> chore.setState(ProcedureState.SUCCESS);<a name="line.848"></a>
-<span class="sourceLineNo">849</span> return timeoutExecutor.remove(chore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span> }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span> /**<a name="line.831"></a>
+<span class="sourceLineNo">832</span> * Add a chore procedure to the executor<a name="line.832"></a>
+<span class="sourceLineNo">833</span> * @param chore the chore to add<a name="line.833"></a>
+<span class="sourceLineNo">834</span> */<a name="line.834"></a>
+<span class="sourceLineNo">835</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.835"></a>
+<span class="sourceLineNo">836</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.836"></a>
+<span class="sourceLineNo">837</span> timeoutExecutor.add(chore);<a name="line.837"></a>
+<span class="sourceLineNo">838</span> }<a name="line.838"></a>
+<span class="sourceLineNo">839</span><a name="line.839"></a>
+<span class="sourceLineNo">840</span> /**<a name="line.840"></a>
+<span class="sourceLineNo">841</span> * Remove a chore procedure from the executor<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * @param chore the chore to remove<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return whether the chore is removed, or it will be removed later<a name="line.843"></a>
+<span class="sourceLineNo">844</span> */<a name="line.844"></a>
+<span class="sourceLineNo">845</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span> chore.setState(ProcedureState.SUCCESS);<a name="line.846"></a>
+<span class="sourceLineNo">847</span> return timeoutExecutor.remove(chore);<a name="line.847"></a>
+<span class="sourceLineNo">848</span> }<a name="line.848"></a>
+<span class="sourceLineNo">849</span><a name="line.849"></a>
+<span class="sourceLineNo">850</span> // ==========================================================================<a name="line.850"></a>
+<span class="sourceLineNo">851</span> // Nonce Procedure helpers<a name="line.851"></a>
<span class="sourceLineNo">852</span> // ==========================================================================<a name="line.852"></a>
-<span class="sourceLineNo">853</span> // Nonce Procedure helpers<a name="line.853"></a>
-<span class="sourceLineNo">854</span> // ==========================================================================<a name="line.854"></a>
-<span class="sourceLineNo">855</span> /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.856"></a>
-<span class="sourceLineNo">857</span> * @param nonceGroup<a name="line.857"></a>
-<span class="sourceLineNo">858</span> * @param nonce<a name="line.858"></a>
-<span class="sourceLineNo">859</span> * @return the generated NonceKey<a name="line.859"></a>
-<span class="sourceLineNo">860</span> */<a name="line.860"></a>
-<span class="sourceLineNo">861</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.862"></a>
-<span class="sourceLineNo">863</span> }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span> /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.866"></a>
-<span class="sourceLineNo">867</span> * A procId will be reserved and on submitProcedure(),<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.868"></a>
-<span class="sourceLineNo">869</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.870"></a>
-<span class="sourceLineNo">871</span> * and submit the procedure.<a name="line.871"></a>
-<span class="sourceLineNo">872</span> *<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.873"></a>
-<span class="sourceLineNo">874</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.874"></a>
-<span class="sourceLineNo">875</span> */<a name="line.875"></a>
-<span class="sourceLineNo">876</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> if (nonceKey == null) return -1;<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span> // check if we have already a Reserved ID for the nonce<a name="line.879"></a>
-<span class="sourceLineNo">880</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (oldProcId == null) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.882"></a>
-<span class="sourceLineNo">883</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.883"></a>
-<span class="sourceLineNo">884</span> final long newProcId = nextProcId();<a name="line.884"></a>
-<span class="sourceLineNo">885</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> if (oldProcId == null) return -1;<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span><a name="line.888"></a>
-<span class="sourceLineNo">889</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.889"></a>
-<span class="sourceLineNo">890</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.890"></a>
-<span class="sourceLineNo">891</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.891"></a>
-<span class="sourceLineNo">892</span> while (isRunning() &&<a name="line.892"></a>
-<span class="sourceLineNo">893</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.893"></a>
-<span class="sourceLineNo">894</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> if (traceEnabled) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.896"></a>
-<span class="sourceLineNo">897</span> }<a name="line.897"></a>
-<span class="sourceLineNo">898</span> Threads.sleep(100);<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span> return oldProcId.longValue();<a name="line.900"></a>
-<span class="sourceLineNo">901</span> }<a name="line.901"></a>
-<span class="sourceLineNo">902</span><a name="line.902"></a>
-<span class="sourceLineNo">903</span> /**<a name="line.903"></a>
-<span class="sourceLineNo">904</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.904"></a>
-<span class="sourceLineNo">905</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.905"></a>
-<span class="sourceLineNo">906</span> */<a name="line.906"></a>
-<span class="sourceLineNo">907</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.907"></a>
-<span class="sourceLineNo">908</span> if (nonceKey == null) return;<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.910"></a>
-<span class="sourceLineNo">911</span> if (procId == null) return;<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span> // if the procedure was not submitted, remove the nonce<a name="line.913"></a>
-<span class="sourceLineNo">914</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.915"></a>
-<span class="sourceLineNo">916</span> }<a name="line.916"></a>
-<span class="sourceLineNo">917</span> }<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.919"></a>
-<span class="sourceLineNo">920</span> private String procName;<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span> public FailedProcedure() {<a name="line.922"></a>
-<span class="sourceLineNo">923</span> }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.925"></a>
-<span class="sourceLineNo">926</span> NonceKey nonceKey, IOException exception) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span> this.procName = procName;<a name="line.927"></a>
-<span class="sourceLineNo">928</span> setProcId(procId);<a name="line.928"></a>
-<span class="sourceLineNo">929</span> setState(ProcedureState.ROLLEDBACK);<a name="line.929"></a>
-<span class="sourceLineNo">930</span> setOwner(owner);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> setNonceKey(nonceKey);<a name="line.931"></a>
-<span class="sourceLineNo">932</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.932"></a>
-<span class="sourceLineNo">933</span> setSubmittedTime(currentTime);<a name="line.933"></a>
-<span class="sourceLineNo">934</span> setLastUpdate(currentTime);<a name="line.934"></a>
-<span class="sourceLineNo">935</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.935"></a>
-<span class="sourceLineNo">936</span> }<a name="line.936"></a>
-<span class="sourceLineNo">937</span><a name="line.937"></a>
-<span class="sourceLineNo">938</span> @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span> public String getProcName() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span> return procName;<a name="line.940"></a>
-<span class="sourceLineNo">941</span> }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span> @Override<a name="line.943"></a>
-<span class="sourceLineNo">944</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.944"></a>
-<span class="sourceLineNo">945</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.945"></a>
-<span class="sourceLineNo">946</span> InterruptedException {<a name="line.946"></a>
-<span class="sourceLineNo">947</span> throw new UnsupportedOperationException();<a name="line.947"></a>
-<span class="sourceLineNo">948</span> }<a name="line.948"></a>
-<span class="sourceLineNo">949</span><a name="line.949"></a>
-<span class="sourceLineNo">950</span> @Override<a name="line.950"></a>
-<span class="sourceLineNo">951</span> protected void rollback(TEnvironment env)<a name="line.951"></a>
-<span class="sourceLineNo">952</span> throws IOException, InterruptedException {<a name="line.952"></a>
-<span class="sourceLineNo">953</span> throw new UnsupportedOperationException();<a name="line.953"></a>
-<span class="sourceLineNo">954</span> }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span> @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span> protected boolean abort(TEnvironment env) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span> throw new UnsupportedOperationException();<a name="line.958"></a>
-<span class="sourceLineNo">959</span> }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span> @Override<a name="line.961"></a>
-<span class="sourceLineNo">962</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.962"></a>
-<span class="sourceLineNo">963</span> throws IOException {<a name="line.963"></a>
-<span class="sourceLineNo">964</span> }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span> @Override<a name="line.966"></a>
-<span class="sourceLineNo">967</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.967"></a>
-<span class="sourceLineNo">968</span> throws IOException {<a name="line.968"></a>
-<span class="sourceLineNo">969</span> }<a name="line.969"></a>
-<span class="sourceLineNo">970</span> }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span> /**<a name="line.972"></a>
-<span class="sourceLineNo">973</span> * If the failure failed before submitting it, we may want to give back the<a name="line.973"></a>
-<span class="sourceLineNo">974</span> * same error to the requests with the same nonceKey.<a name="line.974"></a>
-<span class="sourceLineNo">975</span> *<a name="line.975"></a>
-<span class="sourceLineNo">976</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.976"></a>
-<span class="sourceLineNo">977</span> * @param procName name of the procedure, used to inform the user<a name="line.977"></a>
-<span class="sourceLineNo">978</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.978"></a>
-<span class="sourceLineNo">979</span> * @param exception the failure to report to the user<a name="line.979"></a>
-<span class="sourceLineNo">980</span> */<a name="line.980"></a>
-<span class="sourceLineNo">981</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.981"></a>
-<span class="sourceLineNo">982</span> IOException exception) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span> if (nonceKey == null) {<a name="line.983"></a>
-<span class="sourceLineNo">984</span> return;<a name="line.984"></a>
-<span class="sourceLineNo">985</span> }<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.987"></a>
-<span class="sourceLineNo">988</span> if (procId == null || completed.containsKey(procId)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span> return;<a name="line.989"></a>
-<span class="sourceLineNo">990</span> }<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span> Procedure<TEnvironment> proc =<a name="line.992"></a>
-<span class="sourceLineNo">993</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.993"></a>
-<span class="sourceLineNo">994</span><a name="line.994"></a>
-<span class="sourceLineNo">995</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.995"></a>
-<span class="sourceLineNo">996</span> }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">853</span> /**<a name="line.853"></a>
+<span class="sourceLineNo">854</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.854"></a>
+<span class="sourceLineNo">855</span> * @param nonceGroup<a name="line.855"></a>
+<span class="sourceLineNo">856</span> * @param nonce<a name="line.856"></a>
+<span class="sourceLineNo">857</span> * @return the generated NonceKey<a name="line.857"></a>
+<span class="sourceLineNo">858</span> */<a name="line.858"></a>
+<span class="sourceLineNo">859</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.860"></a>
+<span class="sourceLineNo">861</span> }<a name="line.861"></a>
+<span class="sourceLineNo">862</span><a name="line.862"></a>
+<span class="sourceLineNo">863</span> /**<a name="line.863"></a>
+<span class="sourceLineNo">864</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.864"></a>
+<span class="sourceLineNo">865</span> * A procId will be reserved and on submitProcedure(),<a name="line.865"></a>
+<span class="sourceLineNo">866</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.866"></a>
+<span class="sourceLineNo">867</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.867"></a>
+<span class="sourceLineNo">868</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.868"></a>
+<span class="sourceLineNo">869</span> * and submit the procedure.<a name="line.869"></a>
+<span class="sourceLineNo">870</span> *<a name="line.870"></a>
+<span class="sourceLineNo">871</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.871"></a>
+<span class="sourceLineNo">872</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.872"></a>
+<span class="sourceLineNo">873</span> */<a name="line.873"></a>
+<span class="sourceLineNo">874</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.874"></a>
+<span class="sourceLineNo">875</span> if (nonceKey == null) return -1;<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span> // check if we have already a Reserved ID for the nonce<a name="line.877"></a>
+<span class="sourceLineNo">878</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.878"></a>
+<span class="sourceLineNo">879</span> if (oldProcId == null) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.880"></a>
+<span class="sourceLineNo">881</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.881"></a>
+<span class="sourceLineNo">882</span> final long newProcId = nextProcId();<a name="line.882"></a>
+<span class="sourceLineNo">883</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.883"></a>
+<span class="sourceLineNo">884</span> if (oldProcId == null) return -1;<a name="line.884"></a>
+<span class="sourceLineNo">885</span> }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.887"></a>
+<span class="sourceLineNo">888</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.888"></a>
+<span class="sourceLineNo">889</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.889"></a>
+<span class="sourceLineNo">890</span> while (isRunning() &&<a name="line.890"></a>
+<span class="sourceLineNo">891</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.891"></a>
+<span class="sourceLineNo">892</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> if (traceEnabled) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> Threads.sleep(100);<a name="line.896"></a>
+<span class="sourceLineNo">897</span> }<a name="line.897"></a>
+<span class="sourceLineNo">898</span> return oldProcId.longValue();<a name="line.898"></a>
+<span class="sourceLineNo">899</span> }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span> /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.903"></a>
+<span class="sourceLineNo">904</span> */<a name="line.904"></a>
+<span class="sourceLineNo">905</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span> if (nonceKey == null) return;<a name="line.906"></a>
+<span class="sourceLineNo">907</span><a name="line.907"></a>
+<span class="sourceLineNo">908</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.908"></a>
+<span class="sourceLineNo">909</span> if (procId == null) return;<a name="line.909"></a>
+<span class="sourceLineNo">910</span><a name="line.910"></a>
+<span class="sourceLineNo">911</span> // if the procedure was not submitted, remove the nonce<a name="line.911"></a>
+<span class="sourceLineNo">912</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.912"></a>
+<span class="sourceLineNo">913</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.913"></a>
+<span class="sourceLineNo">914</span> }<a name="line.914"></a>
+<span class="sourceLineNo">915</span> }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.917"></a>
+<span class="sourceLineNo">918</span> private String procName;<a name="line.918"></a>
+<span class="sourceLineNo">919</span><a name="line.919"></a>
+<span class="sourceLineNo">920</span> public FailedProcedure() {<a name="line.920"></a>
+<span class="sourceLineNo">921</span> }<a name="line.921"></a>
+<span class="sourceLineNo">922</span><a name="line.922"></a>
+<span class="sourceLineNo">923</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.923"></a>
+<span class="sourceLineNo">924</span> NonceKey nonceKey, IOException exception) {<a name="line.924"></a>
+<span class="sourceLineNo">925</span> this.procName = procName;<a name="line.925"></a>
+<span class="sourceLineNo">926</span> setProcId(procId);<a name="line.926"></a>
+<span class="sourceLineNo">927</span> setState(ProcedureState.ROLLEDBACK);<a name="line.927"></a>
+<span class="sourceLineNo">928</span> setOwner(owner);<a name="line.928"></a>
+<span class="sourceLineNo">929</span> setNonceKey(nonceKey);<a name="line.929"></a>
+<span class="sourceLineNo">930</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.930"></a>
+<span class="sourceLineNo">931</span> setSubmittedTime(currentTime);<a name="line.931"></a>
+<span class="sourceLineNo">932</span> setLastUpdate(currentTime);<a name="line.932"></a>
+<span class="sourceLineNo">933</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.933"></a>
+<span class="sourceLineNo">934</span> }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span> @Override<a name="line.936"></a>
+<span class="sourceLineNo">937</span> public String getProcName() {<a name="line.937"></a>
+<span class="sourceLineNo">938</span> return procName;<a name="line.938"></a>
+<span class="sourceLineNo">939</span> }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span> @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.942"></a>
+<span class="sourceLineNo">943</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.943"></a>
+<span class="sourceLineNo">944</span> InterruptedException {<a name="line.944"></a>
+<span class="sourceLineNo">945</span> throw new UnsupportedOperationException();<a name="line.945"></a>
+<span class="sourceLineNo">946</span> }<a name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span> @Override<a name="line.948"></a>
+<span class="sourceLineNo">949</span> protected void rollback(TEnvironment env)<a name="line.949"></a>
+<span class="sourceLineNo">950</span> throws IOException, InterruptedException {<a name="line.950"></a>
+<span class="sourceLineNo">951</span> throw new UnsupportedOperationException();<a name="line.951"></a>
+<span class="sourceLineNo">952</span> }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span> @Override<a name="line.954"></a>
+<span class="sourceLineNo">955</span> protected boolean abort(TEnvironment env) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span> throw new UnsupportedOperationException();<a name="line.956"></a>
+<span class="sourceLineNo">957</span> }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span> @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.960"></a>
+<span class="sourceLineNo">961</span> throws IOException {<a name="line.961"></a>
+<span class="sourceLineNo">962</span> }<a name="line.962"></a>
+<span class="sourceLineNo">963</span><a name="line.963"></a>
+<span class="sourceLineNo">964</span> @Override<a name="line.964"></a>
+<span class="sourceLineNo">965</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.965"></a>
+<span class="sourceLineNo">966</span> throws IOException {<a name="line.966"></a>
+<span class="sourceLineNo">967</span> }<a name="line.967"></a>
+<span class="sourceLineNo">968</span> }<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span> /**<a name="line.970"></a>
+<span class="sourceLineNo">971</span> * If the failure failed before submitting it, we may want to give back the<a name="line.971"></a>
+<span class="sourceLineNo">972</span> * same error to the requests with the same nonceKey.<a name="line.972"></a>
+<span class="sourceLineNo">973</span> *<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * @param procName name of the procedure, used to inform the user<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * @param exception the failure to report to the user<a name="line.977"></a>
+<span class="sourceLineNo">978</span> */<a name="line.978"></a>
+<span class="sourceLineNo">979</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.979"></a>
+<span class="sourceLineNo">980</span> IOException exception) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span> if (nonceKey == null) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span> return;<a name="line.982"></a>
+<span class="sourceLineNo">983</span> }<a name="line.983"></a>
+<span class="sourceLineNo">984</span><a name="line.984"></a>
+<span class="sourceLineNo">985</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.985"></a>
+<span class="sourceLineNo">986</span> if (procId == null || completed.containsKey(procId)) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span> return;<a name="line.987"></a>
+<span class="sourceLineNo">988</span> }<a name="line.988"></a>
+<span class="sourceLineNo">989</span><a name="line.989"></a>
+<span class="sourceLineNo">990</span> Procedure<TEnvironment> proc =<a name="line.990"></a>
+<span class="sourceLineNo">991</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.991"></a>
+<span class="sourceLineNo">992</span><a name="line.992"></a>
+<span class="sourceLineNo">993</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.993"></a>
+<span class="sourceLineNo">994</span> }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span> // ==========================================================================<a name="line.996"></a>
+<span class="sourceLineNo">997</span> // Submit/Abort Procedure<a name="line.997"></a>
<span class="sourceLineNo">998</span> // ==========================================================================<a name="line.998"></a>
-<span class="sourceLineNo">999</span> // Submit/Abort Procedure<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> // ==========================================================================<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> /**<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> * Add a new root-procedure to the executor.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> * @param proc the new procedure to execute.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> * @return the procedure id, that can be used to monitor the operation<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> */<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> public long submitProcedure(Procedure<TEnvironment> proc) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> return submitProcedure(proc, null);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span><a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> /**<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> * Bypass a procedure. If the procedure is set to bypass, all the logic in<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> * execute/rollback will be ignored and it will return success, whatever.<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> * It is used to recover buggy stuck procedures, releasing the lock resources<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> * and letting other procedures run. Bypassing one procedure (and its ancestors will<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> * be bypassed automatically) may leave the cluster in a middle state, e.g. region<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> * not assigned, or some hdfs files left behind. After getting rid of those stuck procedures,<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> * the operators may have to do some clean up on hdfs or schedule some assign procedures<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> * to let region online. DO AT YOUR OWN RISK.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> * <p><a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> * A procedure can be bypassed only if<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span> * 1. The procedure is in state of RUNNABLE, WAITING, WAITING_TIMEOUT<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> * or it is a root procedure without any child.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * 2. No other worker thread is executing it<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> * 3. No child procedure has been submitted<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> *<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> * <p><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> * If all the requirements are meet, the procedure and its ancestors will be<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> * bypassed and persisted to WAL.<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> *<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span> * <p><a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> * If the procedure is in WAITING state, will set it to RUNNABLE add it to run queue.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> * TODO: What about WAITING_TIMEOUT?<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> * @param pids the procedure id<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> * @param lockWait time to wait lock<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> * @param force if force set to true, we will bypass the procedure even if it is executing.<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> * This is for procedures which can't break out during executing(due to bug, mostly)<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> * In this case, bypassing the procedure is not enough, since it is already stuck<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> * there. We need to restart the master after bypassing, and letting the problematic<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span> * procedure to execute wth bypass=true, so in that condition, the procedure can be<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> * successfully bypassed.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> * @param recursive We will do an expensive search for children of each pid. EXPENSIVE!<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> * @return true if bypass success<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> * @throws IOException IOException<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span> */<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> public List<Boolean> bypassProcedure(List<Long> pids, long lockWait, boolean force,<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span> boolean recursive)<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> throws IOException {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> List<Boolean> result = new ArrayList<Boolean>(pids.size());<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> for(long pid: pids) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span> result.add(bypassProcedure(pid, lockWait, force, recursive));<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> return result;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span> }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> boolean bypassProcedure(long pid, long lockWait, boolean override, boolean recursive)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span> throws IOException {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> Preconditions.checkArgument(lockWait > 0, "lockWait should be positive");<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span> final Procedure<TEnvironment> procedure = getProcedure(pid);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span> if (procedure == null) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> LOG.debug("Procedure pid={} does not exist, skipping bypass", pid);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> return false;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span> }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span><a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> LOG.debug("Begin bypass {} with lockWait={}, override={}, recursive={}",<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span> procedure, lockWait, override, recursive);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> IdLock.Entry lockEntry = procExecutionLock.tryLockEntry(procedure.getProcId(), lockWait);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> if (lockEntry == null && !override) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> LOG.debug("Waited {} ms, but {} is still running, skipping bypass with force={}",<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> lockWait, procedure, override);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> } else if (lockEntry == null) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> LOG.debug("Waited {} ms, but {} is still running, begin bypass with force={}",<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span> lockWait, procedure, override);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // check whether the procedure is already finished<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> if (procedure.isFinished()) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> LOG.debug("{} is already finished, skipping bypass", procedure);<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> return false;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> if (procedure.hasChildren()) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> if (recursive) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> // EXPENSIVE. Checks each live procedure of which there could be many!!!<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span> // Is there another way to get children of a procedure?<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> LOG.info("Recursive bypass on children of pid={}", procedure.getProcId());<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> this.procedures.forEachValue(1 /*Single-threaded*/,<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> // Transformer<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> v -> v.getParentProcId() == procedure.getProcId()? v: null,<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> // Consumer<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span> v ->
<TRUNCATED>
[30/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
Published site at 931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Project: http://git-wip-us.apache.org/repos/asf/hbase-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase-site/commit/6b8b907f
Tree: http://git-wip-us.apache.org/repos/asf/hbase-site/tree/6b8b907f
Diff: http://git-wip-us.apache.org/repos/asf/hbase-site/diff/6b8b907f
Branch: refs/heads/asf-site
Commit: 6b8b907fec0d7d3943082677a873986a3fa27b8f
Parents: 39b82c8
Author: jenkins <bu...@apache.org>
Authored: Mon Oct 22 14:53:22 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Mon Oct 22 14:53:22 2018 +0000
----------------------------------------------------------------------
acid-semantics.html | 4 +-
apache_hbase_reference_guide.pdf | 4 +-
book.html | 2 +-
bulk-loads.html | 4 +-
checkstyle-aggregate.html | 574 +-
coc.html | 4 +-
dependencies.html | 4 +-
dependency-convergence.html | 4 +-
dependency-info.html | 4 +-
dependency-management.html | 4 +-
devapidocs/constant-values.html | 4 +-
devapidocs/index-all.html | 8 +-
.../hadoop/hbase/backup/package-tree.html | 4 +-
.../hadoop/hbase/client/package-tree.html | 24 +-
.../hadoop/hbase/coprocessor/package-tree.html | 2 +-
.../hadoop/hbase/filter/package-tree.html | 8 +-
.../hadoop/hbase/io/hfile/package-tree.html | 6 +-
.../apache/hadoop/hbase/ipc/package-tree.html | 2 +-
.../hadoop/hbase/mapreduce/package-tree.html | 2 +-
.../hbase/master/balancer/package-tree.html | 2 +-
.../hadoop/hbase/master/package-tree.html | 4 +-
.../hbase/master/procedure/package-tree.html | 2 +-
.../org/apache/hadoop/hbase/package-tree.html | 14 +-
.../ProcedureExecutor.FailedProcedure.html | 20 +-
...ProcedureExecutor.KeepAliveWorkerThread.html | 6 +-
.../ProcedureExecutor.WorkerMonitor.html | 32 +-
.../ProcedureExecutor.WorkerThread.html | 20 +-
.../hbase/procedure2/ProcedureExecutor.html | 132 +-
.../hadoop/hbase/procedure2/package-tree.html | 4 +-
.../store/ProcedureStore.ProcedureIterator.html | 8 +-
.../store/wal/WALProcedureTree.Iter.html | 8 +-
.../hadoop/hbase/quotas/package-tree.html | 6 +-
.../regionserver/HStore.StoreFlusherImpl.html | 34 +-
.../hadoop/hbase/regionserver/HStore.html | 407 +-
.../regionserver/class-use/HStoreFile.html | 12 +-
.../hadoop/hbase/regionserver/package-tree.html | 16 +-
.../regionserver/querymatcher/package-tree.html | 2 +-
.../hbase/regionserver/wal/package-tree.html | 2 +-
.../replication/regionserver/package-tree.html | 2 +-
.../hadoop/hbase/rest/model/package-tree.html | 2 +-
.../hbase/security/access/package-tree.html | 2 +-
.../hadoop/hbase/security/package-tree.html | 4 +-
.../hadoop/hbase/thrift/package-tree.html | 2 +-
.../apache/hadoop/hbase/util/package-tree.html | 8 +-
.../apache/hadoop/hbase/wal/package-tree.html | 2 +-
.../org/apache/hadoop/hbase/Version.html | 4 +-
...edureExecutor.CompletedProcedureCleaner.html | 3256 ++++---
...dureExecutor.CompletedProcedureRetainer.html | 3256 ++++---
.../ProcedureExecutor.FailedProcedure.html | 3256 ++++---
...ProcedureExecutor.KeepAliveWorkerThread.html | 3256 ++++---
...edureExecutor.ProcedureExecutorListener.html | 3256 ++++---
.../procedure2/ProcedureExecutor.Testing.html | 3256 ++++---
.../ProcedureExecutor.WorkerMonitor.html | 3256 ++++---
.../ProcedureExecutor.WorkerThread.html | 3256 ++++---
.../hbase/procedure2/ProcedureExecutor.html | 3256 ++++---
.../store/ProcedureStore.ProcedureIterator.html | 4 +-
.../store/ProcedureStore.ProcedureLoader.html | 4 +-
.../ProcedureStore.ProcedureStoreListener.html | 4 +-
.../hbase/procedure2/store/ProcedureStore.html | 4 +-
.../regionserver/HStore.StoreFlusherImpl.html | 4901 ++++++-----
.../hadoop/hbase/regionserver/HStore.html | 4901 ++++++-----
downloads.html | 4 +-
export_control.html | 4 +-
index.html | 4 +-
integration.html | 4 +-
issue-tracking.html | 4 +-
license.html | 4 +-
mail-lists.html | 4 +-
metrics.html | 4 +-
old_news.html | 4 +-
plugin-management.html | 4 +-
plugins.html | 4 +-
poweredbyhbase.html | 4 +-
project-info.html | 4 +-
project-reports.html | 4 +-
project-summary.html | 4 +-
pseudo-distributed.html | 4 +-
replication.html | 4 +-
resources.html | 4 +-
source-repository.html | 4 +-
sponsors.html | 4 +-
supportingprojects.html | 4 +-
team-list.html | 4 +-
.../hadoop/hbase/HBaseTestingUtility.html | 469 +-
.../hadoop/hbase/HBaseTestingUtility.html | 8273 +++++++++---------
testdevapidocs/index-all.html | 4 +
...lity.PortAllocator.AvailablePortChecker.html | 4 +-
.../HBaseTestingUtility.PortAllocator.html | 20 +-
.../HBaseTestingUtility.SeenRowTracker.html | 20 +-
.../hadoop/hbase/HBaseTestingUtility.html | 529 +-
.../hadoop/hbase/backup/package-tree.html | 2 +-
.../apache/hadoop/hbase/client/TestAdmin2.html | 131 +-
.../hadoop/hbase/io/hfile/package-tree.html | 2 +-
...estingUtility.InjectAbortOnLoadListener.html | 16 +-
.../MasterProcedureTestingUtility.html | 4 +-
.../org/apache/hadoop/hbase/package-tree.html | 8 +-
.../hadoop/hbase/procedure2/package-tree.html | 4 +-
.../hadoop/hbase/regionserver/package-tree.html | 2 +-
.../apache/hadoop/hbase/test/package-tree.html | 4 +-
.../apache/hadoop/hbase/wal/package-tree.html | 2 +-
...lity.PortAllocator.AvailablePortChecker.html | 8273 +++++++++---------
.../HBaseTestingUtility.PortAllocator.html | 8273 +++++++++---------
.../HBaseTestingUtility.SeenRowTracker.html | 8273 +++++++++---------
.../hadoop/hbase/HBaseTestingUtility.html | 8273 +++++++++---------
.../apache/hadoop/hbase/client/TestAdmin2.html | 1419 +--
...estingUtility.InjectAbortOnLoadListener.html | 173 +-
.../MasterProcedureTestingUtility.StepHook.html | 173 +-
.../MasterProcedureTestingUtility.html | 173 +-
108 files changed, 42613 insertions(+), 42546 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 112417e..0fb38fa 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Apache HBase (TM) ACID Properties
@@ -611,7 +611,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 17496df..84da4e4 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
/Author (Apache HBase Team)
/Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
/Producer (Apache HBase Team)
-/ModDate (D:20181021143222+00'00')
-/CreationDate (D:20181021144832+00'00')
+/ModDate (D:20181022143315+00'00')
+/CreationDate (D:20181022145007+00'00')
>>
endobj
2 0 obj
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 203afc7..8ccb15f 100644
--- a/book.html
+++ b/book.html
@@ -41324,7 +41324,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
<div id="footer">
<div id="footer-text">
Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-10-21 14:32:22 UTC
+Last updated 2018-10-22 14:33:15 UTC
</div>
</div>
</body>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index ba51e5e..d8c0811 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Bulk Loads in Apache HBase (TM)
@@ -316,7 +316,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index e21318d..c084b41 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Checkstyle Results</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -11368,1345 +11368,1345 @@
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>388</td></tr>
+<td>387</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>390</td></tr>
+<td>389</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' child has incorrect indentation level 7, expected level should be 8.</td>
-<td>467</td></tr>
+<td>466</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method call' child has incorrect indentation level 9, expected level should be 10.</td>
-<td>468</td></tr>
+<td>467</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method call' child has incorrect indentation level 9, expected level should be 10.</td>
-<td>469</td></tr>
+<td>468</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method call' child has incorrect indentation level 9, expected level should be 10.</td>
-<td>470</td></tr>
+<td>469</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method call rparen' has incorrect indentation level 7, expected level should be 8.</td>
-<td>471</td></tr>
+<td>470</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>483</td></tr>
+<td>482</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>565</td></tr>
+<td>564</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>569</td></tr>
+<td>568</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>577</td></tr>
+<td>576</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>581</td></tr>
+<td>580</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>589</td></tr>
+<td>588</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>599</td></tr>
+<td>598</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>614</td></tr>
+<td>613</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>618</td></tr>
+<td>617</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>619</td></tr>
+<td>618</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>whitespace</td>
<td>ParenPad</td>
<td>'(' is followed by whitespace.</td>
-<td>620</td></tr>
+<td>619</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>632</td></tr>
+<td>631</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>636</td></tr>
+<td>635</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>637</td></tr>
+<td>636</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>653</td></tr>
+<td>652</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>653</td></tr>
+<td>652</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>760</td></tr>
+<td>759</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>798</td></tr>
+<td>797</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>EmptyBlock</td>
<td>Must have at least one statement.</td>
-<td>1201</td></tr>
+<td>1200</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1212</td></tr>
+<td>1211</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1225</td></tr>
+<td>1224</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1272</td></tr>
+<td>1271</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1287</td></tr>
+<td>1286</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1299</td></tr>
+<td>1298</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1300</td></tr>
+<td>1299</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1301</td></tr>
+<td>1300</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1303</td></tr>
+<td>1302</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1318</td></tr>
+<td>1317</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1331</td></tr>
+<td>1330</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1353</td></tr>
+<td>1352</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1361</td></tr>
+<td>1360</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1369</td></tr>
+<td>1368</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1377</td></tr>
+<td>1376</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1385</td></tr>
+<td>1384</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1386</td></tr>
+<td>1385</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1388</td></tr>
+<td>1387</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1391</td></tr>
+<td>1390</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1397</td></tr>
+<td>1396</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1398</td></tr>
+<td>1397</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1400</td></tr>
+<td>1399</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1403</td></tr>
+<td>1402</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1413</td></tr>
+<td>1412</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1414</td></tr>
+<td>1413</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1416</td></tr>
+<td>1415</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1419</td></tr>
+<td>1418</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1425</td></tr>
+<td>1424</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1426</td></tr>
+<td>1425</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1427</td></tr>
+<td>1426</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1429</td></tr>
+<td>1428</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>1433</td></tr>
+<td>1432</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1443</td></tr>
+<td>1442</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1444</td></tr>
+<td>1443</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1446</td></tr>
+<td>1445</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1449</td></tr>
+<td>1448</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1455</td></tr>
+<td>1454</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1456</td></tr>
+<td>1455</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1458</td></tr>
+<td>1457</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1466</td></tr>
+<td>1465</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1467</td></tr>
+<td>1466</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1468</td></tr>
+<td>1467</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1470</td></tr>
+<td>1469</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1494</td></tr>
+<td>1493</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1506</td></tr>
+<td>1505</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1507</td></tr>
+<td>1506</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1510</td></tr>
+<td>1509</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1513</td></tr>
+<td>1512</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1567</td></tr>
+<td>1566</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1586</td></tr>
+<td>1585</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1597</td></tr>
+<td>1596</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1598</td></tr>
+<td>1597</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1599</td></tr>
+<td>1598</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1601</td></tr>
+<td>1600</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1604</td></tr>
+<td>1603</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1610</td></tr>
+<td>1609</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1611</td></tr>
+<td>1610</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1612</td></tr>
+<td>1611</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1614</td></tr>
+<td>1613</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1623</td></tr>
+<td>1622</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1624</td></tr>
+<td>1623</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1625</td></tr>
+<td>1624</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1626</td></tr>
+<td>1625</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1628</td></tr>
+<td>1627</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1646</td></tr>
+<td>1645</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1647</td></tr>
+<td>1646</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1648</td></tr>
+<td>1647</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1650</td></tr>
+<td>1649</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1659</td></tr>
+<td>1658</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1660</td></tr>
+<td>1659</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1661</td></tr>
+<td>1660</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1662</td></tr>
+<td>1661</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1664</td></tr>
+<td>1663</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>1684</td></tr>
+<td>1683</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'for' has incorrect indentation level 6, expected level should be 4.</td>
-<td>1685</td></tr>
+<td>1684</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'for' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>1686</td></tr>
+<td>1685</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'for' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>1689</td></tr>
+<td>1688</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'for rcurly' has incorrect indentation level 6, expected level should be 4.</td>
-<td>1690</td></tr>
+<td>1689</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' has incorrect indentation level 6, expected level should be 4.</td>
-<td>1691</td></tr>
+<td>1690</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>1692</td></tr>
+<td>1691</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if rcurly' has incorrect indentation level 6, expected level should be 4.</td>
-<td>1693</td></tr>
+<td>1692</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>1694</td></tr>
+<td>1693</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>1697</td></tr>
+<td>1696</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>1698</td></tr>
+<td>1697</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def rcurly' has incorrect indentation level 4, expected level should be 2.</td>
-<td>1699</td></tr>
+<td>1698</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1703</td></tr>
+<td>1702</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1704</td></tr>
+<td>1703</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1705</td></tr>
+<td>1704</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1707</td></tr>
+<td>1706</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1711</td></tr>
+<td>1710</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1729</td></tr>
+<td>1728</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1730</td></tr>
+<td>1729</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1731</td></tr>
+<td>1730</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1733</td></tr>
+<td>1732</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1749</td></tr>
+<td>1748</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1750</td></tr>
+<td>1749</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1752</td></tr>
+<td>1751</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1766</td></tr>
+<td>1765</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1767</td></tr>
+<td>1766</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>1768</td></tr>
+<td>1767</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>annotation</td>
<td>MissingDeprecated</td>
<td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>1838</td></tr>
+<td>1837</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>annotation</td>
<td>MissingDeprecated</td>
<td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>1850</td></tr>
+<td>1849</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1903</td></tr>
+<td>1902</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1907</td></tr>
+<td>1906</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1926</td></tr>
+<td>1925</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1934</td></tr>
+<td>1933</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1935</td></tr>
+<td>1934</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1936</td></tr>
+<td>1935</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1937</td></tr>
+<td>1936</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1938</td></tr>
+<td>1937</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1939</td></tr>
+<td>1938</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1940</td></tr>
+<td>1939</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1941</td></tr>
+<td>1940</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1957</td></tr>
+<td>1956</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1958</td></tr>
+<td>1957</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1959</td></tr>
+<td>1958</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1960</td></tr>
+<td>1959</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1961</td></tr>
+<td>1960</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1964</td></tr>
+<td>1963</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2006</td></tr>
+<td>2005</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2056</td></tr>
+<td>2055</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2067</td></tr>
+<td>2066</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2078</td></tr>
+<td>2077</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2090</td></tr>
+<td>2089</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2102</td></tr>
+<td>2101</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2186</td></tr>
+<td>2185</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2189</td></tr>
+<td>2188</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>2290</td></tr>
+<td>2289</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2434</td></tr>
+<td>2433</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2435</td></tr>
+<td>2434</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2436</td></tr>
+<td>2435</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2438</td></tr>
+<td>2437</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2452</td></tr>
+<td>2451</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2453</td></tr>
+<td>2452</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2454</td></tr>
+<td>2453</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2456</td></tr>
+<td>2455</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2460</td></tr>
+<td>2459</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2596</td></tr>
+<td>2595</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2597</td></tr>
+<td>2596</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2806</td></tr>
+<td>2805</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>2844</td></tr>
+<td>2843</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2875</td></tr>
+<td>2874</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2877</td></tr>
+<td>2876</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2878</td></tr>
+<td>2877</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2879</td></tr>
+<td>2878</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'while' child has incorrect indentation level 7, expected level should be 6.</td>
-<td>2890</td></tr>
+<td>2889</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2931</td></tr>
+<td>2930</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2952</td></tr>
+<td>2951</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3012</td></tr>
+<td>3011</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>3044</td></tr>
+<td>3043</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>3071</td></tr>
+<td>3070</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3092</td></tr>
+<td>3091</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3093</td></tr>
+<td>3092</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3109</td></tr>
+<td>3108</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3110</td></tr>
+<td>3109</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3113</td></tr>
+<td>3112</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>3164</td></tr>
+<td>3163</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>3167</td></tr>
+<td>3166</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3184</td></tr>
+<td>3183</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3185</td></tr>
+<td>3184</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3186</td></tr>
+<td>3185</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3199</td></tr>
+<td>3198</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3200</td></tr>
+<td>3199</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3203</td></tr>
+<td>3202</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3208</td></tr>
+<td>3207</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3216</td></tr>
+<td>3215</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3217</td></tr>
+<td>3216</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3233</td></tr>
+<td>3232</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3234</td></tr>
+<td>3233</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3246</td></tr>
+<td>3245</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3267</td></tr>
+<td>3266</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3299</td></tr>
+<td>3298</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3303</td></tr>
+<td>3302</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3355</td></tr>
+<td>3354</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3356</td></tr>
+<td>3355</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3357</td></tr>
+<td>3356</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3358</td></tr>
+<td>3357</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3359</td></tr>
+<td>3358</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3399</td></tr>
+<td>3398</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3400</td></tr>
+<td>3399</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3426</td></tr>
+<td>3425</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3435</td></tr>
+<td>3434</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3449</td></tr>
+<td>3448</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>coding</td>
<td>InnerAssignment</td>
<td>Inner assignments should be avoided.</td>
-<td>3469</td></tr>
+<td>3468</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 104).</td>
-<td>3500</td></tr>
+<td>3499</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3559</td></tr>
+<td>3558</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3560</td></tr>
+<td>3559</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def rparen' has incorrect indentation level 48, expected level should be 2.</td>
-<td>3580</td></tr>
+<td>3579</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>EmptyBlock</td>
<td>Must have at least one statement.</td>
-<td>3598</td></tr>
+<td>3597</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 101).</td>
-<td>3889</td></tr>
+<td>3888</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>3976</td></tr>
+<td>3975</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>3978</td></tr>
+<td>3977</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>4012</td></tr>
+<td>4011</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>4049</td></tr>
+<td>4048</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>4051</td></tr>
+<td>4050</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>4129</td></tr>
+<td>4128</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>4137</td></tr>
+<td>4136</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>4145</td></tr>
+<td>4144</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>4146</td></tr></table></div>
+<td>4145</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.HColumnDescriptor.java">org/apache/hadoop/hbase/HColumnDescriptor.java</h3>
<table border="0" class="table table-striped">
@@ -28747,85 +28747,85 @@
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 102).</td>
-<td>134</td></tr>
+<td>137</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>176</td></tr>
+<td>179</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>196</td></tr>
+<td>199</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>220</td></tr>
+<td>223</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>237</td></tr>
+<td>240</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>266</td></tr>
+<td>269</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>277</td></tr>
+<td>280</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>289</td></tr>
+<td>292</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'try' child has incorrect indentation level 4, expected level should be 6.</td>
-<td>296</td></tr>
+<td>299</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'finally' child has incorrect indentation level 7, expected level should be 6.</td>
-<td>298</td></tr>
+<td>301</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>304</td></tr>
+<td>307</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>422</td></tr>
+<td>425</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def rcurly' has incorrect indentation level 1, expected level should be 2.</td>
-<td>444</td></tr>
+<td>447</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>528</td></tr></table></div>
+<td>531</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.client.TestAppendFromClientSide.java">org/apache/hadoop/hbase/client/TestAppendFromClientSide.java</h3>
<table border="0" class="table table-striped">
@@ -71367,50 +71367,50 @@
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>MethodLength</td>
-<td>Method length is 154 lines (max allowed is 150).</td>
+<td>Method length is 152 lines (max allowed is 150).</td>
<td>505</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>857</td></tr>
+<td>855</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>858</td></tr>
+<td>856</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>877</td></tr>
+<td>875</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>886</td></tr>
+<td>884</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>908</td></tr>
+<td>906</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>911</td></tr>
+<td>909</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>1453</td></tr></table></div>
+<td>1451</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.ProcedureScheduler.java">org/apache/hadoop/hbase/procedure2/ProcedureScheduler.java</h3>
<table border="0" class="table table-striped">
@@ -77815,235 +77815,235 @@
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>389</td></tr>
+<td>396</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>annotation</td>
<td>MissingDeprecated</td>
<td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>512</td></tr>
+<td>519</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>annotation</td>
<td>MissingDeprecated</td>
<td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>524</td></tr>
+<td>531</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>548</td></tr>
+<td>555</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 113).</td>
-<td>563</td></tr>
+<td>570</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>587</td></tr>
+<td>590</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>589</td></tr>
+<td>592</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>623</td></tr>
+<td>626</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>638</td></tr>
+<td>641</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>644</td></tr>
+<td>647</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>645</td></tr>
+<td>648</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>646</td></tr>
+<td>649</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>841</td></tr>
+<td>844</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method call' child has incorrect indentation level 9, expected level should be 10.</td>
-<td>842</td></tr>
+<td>845</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method call' child has incorrect indentation level 9, expected level should be 10.</td>
-<td>843</td></tr>
+<td>846</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>846</td></tr>
+<td>849</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>854</td></tr>
+<td>857</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>966</td></tr>
+<td>969</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>972</td></tr>
+<td>975</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1000</td></tr>
+<td>1003</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1001</td></tr>
+<td>1004</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1002</td></tr>
+<td>1005</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1054</td></tr>
+<td>1057</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1055</td></tr>
+<td>1058</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1057</td></tr>
+<td>1060</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1080</td></tr>
+<td>1083</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1149</td></tr>
+<td>1152</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1150</td></tr>
+<td>1153</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1182</td></tr>
+<td>1185</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1377</td></tr>
+<td>1380</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 101).</td>
-<td>1445</td></tr>
+<td>1448</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 114).</td>
-<td>1484</td></tr>
+<td>1487</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1588</td></tr>
+<td>1591</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>1852</td></tr>
+<td>1845</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2064</td></tr>
+<td>2057</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2257</td></tr>
+<td>2250</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2371</td></tr>
+<td>2364</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2403</td></tr>
+<td>2396</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 102).</td>
-<td>2688</td></tr></table></div>
+<td>2681</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.regionserver.HStoreFile.java">org/apache/hadoop/hbase/regionserver/HStoreFile.java</h3>
<table border="0" class="table table-striped">
@@ -117413,7 +117413,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 41794d0..cbe6bb9 100644
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Code of Conduct Policy
@@ -385,7 +385,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 62beecd..60010d7 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Dependencies</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -450,7 +450,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index f34d2b1..3a4e1db 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Reactor Dependency Convergence</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -889,7 +889,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index ae67e13..2376bdc 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Dependency Information</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -323,7 +323,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index f9a5baf..5d62f6c 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20181021" />
+ <meta name="Date-Revision-yyyymmdd" content="20181022" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Dependency Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -1015,7 +1015,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-10-21</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-10-22</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index aa4bbf8..72b8c7f 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3824,7 +3824,7 @@
<!-- -->
</a><code>public static final <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><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Sun Oct 21 14:43:28 UTC 2018"</code></td>
+<td class="colLast"><code>"Mon Oct 22 14:44:49 UTC 2018"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
@@ -3838,7 +3838,7 @@
<!-- -->
</a><code>public static final <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><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"f5f881f57d789d4aabea2eec95e064ba"</code></td>
+<td class="colLast"><code>"71b52165b80cc27916da6d7d4fb1ab20"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
[14/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
index 5b9d987..b595018 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
@@ -310,2495 +310,2488 @@
<span class="sourceLineNo">302</span> }<a name="line.302"></a>
<span class="sourceLineNo">303</span><a name="line.303"></a>
<span class="sourceLineNo">304</span> this.storeEngine = createStoreEngine(this, this.conf, this.comparator);<a name="line.304"></a>
-<span class="sourceLineNo">305</span> this.storeEngine.getStoreFileManager().loadFiles(loadStoreFiles());<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Initialize checksum type from name. The names are CRC32, CRC32C, etc.<a name="line.307"></a>
-<span class="sourceLineNo">308</span> this.checksumType = getChecksumType(conf);<a name="line.308"></a>
-<span class="sourceLineNo">309</span> // Initialize bytes per checksum<a name="line.309"></a>
-<span class="sourceLineNo">310</span> this.bytesPerChecksum = getBytesPerChecksum(conf);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> flushRetriesNumber = conf.getInt(<a name="line.311"></a>
-<span class="sourceLineNo">312</span> "hbase.hstore.flush.retries.number", DEFAULT_FLUSH_RETRIES_NUMBER);<a name="line.312"></a>
-<span class="sourceLineNo">313</span> pauseTime = conf.getInt(HConstants.HBASE_SERVER_PAUSE, HConstants.DEFAULT_HBASE_SERVER_PAUSE);<a name="line.313"></a>
-<span class="sourceLineNo">314</span> if (flushRetriesNumber <= 0) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> throw new IllegalArgumentException(<a name="line.315"></a>
-<span class="sourceLineNo">316</span> "hbase.hstore.flush.retries.number must be > 0, not "<a name="line.316"></a>
-<span class="sourceLineNo">317</span> + flushRetriesNumber);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> }<a name="line.318"></a>
-<span class="sourceLineNo">319</span> cryptoContext = EncryptionUtil.createEncryptionContext(conf, family);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> int confPrintThreshold =<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.conf.getInt("hbase.region.store.parallel.put.print.threshold", 50);<a name="line.322"></a>
-<span class="sourceLineNo">323</span> if (confPrintThreshold < 10) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> confPrintThreshold = 10;<a name="line.324"></a>
+<span class="sourceLineNo">305</span> List<HStoreFile> hStoreFiles = loadStoreFiles();<a name="line.305"></a>
+<span class="sourceLineNo">306</span> // Move the storeSize calculation out of loadStoreFiles() method, because the secondary read<a name="line.306"></a>
+<span class="sourceLineNo">307</span> // replica's refreshStoreFiles() will also use loadStoreFiles() to refresh its store files and<a name="line.307"></a>
+<span class="sourceLineNo">308</span> // update the storeSize in the completeCompaction(..) finally (just like compaction) , so<a name="line.308"></a>
+<span class="sourceLineNo">309</span> // no need calculate the storeSize twice.<a name="line.309"></a>
+<span class="sourceLineNo">310</span> this.storeSize.addAndGet(getStorefilesSize(hStoreFiles, sf -> true));<a name="line.310"></a>
+<span class="sourceLineNo">311</span> this.totalUncompressedBytes.addAndGet(getTotalUmcompressedBytes(hStoreFiles));<a name="line.311"></a>
+<span class="sourceLineNo">312</span> this.storeEngine.getStoreFileManager().loadFiles(hStoreFiles);<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> // Initialize checksum type from name. The names are CRC32, CRC32C, etc.<a name="line.314"></a>
+<span class="sourceLineNo">315</span> this.checksumType = getChecksumType(conf);<a name="line.315"></a>
+<span class="sourceLineNo">316</span> // Initialize bytes per checksum<a name="line.316"></a>
+<span class="sourceLineNo">317</span> this.bytesPerChecksum = getBytesPerChecksum(conf);<a name="line.317"></a>
+<span class="sourceLineNo">318</span> flushRetriesNumber = conf.getInt(<a name="line.318"></a>
+<span class="sourceLineNo">319</span> "hbase.hstore.flush.retries.number", DEFAULT_FLUSH_RETRIES_NUMBER);<a name="line.319"></a>
+<span class="sourceLineNo">320</span> pauseTime = conf.getInt(HConstants.HBASE_SERVER_PAUSE, HConstants.DEFAULT_HBASE_SERVER_PAUSE);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> if (flushRetriesNumber <= 0) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span> throw new IllegalArgumentException(<a name="line.322"></a>
+<span class="sourceLineNo">323</span> "hbase.hstore.flush.retries.number must be > 0, not "<a name="line.323"></a>
+<span class="sourceLineNo">324</span> + flushRetriesNumber);<a name="line.324"></a>
<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> this.parallelPutCountPrintThreshold = confPrintThreshold;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> LOG.info("Store={}, memstore type={}, storagePolicy={}, verifyBulkLoads={}, "<a name="line.327"></a>
-<span class="sourceLineNo">328</span> + "parallelPutCountPrintThreshold={}, encoding={}, compression={}",<a name="line.328"></a>
-<span class="sourceLineNo">329</span> getColumnFamilyName(), memstore.getClass().getSimpleName(), policyName, verifyBulkLoads,<a name="line.329"></a>
-<span class="sourceLineNo">330</span> parallelPutCountPrintThreshold, family.getDataBlockEncoding(),<a name="line.330"></a>
-<span class="sourceLineNo">331</span> family.getCompressionType());<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span> /**<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @return MemStore Instance to use in this store.<a name="line.335"></a>
-<span class="sourceLineNo">336</span> */<a name="line.336"></a>
-<span class="sourceLineNo">337</span> private MemStore getMemstore() {<a name="line.337"></a>
-<span class="sourceLineNo">338</span> MemStore ms = null;<a name="line.338"></a>
-<span class="sourceLineNo">339</span> // Check if in-memory-compaction configured. Note MemoryCompactionPolicy is an enum!<a name="line.339"></a>
-<span class="sourceLineNo">340</span> MemoryCompactionPolicy inMemoryCompaction = null;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> if (this.getTableName().isSystemTable()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span> inMemoryCompaction = MemoryCompactionPolicy.valueOf(<a name="line.342"></a>
-<span class="sourceLineNo">343</span> conf.get("hbase.systemtables.compacting.memstore.type", "NONE"));<a name="line.343"></a>
-<span class="sourceLineNo">344</span> } else {<a name="line.344"></a>
-<span class="sourceLineNo">345</span> inMemoryCompaction = family.getInMemoryCompaction();<a name="line.345"></a>
-<span class="sourceLineNo">346</span> }<a name="line.346"></a>
-<span class="sourceLineNo">347</span> if (inMemoryCompaction == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> inMemoryCompaction =<a name="line.348"></a>
-<span class="sourceLineNo">349</span> MemoryCompactionPolicy.valueOf(conf.get(CompactingMemStore.COMPACTING_MEMSTORE_TYPE_KEY,<a name="line.349"></a>
-<span class="sourceLineNo">350</span> CompactingMemStore.COMPACTING_MEMSTORE_TYPE_DEFAULT).toUpperCase());<a name="line.350"></a>
-<span class="sourceLineNo">351</span> }<a name="line.351"></a>
-<span class="sourceLineNo">352</span> switch (inMemoryCompaction) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> case NONE:<a name="line.353"></a>
-<span class="sourceLineNo">354</span> ms = ReflectionUtils.newInstance(DefaultMemStore.class,<a name="line.354"></a>
-<span class="sourceLineNo">355</span> new Object[] { conf, this.comparator,<a name="line.355"></a>
-<span class="sourceLineNo">356</span> this.getHRegion().getRegionServicesForStores()});<a name="line.356"></a>
-<span class="sourceLineNo">357</span> break;<a name="line.357"></a>
-<span class="sourceLineNo">358</span> default:<a name="line.358"></a>
-<span class="sourceLineNo">359</span> Class<? extends CompactingMemStore> clz = conf.getClass(MEMSTORE_CLASS_NAME,<a name="line.359"></a>
-<span class="sourceLineNo">360</span> CompactingMemStore.class, CompactingMemStore.class);<a name="line.360"></a>
-<span class="sourceLineNo">361</span> ms = ReflectionUtils.newInstance(clz, new Object[]{conf, this.comparator, this,<a name="line.361"></a>
-<span class="sourceLineNo">362</span> this.getHRegion().getRegionServicesForStores(), inMemoryCompaction});<a name="line.362"></a>
-<span class="sourceLineNo">363</span> }<a name="line.363"></a>
-<span class="sourceLineNo">364</span> return ms;<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span> * Creates the cache config.<a name="line.368"></a>
-<span class="sourceLineNo">369</span> * @param family The current column family.<a name="line.369"></a>
-<span class="sourceLineNo">370</span> */<a name="line.370"></a>
-<span class="sourceLineNo">371</span> protected void createCacheConf(final ColumnFamilyDescriptor family) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> this.cacheConf = new CacheConfig(conf, family);<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span> /**<a name="line.375"></a>
-<span class="sourceLineNo">376</span> * Creates the store engine configured for the given Store.<a name="line.376"></a>
-<span class="sourceLineNo">377</span> * @param store The store. An unfortunate dependency needed due to it<a name="line.377"></a>
-<span class="sourceLineNo">378</span> * being passed to coprocessors via the compactor.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> * @param conf Store configuration.<a name="line.379"></a>
-<span class="sourceLineNo">380</span> * @param kvComparator KVComparator for storeFileManager.<a name="line.380"></a>
-<span class="sourceLineNo">381</span> * @return StoreEngine to use.<a name="line.381"></a>
-<span class="sourceLineNo">382</span> */<a name="line.382"></a>
-<span class="sourceLineNo">383</span> protected StoreEngine<?, ?, ?, ?> createStoreEngine(HStore store, Configuration conf,<a name="line.383"></a>
-<span class="sourceLineNo">384</span> CellComparator kvComparator) throws IOException {<a name="line.384"></a>
-<span class="sourceLineNo">385</span> return StoreEngine.create(store, conf, comparator);<a name="line.385"></a>
-<span class="sourceLineNo">386</span> }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span> /**<a name="line.388"></a>
-<span class="sourceLineNo">389</span> * @param family<a name="line.389"></a>
-<span class="sourceLineNo">390</span> * @return TTL in seconds of the specified family<a name="line.390"></a>
-<span class="sourceLineNo">391</span> */<a name="line.391"></a>
-<span class="sourceLineNo">392</span> public static long determineTTLFromFamily(final ColumnFamilyDescriptor family) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span> // HCD.getTimeToLive returns ttl in seconds. Convert to milliseconds.<a name="line.393"></a>
-<span class="sourceLineNo">394</span> long ttl = family.getTimeToLive();<a name="line.394"></a>
-<span class="sourceLineNo">395</span> if (ttl == HConstants.FOREVER) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span> // Default is unlimited ttl.<a name="line.396"></a>
-<span class="sourceLineNo">397</span> ttl = Long.MAX_VALUE;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } else if (ttl == -1) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> ttl = Long.MAX_VALUE;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> } else {<a name="line.400"></a>
-<span class="sourceLineNo">401</span> // Second -> ms adjust for user data<a name="line.401"></a>
-<span class="sourceLineNo">402</span> ttl *= 1000;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return ttl;<a name="line.404"></a>
-<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span> @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span> public String getColumnFamilyName() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> return this.family.getNameAsString();<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public TableName getTableName() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return this.getRegionInfo().getTable();<a name="line.414"></a>
-<span class="sourceLineNo">415</span> }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span> @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span> public FileSystem getFileSystem() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span> return this.fs.getFileSystem();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span> public HRegionFileSystem getRegionFileSystem() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span> return this.fs;<a name="line.423"></a>
-<span class="sourceLineNo">424</span> }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span> /* Implementation of StoreConfigInformation */<a name="line.426"></a>
-<span class="sourceLineNo">427</span> @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span> public long getStoreFileTtl() {<a name="line.428"></a>
-<span class="sourceLineNo">429</span> // TTL only applies if there's no MIN_VERSIONs setting on the column.<a name="line.429"></a>
-<span class="sourceLineNo">430</span> return (this.scanInfo.getMinVersions() == 0) ? this.scanInfo.getTtl() : Long.MAX_VALUE;<a name="line.430"></a>
+<span class="sourceLineNo">326</span> cryptoContext = EncryptionUtil.createEncryptionContext(conf, family);<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span> int confPrintThreshold =<a name="line.328"></a>
+<span class="sourceLineNo">329</span> this.conf.getInt("hbase.region.store.parallel.put.print.threshold", 50);<a name="line.329"></a>
+<span class="sourceLineNo">330</span> if (confPrintThreshold < 10) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> confPrintThreshold = 10;<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span> this.parallelPutCountPrintThreshold = confPrintThreshold;<a name="line.333"></a>
+<span class="sourceLineNo">334</span> LOG.info("Store={}, memstore type={}, storagePolicy={}, verifyBulkLoads={}, "<a name="line.334"></a>
+<span class="sourceLineNo">335</span> + "parallelPutCountPrintThreshold={}, encoding={}, compression={}",<a name="line.335"></a>
+<span class="sourceLineNo">336</span> getColumnFamilyName(), memstore.getClass().getSimpleName(), policyName, verifyBulkLoads,<a name="line.336"></a>
+<span class="sourceLineNo">337</span> parallelPutCountPrintThreshold, family.getDataBlockEncoding(),<a name="line.337"></a>
+<span class="sourceLineNo">338</span> family.getCompressionType());<a name="line.338"></a>
+<span class="sourceLineNo">339</span> }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * @return MemStore Instance to use in this store.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> */<a name="line.343"></a>
+<span class="sourceLineNo">344</span> private MemStore getMemstore() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> MemStore ms = null;<a name="line.345"></a>
+<span class="sourceLineNo">346</span> // Check if in-memory-compaction configured. Note MemoryCompactionPolicy is an enum!<a name="line.346"></a>
+<span class="sourceLineNo">347</span> MemoryCompactionPolicy inMemoryCompaction = null;<a name="line.347"></a>
+<span class="sourceLineNo">348</span> if (this.getTableName().isSystemTable()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> inMemoryCompaction = MemoryCompactionPolicy.valueOf(<a name="line.349"></a>
+<span class="sourceLineNo">350</span> conf.get("hbase.systemtables.compacting.memstore.type", "NONE"));<a name="line.350"></a>
+<span class="sourceLineNo">351</span> } else {<a name="line.351"></a>
+<span class="sourceLineNo">352</span> inMemoryCompaction = family.getInMemoryCompaction();<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span> if (inMemoryCompaction == null) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span> inMemoryCompaction =<a name="line.355"></a>
+<span class="sourceLineNo">356</span> MemoryCompactionPolicy.valueOf(conf.get(CompactingMemStore.COMPACTING_MEMSTORE_TYPE_KEY,<a name="line.356"></a>
+<span class="sourceLineNo">357</span> CompactingMemStore.COMPACTING_MEMSTORE_TYPE_DEFAULT).toUpperCase());<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> switch (inMemoryCompaction) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span> case NONE:<a name="line.360"></a>
+<span class="sourceLineNo">361</span> ms = ReflectionUtils.newInstance(DefaultMemStore.class,<a name="line.361"></a>
+<span class="sourceLineNo">362</span> new Object[] { conf, this.comparator,<a name="line.362"></a>
+<span class="sourceLineNo">363</span> this.getHRegion().getRegionServicesForStores()});<a name="line.363"></a>
+<span class="sourceLineNo">364</span> break;<a name="line.364"></a>
+<span class="sourceLineNo">365</span> default:<a name="line.365"></a>
+<span class="sourceLineNo">366</span> Class<? extends CompactingMemStore> clz = conf.getClass(MEMSTORE_CLASS_NAME,<a name="line.366"></a>
+<span class="sourceLineNo">367</span> CompactingMemStore.class, CompactingMemStore.class);<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ms = ReflectionUtils.newInstance(clz, new Object[]{conf, this.comparator, this,<a name="line.368"></a>
+<span class="sourceLineNo">369</span> this.getHRegion().getRegionServicesForStores(), inMemoryCompaction});<a name="line.369"></a>
+<span class="sourceLineNo">370</span> }<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return ms;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> /**<a name="line.374"></a>
+<span class="sourceLineNo">375</span> * Creates the cache config.<a name="line.375"></a>
+<span class="sourceLineNo">376</span> * @param family The current column family.<a name="line.376"></a>
+<span class="sourceLineNo">377</span> */<a name="line.377"></a>
+<span class="sourceLineNo">378</span> protected void createCacheConf(final ColumnFamilyDescriptor family) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> this.cacheConf = new CacheConfig(conf, family);<a name="line.379"></a>
+<span class="sourceLineNo">380</span> }<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span> /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span> * Creates the store engine configured for the given Store.<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * @param store The store. An unfortunate dependency needed due to it<a name="line.384"></a>
+<span class="sourceLineNo">385</span> * being passed to coprocessors via the compactor.<a name="line.385"></a>
+<span class="sourceLineNo">386</span> * @param conf Store configuration.<a name="line.386"></a>
+<span class="sourceLineNo">387</span> * @param kvComparator KVComparator for storeFileManager.<a name="line.387"></a>
+<span class="sourceLineNo">388</span> * @return StoreEngine to use.<a name="line.388"></a>
+<span class="sourceLineNo">389</span> */<a name="line.389"></a>
+<span class="sourceLineNo">390</span> protected StoreEngine<?, ?, ?, ?> createStoreEngine(HStore store, Configuration conf,<a name="line.390"></a>
+<span class="sourceLineNo">391</span> CellComparator kvComparator) throws IOException {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> return StoreEngine.create(store, conf, comparator);<a name="line.392"></a>
+<span class="sourceLineNo">393</span> }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span> /**<a name="line.395"></a>
+<span class="sourceLineNo">396</span> * @param family<a name="line.396"></a>
+<span class="sourceLineNo">397</span> * @return TTL in seconds of the specified family<a name="line.397"></a>
+<span class="sourceLineNo">398</span> */<a name="line.398"></a>
+<span class="sourceLineNo">399</span> public static long determineTTLFromFamily(final ColumnFamilyDescriptor family) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span> // HCD.getTimeToLive returns ttl in seconds. Convert to milliseconds.<a name="line.400"></a>
+<span class="sourceLineNo">401</span> long ttl = family.getTimeToLive();<a name="line.401"></a>
+<span class="sourceLineNo">402</span> if (ttl == HConstants.FOREVER) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span> // Default is unlimited ttl.<a name="line.403"></a>
+<span class="sourceLineNo">404</span> ttl = Long.MAX_VALUE;<a name="line.404"></a>
+<span class="sourceLineNo">405</span> } else if (ttl == -1) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span> ttl = Long.MAX_VALUE;<a name="line.406"></a>
+<span class="sourceLineNo">407</span> } else {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> // Second -> ms adjust for user data<a name="line.408"></a>
+<span class="sourceLineNo">409</span> ttl *= 1000;<a name="line.409"></a>
+<span class="sourceLineNo">410</span> }<a name="line.410"></a>
+<span class="sourceLineNo">411</span> return ttl;<a name="line.411"></a>
+<span class="sourceLineNo">412</span> }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span> @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span> public String getColumnFamilyName() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span> return this.family.getNameAsString();<a name="line.416"></a>
+<span class="sourceLineNo">417</span> }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span> @Override<a name="line.419"></a>
+<span class="sourceLineNo">420</span> public TableName getTableName() {<a name="line.420"></a>
+<span class="sourceLineNo">421</span> return this.getRegionInfo().getTable();<a name="line.421"></a>
+<span class="sourceLineNo">422</span> }<a name="line.422"></a>
+<span class="sourceLineNo">423</span><a name="line.423"></a>
+<span class="sourceLineNo">424</span> @Override<a name="line.424"></a>
+<span class="sourceLineNo">425</span> public FileSystem getFileSystem() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span> return this.fs.getFileSystem();<a name="line.426"></a>
+<span class="sourceLineNo">427</span> }<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span> public HRegionFileSystem getRegionFileSystem() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> return this.fs;<a name="line.430"></a>
<span class="sourceLineNo">431</span> }<a name="line.431"></a>
<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span> public long getMemStoreFlushSize() {<a name="line.434"></a>
-<span class="sourceLineNo">435</span> // TODO: Why is this in here? The flushsize of the region rather than the store? St.Ack<a name="line.435"></a>
-<span class="sourceLineNo">436</span> return this.region.memstoreFlushSize;<a name="line.436"></a>
-<span class="sourceLineNo">437</span> }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span> @Override<a name="line.439"></a>
-<span class="sourceLineNo">440</span> public MemStoreSize getFlushableSize() {<a name="line.440"></a>
-<span class="sourceLineNo">441</span> return this.memstore.getFlushableSize();<a name="line.441"></a>
-<span class="sourceLineNo">442</span> }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span> @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span> public MemStoreSize getSnapshotSize() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> return this.memstore.getSnapshotSize();<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span> public long getCompactionCheckMultiplier() {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> return this.compactionCheckMultiplier;<a name="line.451"></a>
-<span class="sourceLineNo">452</span> }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span> @Override<a name="line.454"></a>
-<span class="sourceLineNo">455</span> public long getBlockingFileCount() {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> return blockingFileCount;<a name="line.456"></a>
-<span class="sourceLineNo">457</span> }<a name="line.457"></a>
-<span class="sourceLineNo">458</span> /* End implementation of StoreConfigInformation */<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> /**<a name="line.460"></a>
-<span class="sourceLineNo">461</span> * Returns the configured bytesPerChecksum value.<a name="line.461"></a>
-<span class="sourceLineNo">462</span> * @param conf The configuration<a name="line.462"></a>
-<span class="sourceLineNo">463</span> * @return The bytesPerChecksum that is set in the configuration<a name="line.463"></a>
-<span class="sourceLineNo">464</span> */<a name="line.464"></a>
-<span class="sourceLineNo">465</span> public static int getBytesPerChecksum(Configuration conf) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> return conf.getInt(HConstants.BYTES_PER_CHECKSUM,<a name="line.466"></a>
-<span class="sourceLineNo">467</span> HFile.DEFAULT_BYTES_PER_CHECKSUM);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span> /**<a name="line.470"></a>
-<span class="sourceLineNo">471</span> * Returns the configured checksum algorithm.<a name="line.471"></a>
-<span class="sourceLineNo">472</span> * @param conf The configuration<a name="line.472"></a>
-<span class="sourceLineNo">473</span> * @return The checksum algorithm that is set in the configuration<a name="line.473"></a>
-<span class="sourceLineNo">474</span> */<a name="line.474"></a>
-<span class="sourceLineNo">475</span> public static ChecksumType getChecksumType(Configuration conf) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span> String checksumName = conf.get(HConstants.CHECKSUM_TYPE_NAME);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> if (checksumName == null) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span> return ChecksumType.getDefaultChecksumType();<a name="line.478"></a>
-<span class="sourceLineNo">479</span> } else {<a name="line.479"></a>
-<span class="sourceLineNo">480</span> return ChecksumType.nameToType(checksumName);<a name="line.480"></a>
-<span class="sourceLineNo">481</span> }<a name="line.481"></a>
-<span class="sourceLineNo">482</span> }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span> /**<a name="line.484"></a>
-<span class="sourceLineNo">485</span> * @return how many bytes to write between status checks<a name="line.485"></a>
-<span class="sourceLineNo">486</span> */<a name="line.486"></a>
-<span class="sourceLineNo">487</span> public static int getCloseCheckInterval() {<a name="line.487"></a>
-<span class="sourceLineNo">488</span> return closeCheckInterval;<a name="line.488"></a>
+<span class="sourceLineNo">433</span> /* Implementation of StoreConfigInformation */<a name="line.433"></a>
+<span class="sourceLineNo">434</span> @Override<a name="line.434"></a>
+<span class="sourceLineNo">435</span> public long getStoreFileTtl() {<a name="line.435"></a>
+<span class="sourceLineNo">436</span> // TTL only applies if there's no MIN_VERSIONs setting on the column.<a name="line.436"></a>
+<span class="sourceLineNo">437</span> return (this.scanInfo.getMinVersions() == 0) ? this.scanInfo.getTtl() : Long.MAX_VALUE;<a name="line.437"></a>
+<span class="sourceLineNo">438</span> }<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span> @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span> public long getMemStoreFlushSize() {<a name="line.441"></a>
+<span class="sourceLineNo">442</span> // TODO: Why is this in here? The flushsize of the region rather than the store? St.Ack<a name="line.442"></a>
+<span class="sourceLineNo">443</span> return this.region.memstoreFlushSize;<a name="line.443"></a>
+<span class="sourceLineNo">444</span> }<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span> @Override<a name="line.446"></a>
+<span class="sourceLineNo">447</span> public MemStoreSize getFlushableSize() {<a name="line.447"></a>
+<span class="sourceLineNo">448</span> return this.memstore.getFlushableSize();<a name="line.448"></a>
+<span class="sourceLineNo">449</span> }<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span> @Override<a name="line.451"></a>
+<span class="sourceLineNo">452</span> public MemStoreSize getSnapshotSize() {<a name="line.452"></a>
+<span class="sourceLineNo">453</span> return this.memstore.getSnapshotSize();<a name="line.453"></a>
+<span class="sourceLineNo">454</span> }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span> @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span> public long getCompactionCheckMultiplier() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span> return this.compactionCheckMultiplier;<a name="line.458"></a>
+<span class="sourceLineNo">459</span> }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span> @Override<a name="line.461"></a>
+<span class="sourceLineNo">462</span> public long getBlockingFileCount() {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> return blockingFileCount;<a name="line.463"></a>
+<span class="sourceLineNo">464</span> }<a name="line.464"></a>
+<span class="sourceLineNo">465</span> /* End implementation of StoreConfigInformation */<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span> /**<a name="line.467"></a>
+<span class="sourceLineNo">468</span> * Returns the configured bytesPerChecksum value.<a name="line.468"></a>
+<span class="sourceLineNo">469</span> * @param conf The configuration<a name="line.469"></a>
+<span class="sourceLineNo">470</span> * @return The bytesPerChecksum that is set in the configuration<a name="line.470"></a>
+<span class="sourceLineNo">471</span> */<a name="line.471"></a>
+<span class="sourceLineNo">472</span> public static int getBytesPerChecksum(Configuration conf) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span> return conf.getInt(HConstants.BYTES_PER_CHECKSUM,<a name="line.473"></a>
+<span class="sourceLineNo">474</span> HFile.DEFAULT_BYTES_PER_CHECKSUM);<a name="line.474"></a>
+<span class="sourceLineNo">475</span> }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span> /**<a name="line.477"></a>
+<span class="sourceLineNo">478</span> * Returns the configured checksum algorithm.<a name="line.478"></a>
+<span class="sourceLineNo">479</span> * @param conf The configuration<a name="line.479"></a>
+<span class="sourceLineNo">480</span> * @return The checksum algorithm that is set in the configuration<a name="line.480"></a>
+<span class="sourceLineNo">481</span> */<a name="line.481"></a>
+<span class="sourceLineNo">482</span> public static ChecksumType getChecksumType(Configuration conf) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span> String checksumName = conf.get(HConstants.CHECKSUM_TYPE_NAME);<a name="line.483"></a>
+<span class="sourceLineNo">484</span> if (checksumName == null) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> return ChecksumType.getDefaultChecksumType();<a name="line.485"></a>
+<span class="sourceLineNo">486</span> } else {<a name="line.486"></a>
+<span class="sourceLineNo">487</span> return ChecksumType.nameToType(checksumName);<a name="line.487"></a>
+<span class="sourceLineNo">488</span> }<a name="line.488"></a>
<span class="sourceLineNo">489</span> }<a name="line.489"></a>
<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span> @Override<a name="line.491"></a>
-<span class="sourceLineNo">492</span> public ColumnFamilyDescriptor getColumnFamilyDescriptor() {<a name="line.492"></a>
-<span class="sourceLineNo">493</span> return this.family;<a name="line.493"></a>
-<span class="sourceLineNo">494</span> }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span> @Override<a name="line.496"></a>
-<span class="sourceLineNo">497</span> public OptionalLong getMaxSequenceId() {<a name="line.497"></a>
-<span class="sourceLineNo">498</span> return StoreUtils.getMaxSequenceIdInList(this.getStorefiles());<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> @Override<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public OptionalLong getMaxMemStoreTS() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> return StoreUtils.getMaxMemStoreTSInList(this.getStorefiles());<a name="line.503"></a>
-<span class="sourceLineNo">504</span> }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span> /**<a name="line.506"></a>
-<span class="sourceLineNo">507</span> * @param tabledir {@link Path} to where the table is being stored<a name="line.507"></a>
-<span class="sourceLineNo">508</span> * @param hri {@link RegionInfo} for the region.<a name="line.508"></a>
-<span class="sourceLineNo">509</span> * @param family {@link ColumnFamilyDescriptor} describing the column family<a name="line.509"></a>
-<span class="sourceLineNo">510</span> * @return Path to family/Store home directory.<a name="line.510"></a>
-<span class="sourceLineNo">511</span> */<a name="line.511"></a>
-<span class="sourceLineNo">512</span> @Deprecated<a name="line.512"></a>
-<span class="sourceLineNo">513</span> public static Path getStoreHomedir(final Path tabledir,<a name="line.513"></a>
-<span class="sourceLineNo">514</span> final RegionInfo hri, final byte[] family) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span> return getStoreHomedir(tabledir, hri.getEncodedName(), family);<a name="line.515"></a>
-<span class="sourceLineNo">516</span> }<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span> * @param tabledir {@link Path} to where the table is being stored<a name="line.519"></a>
-<span class="sourceLineNo">520</span> * @param encodedName Encoded region name.<a name="line.520"></a>
-<span class="sourceLineNo">521</span> * @param family {@link ColumnFamilyDescriptor} describing the column family<a name="line.521"></a>
-<span class="sourceLineNo">522</span> * @return Path to family/Store home directory.<a name="line.522"></a>
-<span class="sourceLineNo">523</span> */<a name="line.523"></a>
-<span class="sourceLineNo">524</span> @Deprecated<a name="line.524"></a>
-<span class="sourceLineNo">525</span> public static Path getStoreHomedir(final Path tabledir,<a name="line.525"></a>
-<span class="sourceLineNo">526</span> final String encodedName, final byte[] family) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span> return new Path(tabledir, new Path(encodedName, Bytes.toString(family)));<a name="line.527"></a>
-<span class="sourceLineNo">528</span> }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> /**<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * @return the data block encoder<a name="line.531"></a>
-<span class="sourceLineNo">532</span> */<a name="line.532"></a>
-<span class="sourceLineNo">533</span> public HFileDataBlockEncoder getDataBlockEncoder() {<a name="line.533"></a>
-<span class="sourceLineNo">534</span> return dataBlockEncoder;<a name="line.534"></a>
+<span class="sourceLineNo">491</span> /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span> * @return how many bytes to write between status checks<a name="line.492"></a>
+<span class="sourceLineNo">493</span> */<a name="line.493"></a>
+<span class="sourceLineNo">494</span> public static int getCloseCheckInterval() {<a name="line.494"></a>
+<span class="sourceLineNo">495</span> return closeCheckInterval;<a name="line.495"></a>
+<span class="sourceLineNo">496</span> }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span> @Override<a name="line.498"></a>
+<span class="sourceLineNo">499</span> public ColumnFamilyDescriptor getColumnFamilyDescriptor() {<a name="line.499"></a>
+<span class="sourceLineNo">500</span> return this.family;<a name="line.500"></a>
+<span class="sourceLineNo">501</span> }<a name="line.501"></a>
+<span class="sourceLineNo">502</span><a name="line.502"></a>
+<span class="sourceLineNo">503</span> @Override<a name="line.503"></a>
+<span class="sourceLineNo">504</span> public OptionalLong getMaxSequenceId() {<a name="line.504"></a>
+<span class="sourceLineNo">505</span> return StoreUtils.getMaxSequenceIdInList(this.getStorefiles());<a name="line.505"></a>
+<span class="sourceLineNo">506</span> }<a name="line.506"></a>
+<span class="sourceLineNo">507</span><a name="line.507"></a>
+<span class="sourceLineNo">508</span> @Override<a name="line.508"></a>
+<span class="sourceLineNo">509</span> public OptionalLong getMaxMemStoreTS() {<a name="line.509"></a>
+<span class="sourceLineNo">510</span> return StoreUtils.getMaxMemStoreTSInList(this.getStorefiles());<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span> /**<a name="line.513"></a>
+<span class="sourceLineNo">514</span> * @param tabledir {@link Path} to where the table is being stored<a name="line.514"></a>
+<span class="sourceLineNo">515</span> * @param hri {@link RegionInfo} for the region.<a name="line.515"></a>
+<span class="sourceLineNo">516</span> * @param family {@link ColumnFamilyDescriptor} describing the column family<a name="line.516"></a>
+<span class="sourceLineNo">517</span> * @return Path to family/Store home directory.<a name="line.517"></a>
+<span class="sourceLineNo">518</span> */<a name="line.518"></a>
+<span class="sourceLineNo">519</span> @Deprecated<a name="line.519"></a>
+<span class="sourceLineNo">520</span> public static Path getStoreHomedir(final Path tabledir,<a name="line.520"></a>
+<span class="sourceLineNo">521</span> final RegionInfo hri, final byte[] family) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span> return getStoreHomedir(tabledir, hri.getEncodedName(), family);<a name="line.522"></a>
+<span class="sourceLineNo">523</span> }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span> /**<a name="line.525"></a>
+<span class="sourceLineNo">526</span> * @param tabledir {@link Path} to where the table is being stored<a name="line.526"></a>
+<span class="sourceLineNo">527</span> * @param encodedName Encoded region name.<a name="line.527"></a>
+<span class="sourceLineNo">528</span> * @param family {@link ColumnFamilyDescriptor} describing the column family<a name="line.528"></a>
+<span class="sourceLineNo">529</span> * @return Path to family/Store home directory.<a name="line.529"></a>
+<span class="sourceLineNo">530</span> */<a name="line.530"></a>
+<span class="sourceLineNo">531</span> @Deprecated<a name="line.531"></a>
+<span class="sourceLineNo">532</span> public static Path getStoreHomedir(final Path tabledir,<a name="line.532"></a>
+<span class="sourceLineNo">533</span> final String encodedName, final byte[] family) {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return new Path(tabledir, new Path(encodedName, Bytes.toString(family)));<a name="line.534"></a>
<span class="sourceLineNo">535</span> }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
<span class="sourceLineNo">537</span> /**<a name="line.537"></a>
-<span class="sourceLineNo">538</span> * Should be used only in tests.<a name="line.538"></a>
-<span class="sourceLineNo">539</span> * @param blockEncoder the block delta encoder to use<a name="line.539"></a>
-<span class="sourceLineNo">540</span> */<a name="line.540"></a>
-<span class="sourceLineNo">541</span> void setDataBlockEncoderInTest(HFileDataBlockEncoder blockEncoder) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span> this.dataBlockEncoder = blockEncoder;<a name="line.542"></a>
-<span class="sourceLineNo">543</span> }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span> /**<a name="line.545"></a>
-<span class="sourceLineNo">546</span> * Creates an unsorted list of StoreFile loaded in parallel<a name="line.546"></a>
-<span class="sourceLineNo">547</span> * from the given directory.<a name="line.547"></a>
-<span class="sourceLineNo">548</span> * @throws IOException<a name="line.548"></a>
-<span class="sourceLineNo">549</span> */<a name="line.549"></a>
-<span class="sourceLineNo">550</span> private List<HStoreFile> loadStoreFiles() throws IOException {<a name="line.550"></a>
-<span class="sourceLineNo">551</span> Collection<StoreFileInfo> files = fs.getStoreFiles(getColumnFamilyName());<a name="line.551"></a>
-<span class="sourceLineNo">552</span> return openStoreFiles(files);<a name="line.552"></a>
-<span class="sourceLineNo">553</span> }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span> private List<HStoreFile> openStoreFiles(Collection<StoreFileInfo> files) throws IOException {<a name="line.555"></a>
-<span class="sourceLineNo">556</span> if (CollectionUtils.isEmpty(files)) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span> return Collections.emptyList();<a name="line.557"></a>
-<span class="sourceLineNo">558</span> }<a name="line.558"></a>
-<span class="sourceLineNo">559</span> // initialize the thread pool for opening store files in parallel..<a name="line.559"></a>
-<span class="sourceLineNo">560</span> ThreadPoolExecutor storeFileOpenerThreadPool =<a name="line.560"></a>
-<span class="sourceLineNo">561</span> this.region.getStoreFileOpenAndCloseThreadPool("StoreFileOpenerThread-"<a name="line.561"></a>
-<span class="sourceLineNo">562</span> + this.region.getRegionInfo().getEncodedName() + "-" + this.getColumnFamilyName());<a name="line.562"></a>
-<span class="sourceLineNo">563</span> CompletionService<HStoreFile> completionService = new ExecutorCompletionService<>(storeFileOpenerThreadPool);<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span> int totalValidStoreFile = 0;<a name="line.565"></a>
-<span class="sourceLineNo">566</span> for (StoreFileInfo storeFileInfo : files) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> // open each store file in parallel<a name="line.567"></a>
-<span class="sourceLineNo">568</span> completionService.submit(() -> this.createStoreFileAndReader(storeFileInfo));<a name="line.568"></a>
-<span class="sourceLineNo">569</span> totalValidStoreFile++;<a name="line.569"></a>
-<span class="sourceLineNo">570</span> }<a name="line.570"></a>
+<span class="sourceLineNo">538</span> * @return the data block encoder<a name="line.538"></a>
+<span class="sourceLineNo">539</span> */<a name="line.539"></a>
+<span class="sourceLineNo">540</span> public HFileDataBlockEncoder getDataBlockEncoder() {<a name="line.540"></a>
+<span class="sourceLineNo">541</span> return dataBlockEncoder;<a name="line.541"></a>
+<span class="sourceLineNo">542</span> }<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span> /**<a name="line.544"></a>
+<span class="sourceLineNo">545</span> * Should be used only in tests.<a name="line.545"></a>
+<span class="sourceLineNo">546</span> * @param blockEncoder the block delta encoder to use<a name="line.546"></a>
+<span class="sourceLineNo">547</span> */<a name="line.547"></a>
+<span class="sourceLineNo">548</span> void setDataBlockEncoderInTest(HFileDataBlockEncoder blockEncoder) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> this.dataBlockEncoder = blockEncoder;<a name="line.549"></a>
+<span class="sourceLineNo">550</span> }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span> /**<a name="line.552"></a>
+<span class="sourceLineNo">553</span> * Creates an unsorted list of StoreFile loaded in parallel<a name="line.553"></a>
+<span class="sourceLineNo">554</span> * from the given directory.<a name="line.554"></a>
+<span class="sourceLineNo">555</span> * @throws IOException<a name="line.555"></a>
+<span class="sourceLineNo">556</span> */<a name="line.556"></a>
+<span class="sourceLineNo">557</span> private List<HStoreFile> loadStoreFiles() throws IOException {<a name="line.557"></a>
+<span class="sourceLineNo">558</span> Collection<StoreFileInfo> files = fs.getStoreFiles(getColumnFamilyName());<a name="line.558"></a>
+<span class="sourceLineNo">559</span> return openStoreFiles(files);<a name="line.559"></a>
+<span class="sourceLineNo">560</span> }<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span> private List<HStoreFile> openStoreFiles(Collection<StoreFileInfo> files) throws IOException {<a name="line.562"></a>
+<span class="sourceLineNo">563</span> if (CollectionUtils.isEmpty(files)) {<a name="line.563"></a>
+<span class="sourceLineNo">564</span> return Collections.emptyList();<a name="line.564"></a>
+<span class="sourceLineNo">565</span> }<a name="line.565"></a>
+<span class="sourceLineNo">566</span> // initialize the thread pool for opening store files in parallel..<a name="line.566"></a>
+<span class="sourceLineNo">567</span> ThreadPoolExecutor storeFileOpenerThreadPool =<a name="line.567"></a>
+<span class="sourceLineNo">568</span> this.region.getStoreFileOpenAndCloseThreadPool("StoreFileOpenerThread-"<a name="line.568"></a>
+<span class="sourceLineNo">569</span> + this.region.getRegionInfo().getEncodedName() + "-" + this.getColumnFamilyName());<a name="line.569"></a>
+<span class="sourceLineNo">570</span> CompletionService<HStoreFile> completionService = new ExecutorCompletionService<>(storeFileOpenerThreadPool);<a name="line.570"></a>
<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span> ArrayList<HStoreFile> results = new ArrayList<>(files.size());<a name="line.572"></a>
-<span class="sourceLineNo">573</span> IOException ioe = null;<a name="line.573"></a>
-<span class="sourceLineNo">574</span> try {<a name="line.574"></a>
-<span class="sourceLineNo">575</span> for (int i = 0; i < totalValidStoreFile; i++) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span> try {<a name="line.576"></a>
-<span class="sourceLineNo">577</span> HStoreFile storeFile = completionService.take().get();<a name="line.577"></a>
-<span class="sourceLineNo">578</span> if (storeFile != null) {<a name="line.578"></a>
-<span class="sourceLineNo">579</span> long length = storeFile.getReader().length();<a name="line.579"></a>
-<span class="sourceLineNo">580</span> this.storeSize.addAndGet(length);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> this.totalUncompressedBytes<a name="line.581"></a>
-<span class="sourceLineNo">582</span> .addAndGet(storeFile.getReader().getTotalUncompressedBytes());<a name="line.582"></a>
-<span class="sourceLineNo">583</span> LOG.debug("loaded {}", storeFile);<a name="line.583"></a>
-<span class="sourceLineNo">584</span> results.add(storeFile);<a name="line.584"></a>
-<span class="sourceLineNo">585</span> }<a name="line.585"></a>
-<span class="sourceLineNo">586</span> } catch (InterruptedException e) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span> if (ioe == null) ioe = new InterruptedIOException(e.getMessage());<a name="line.587"></a>
-<span class="sourceLineNo">588</span> } catch (ExecutionException e) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> if (ioe == null) ioe = new IOException(e.getCause());<a name="line.589"></a>
-<span class="sourceLineNo">590</span> }<a name="line.590"></a>
-<span class="sourceLineNo">591</span> }<a name="line.591"></a>
-<span class="sourceLineNo">592</span> } finally {<a name="line.592"></a>
-<span class="sourceLineNo">593</span> storeFileOpenerThreadPool.shutdownNow();<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> if (ioe != null) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span> // close StoreFile readers<a name="line.596"></a>
-<span class="sourceLineNo">597</span> boolean evictOnClose =<a name="line.597"></a>
-<span class="sourceLineNo">598</span> cacheConf != null? cacheConf.shouldEvictOnClose(): true;<a name="line.598"></a>
-<span class="sourceLineNo">599</span> for (HStoreFile file : results) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span> try {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> if (file != null) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> file.closeStoreFile(evictOnClose);<a name="line.602"></a>
-<span class="sourceLineNo">603</span> }<a name="line.603"></a>
-<span class="sourceLineNo">604</span> } catch (IOException e) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span> LOG.warn("Could not close store file", e);<a name="line.605"></a>
-<span class="sourceLineNo">606</span> }<a name="line.606"></a>
-<span class="sourceLineNo">607</span> }<a name="line.607"></a>
-<span class="sourceLineNo">608</span> throw ioe;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span> return results;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
+<span class="sourceLineNo">572</span> int totalValidStoreFile = 0;<a name="line.572"></a>
+<span class="sourceLineNo">573</span> for (StoreFileInfo storeFileInfo : files) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span> // open each store file in parallel<a name="line.574"></a>
+<span class="sourceLineNo">575</span> completionService.submit(() -> this.createStoreFileAndReader(storeFileInfo));<a name="line.575"></a>
+<span class="sourceLineNo">576</span> totalValidStoreFile++;<a name="line.576"></a>
+<span class="sourceLineNo">577</span> }<a name="line.577"></a>
+<span class="sourceLineNo">578</span><a name="line.578"></a>
+<span class="sourceLineNo">579</span> ArrayList<HStoreFile> results = new ArrayList<>(files.size());<a name="line.579"></a>
+<span class="sourceLineNo">580</span> IOException ioe = null;<a name="line.580"></a>
+<span class="sourceLineNo">581</span> try {<a name="line.581"></a>
+<span class="sourceLineNo">582</span> for (int i = 0; i < totalValidStoreFile; i++) {<a name="line.582"></a>
+<span class="sourceLineNo">583</span> try {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> HStoreFile storeFile = completionService.take().get();<a name="line.584"></a>
+<span class="sourceLineNo">585</span> if (storeFile != null) {<a name="line.585"></a>
+<span class="sourceLineNo">586</span> LOG.debug("loaded {}", storeFile);<a name="line.586"></a>
+<span class="sourceLineNo">587</span> results.add(storeFile);<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> } catch (InterruptedException e) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> if (ioe == null) ioe = new InterruptedIOException(e.getMessage());<a name="line.590"></a>
+<span class="sourceLineNo">591</span> } catch (ExecutionException e) {<a name="line.591"></a>
+<span class="sourceLineNo">592</span> if (ioe == null) ioe = new IOException(e.getCause());<a name="line.592"></a>
+<span class="sourceLineNo">593</span> }<a name="line.593"></a>
+<span class="sourceLineNo">594</span> }<a name="line.594"></a>
+<span class="sourceLineNo">595</span> } finally {<a name="line.595"></a>
+<span class="sourceLineNo">596</span> storeFileOpenerThreadPool.shutdownNow();<a name="line.596"></a>
+<span class="sourceLineNo">597</span> }<a name="line.597"></a>
+<span class="sourceLineNo">598</span> if (ioe != null) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> // close StoreFile readers<a name="line.599"></a>
+<span class="sourceLineNo">600</span> boolean evictOnClose =<a name="line.600"></a>
+<span class="sourceLineNo">601</span> cacheConf != null? cacheConf.shouldEvictOnClose(): true;<a name="line.601"></a>
+<span class="sourceLineNo">602</span> for (HStoreFile file : results) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span> try {<a name="line.603"></a>
+<span class="sourceLineNo">604</span> if (file != null) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span> file.closeStoreFile(evictOnClose);<a name="line.605"></a>
+<span class="sourceLineNo">606</span> }<a name="line.606"></a>
+<span class="sourceLineNo">607</span> } catch (IOException e) {<a name="line.607"></a>
+<span class="sourceLineNo">608</span> LOG.warn("Could not close store file", e);<a name="line.608"></a>
+<span class="sourceLineNo">609</span> }<a name="line.609"></a>
+<span class="sourceLineNo">610</span> }<a name="line.610"></a>
+<span class="sourceLineNo">611</span> throw ioe;<a name="line.611"></a>
+<span class="sourceLineNo">612</span> }<a name="line.612"></a>
<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> @Override<a name="line.614"></a>
-<span class="sourceLineNo">615</span> public void refreshStoreFiles() throws IOException {<a name="line.615"></a>
-<span class="sourceLineNo">616</span> Collection<StoreFileInfo> newFiles = fs.getStoreFiles(getColumnFamilyName());<a name="line.616"></a>
-<span class="sourceLineNo">617</span> refreshStoreFilesInternal(newFiles);<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span> /**<a name="line.620"></a>
-<span class="sourceLineNo">621</span> * Replaces the store files that the store has with the given files. Mainly used by secondary<a name="line.621"></a>
-<span class="sourceLineNo">622</span> * region replicas to keep up to date with the primary region files.<a name="line.622"></a>
-<span class="sourceLineNo">623</span> * @throws IOException<a name="line.623"></a>
-<span class="sourceLineNo">624</span> */<a name="line.624"></a>
-<span class="sourceLineNo">625</span> public void refreshStoreFiles(Collection<String> newFiles) throws IOException {<a name="line.625"></a>
-<span class="sourceLineNo">626</span> List<StoreFileInfo> storeFiles = new ArrayList<>(newFiles.size());<a name="line.626"></a>
-<span class="sourceLineNo">627</span> for (String file : newFiles) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> storeFiles.add(fs.getStoreFileInfo(getColumnFamilyName(), file));<a name="line.628"></a>
-<span class="sourceLineNo">629</span> }<a name="line.629"></a>
-<span class="sourceLineNo">630</span> refreshStoreFilesInternal(storeFiles);<a name="line.630"></a>
-<span class="sourceLineNo">631</span> }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span> /**<a name="line.633"></a>
-<span class="sourceLineNo">634</span> * Checks the underlying store files, and opens the files that have not<a name="line.634"></a>
-<span class="sourceLineNo">635</span> * been opened, and removes the store file readers for store files no longer<a name="line.635"></a>
-<span class="sourceLineNo">636</span> * available. Mainly used by secondary region replicas to keep up to date with<a name="line.636"></a>
-<span class="sourceLineNo">637</span> * the primary region files.<a name="line.637"></a>
-<span class="sourceLineNo">638</span> * @throws IOException<a name="line.638"></a>
-<span class="sourceLineNo">639</span> */<a name="line.639"></a>
-<span class="sourceLineNo">640</span> private void refreshStoreFilesInternal(Collection<StoreFileInfo> newFiles) throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span> StoreFileManager sfm = storeEngine.getStoreFileManager();<a name="line.641"></a>
-<span class="sourceLineNo">642</span> Collection<HStoreFile> currentFiles = sfm.getStorefiles();<a name="line.642"></a>
-<span class="sourceLineNo">643</span> Collection<HStoreFile> compactedFiles = sfm.getCompactedfiles();<a name="line.643"></a>
-<span class="sourceLineNo">644</span> if (currentFiles == null) currentFiles = Collections.emptySet();<a name="line.644"></a>
-<span class="sourceLineNo">645</span> if (newFiles == null) newFiles = Collections.emptySet();<a name="line.645"></a>
-<span class="sourceLineNo">646</span> if (compactedFiles == null) compactedFiles = Collections.emptySet();<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span> HashMap<StoreFileInfo, HStoreFile> currentFilesSet = new HashMap<>(currentFiles.size());<a name="line.648"></a>
-<span class="sourceLineNo">649</span> for (HStoreFile sf : currentFiles) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span> currentFilesSet.put(sf.getFileInfo(), sf);<a name="line.650"></a>
-<span class="sourceLineNo">651</span> }<a name="line.651"></a>
-<span class="sourceLineNo">652</span> HashMap<StoreFileInfo, HStoreFile> compactedFilesSet = new HashMap<>(compactedFiles.size());<a name="line.652"></a>
-<span class="sourceLineNo">653</span> for (HStoreFile sf : compactedFiles) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span> compactedFilesSet.put(sf.getFileInfo(), sf);<a name="line.654"></a>
-<span class="sourceLineNo">655</span> }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span> Set<StoreFileInfo> newFilesSet = new HashSet<StoreFileInfo>(newFiles);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> // Exclude the files that have already been compacted<a name="line.658"></a>
-<span class="sourceLineNo">659</span> newFilesSet = Sets.difference(newFilesSet, compactedFilesSet.keySet());<a name="line.659"></a>
-<span class="sourceLineNo">660</span> Set<StoreFileInfo> toBeAddedFiles = Sets.difference(newFilesSet, currentFilesSet.keySet());<a name="line.660"></a>
-<span class="sourceLineNo">661</span> Set<StoreFileInfo> toBeRemovedFiles = Sets.difference(currentFilesSet.keySet(), newFilesSet);<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> if (toBeAddedFiles.isEmpty() && toBeRemovedFiles.isEmpty()) {<a name="line.663"></a>
-<span class="sourceLineNo">664</span> return;<a name="line.664"></a>
-<span class="sourceLineNo">665</span> }<a name="line.665"></a>
-<span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span> LOG.info("Refreshing store files for region " + this.getRegionInfo().getRegionNameAsString()<a name="line.667"></a>
-<span class="sourceLineNo">668</span> + " files to add: " + toBeAddedFiles + " files to remove: " + toBeRemovedFiles);<a name="line.668"></a>
+<span class="sourceLineNo">614</span> return results;<a name="line.614"></a>
+<span class="sourceLineNo">615</span> }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span> @Override<a name="line.617"></a>
+<span class="sourceLineNo">618</span> public void refreshStoreFiles() throws IOException {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> Collection<StoreFileInfo> newFiles = fs.getStoreFiles(getColumnFamilyName());<a name="line.619"></a>
+<span class="sourceLineNo">620</span> refreshStoreFilesInternal(newFiles);<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span> * Replaces the store files that the store has with the given files. Mainly used by secondary<a name="line.624"></a>
+<span class="sourceLineNo">625</span> * region replicas to keep up to date with the primary region files.<a name="line.625"></a>
+<span class="sourceLineNo">626</span> * @throws IOException<a name="line.626"></a>
+<span class="sourceLineNo">627</span> */<a name="line.627"></a>
+<span class="sourceLineNo">628</span> public void refreshStoreFiles(Collection<String> newFiles) throws IOException {<a name="line.628"></a>
+<span class="sourceLineNo">629</span> List<StoreFileInfo> storeFiles = new ArrayList<>(newFiles.size());<a name="line.629"></a>
+<span class="sourceLineNo">630</span> for (String file : newFiles) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span> storeFiles.add(fs.getStoreFileInfo(getColumnFamilyName(), file));<a name="line.631"></a>
+<span class="sourceLineNo">632</span> }<a name="line.632"></a>
+<span class="sourceLineNo">633</span> refreshStoreFilesInternal(storeFiles);<a name="line.633"></a>
+<span class="sourceLineNo">634</span> }<a name="line.634"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span> /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span> * Checks the underlying store files, and opens the files that have not<a name="line.637"></a>
+<span class="sourceLineNo">638</span> * been opened, and removes the store file readers for store files no longer<a name="line.638"></a>
+<span class="sourceLineNo">639</span> * available. Mainly used by secondary region replicas to keep up to date with<a name="line.639"></a>
+<span class="sourceLineNo">640</span> * the primary region files.<a name="line.640"></a>
+<span class="sourceLineNo">641</span> * @throws IOException<a name="line.641"></a>
+<span class="sourceLineNo">642</span> */<a name="line.642"></a>
+<span class="sourceLineNo">643</span> private void refreshStoreFilesInternal(Collection<StoreFileInfo> newFiles) throws IOException {<a name="line.643"></a>
+<span class="sourceLineNo">644</span> StoreFileManager sfm = storeEngine.getStoreFileManager();<a name="line.644"></a>
+<span class="sourceLineNo">645</span> Collection<HStoreFile> currentFiles = sfm.getStorefiles();<a name="line.645"></a>
+<span class="sourceLineNo">646</span> Collection<HStoreFile> compactedFiles = sfm.getCompactedfiles();<a name="line.646"></a>
+<span class="sourceLineNo">647</span> if (currentFiles == null) currentFiles = Collections.emptySet();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> if (newFiles == null) newFiles = Collections.emptySet();<a name="line.648"></a>
+<span class="sourceLineNo">649</span> if (compactedFiles == null) compactedFiles = Collections.emptySet();<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span> HashMap<StoreFileInfo, HStoreFile> currentFilesSet = new HashMap<>(currentFiles.size());<a name="line.651"></a>
+<span class="sourceLineNo">652</span> for (HStoreFile sf : currentFiles) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> currentFilesSet.put(sf.getFileInfo(), sf);<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> HashMap<StoreFileInfo, HStoreFile> compactedFilesSet = new HashMap<>(compactedFiles.size());<a name="line.655"></a>
+<span class="sourceLineNo">656</span> for (HStoreFile sf : compactedFiles) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span> compactedFilesSet.put(sf.getFileInfo(), sf);<a name="line.657"></a>
+<span class="sourceLineNo">658</span> }<a name="line.658"></a>
+<span class="sourceLineNo">659</span><a name="line.659"></a>
+<span class="sourceLineNo">660</span> Set<StoreFileInfo> newFilesSet = new HashSet<StoreFileInfo>(newFiles);<a name="line.660"></a>
+<span class="sourceLineNo">661</span> // Exclude the files that have already been compacted<a name="line.661"></a>
+<span class="sourceLineNo">662</span> newFilesSet = Sets.difference(newFilesSet, compactedFilesSet.keySet());<a name="line.662"></a>
+<span class="sourceLineNo">663</span> Set<StoreFileInfo> toBeAddedFiles = Sets.difference(newFilesSet, currentFilesSet.keySet());<a name="line.663"></a>
+<span class="sourceLineNo">664</span> Set<StoreFileInfo> toBeRemovedFiles = Sets.difference(currentFilesSet.keySet(), newFilesSet);<a name="line.664"></a>
+<span class="sourceLineNo">665</span><a name="line.665"></a>
+<span class="sourceLineNo">666</span> if (toBeAddedFiles.isEmpty() && toBeRemovedFiles.isEmpty()) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span> return;<a name="line.667"></a>
+<span class="sourceLineNo">668</span> }<a name="line.668"></a>
<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span> Set<HStoreFile> toBeRemovedStoreFiles = new HashSet<>(toBeRemovedFiles.size());<a name="line.670"></a>
-<span class="sourceLineNo">671</span> for (StoreFileInfo sfi : toBeRemovedFiles) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> toBeRemovedStoreFiles.add(currentFilesSet.get(sfi));<a name="line.672"></a>
-<span class="sourceLineNo">673</span> }<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span> // try to open the files<a name="line.675"></a>
-<span class="sourceLineNo">676</span> List<HStoreFile> openedFiles = openStoreFiles(toBeAddedFiles);<a name="line.676"></a>
+<span class="sourceLineNo">670</span> LOG.info("Refreshing store files for region " + this.getRegionInfo().getRegionNameAsString()<a name="line.670"></a>
+<span class="sourceLineNo">671</span> + " files to add: " + toBeAddedFiles + " files to remove: " + toBeRemovedFiles);<a name="line.671"></a>
+<span class="sourceLineNo">672</span><a name="line.672"></a>
+<span class="sourceLineNo">673</span> Set<HStoreFile> toBeRemovedStoreFiles = new HashSet<>(toBeRemovedFiles.size());<a name="line.673"></a>
+<span class="sourceLineNo">674</span> for (StoreFileInfo sfi : toBeRemovedFiles) {<a name="line.674"></a>
+<span class="sourceLineNo">675</span> toBeRemovedStoreFiles.add(currentFilesSet.get(sfi));<a name="line.675"></a>
+<span class="sourceLineNo">676</span> }<a name="line.676"></a>
<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span> // propogate the file changes to the underlying store file manager<a name="line.678"></a>
-<span class="sourceLineNo">679</span> replaceStoreFiles(toBeRemovedStoreFiles, openedFiles); //won't throw an exception<a name="line.679"></a>
+<span class="sourceLineNo">678</span> // try to open the files<a name="line.678"></a>
+<span class="sourceLineNo">679</span> List<HStoreFile> openedFiles = openStoreFiles(toBeAddedFiles);<a name="line.679"></a>
<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span> // Advance the memstore read point to be at least the new store files seqIds so that<a name="line.681"></a>
-<span class="sourceLineNo">682</span> // readers might pick it up. This assumes that the store is not getting any writes (otherwise<a name="line.682"></a>
-<span class="sourceLineNo">683</span> // in-flight transactions might be made visible)<a name="line.683"></a>
-<span class="sourceLineNo">684</span> if (!toBeAddedFiles.isEmpty()) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> // we must have the max sequence id here as we do have several store files<a name="line.685"></a>
-<span class="sourceLineNo">686</span> region.getMVCC().advanceTo(this.getMaxSequenceId().getAsLong());<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
-<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> completeCompaction(toBeRemovedStoreFiles);<a name="line.689"></a>
-<span class="sourceLineNo">690</span> }<a name="line.690"></a>
+<span class="sourceLineNo">681</span> // propogate the file changes to the underlying store file manager<a name="line.681"></a>
+<span class="sourceLineNo">682</span> replaceStoreFiles(toBeRemovedStoreFiles, openedFiles); //won't throw an exception<a name="line.682"></a>
+<span class="sourceLineNo">683</span><a name="line.683"></a>
+<span class="sourceLineNo">684</span> // Advance the memstore read point to be at least the new store files seqIds so that<a name="line.684"></a>
+<span class="sourceLineNo">685</span> // readers might pick it up. This assumes that the store is not getting any writes (otherwise<a name="line.685"></a>
+<span class="sourceLineNo">686</span> // in-flight transactions might be made visible)<a name="line.686"></a>
+<span class="sourceLineNo">687</span> if (!toBeAddedFiles.isEmpty()) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> // we must have the max sequence id here as we do have several store files<a name="line.688"></a>
+<span class="sourceLineNo">689</span> region.getMVCC().advanceTo(this.getMaxSequenceId().getAsLong());<a name="line.689"></a>
+<span class="sourceLineNo">690</span> }<a name="line.690"></a>
<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span> @VisibleForTesting<a name="line.692"></a>
-<span class="sourceLineNo">693</span> protected HStoreFile createStoreFileAndReader(final Path p) throws IOException {<a name="line.693"></a>
-<span class="sourceLineNo">694</span> StoreFileInfo info = new StoreFileInfo(conf, this.getFileSystem(), p);<a name="line.694"></a>
-<span class="sourceLineNo">695</span> return createStoreFileAndReader(info);<a name="line.695"></a>
-<span class="sourceLineNo">696</span> }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span> private HStoreFile createStoreFileAndReader(StoreFileInfo info) throws IOException {<a name="line.698"></a>
-<span class="sourceLineNo">699</span> info.setRegionCoprocessorHost(this.region.getCoprocessorHost());<a name="line.699"></a>
-<span class="sourceLineNo">700</span> HStoreFile storeFile = new HStoreFile(this.getFileSystem(), info, this.conf, this.cacheConf,<a name="line.700"></a>
-<span class="sourceLineNo">701</span> this.family.getBloomFilterType(), isPrimaryReplicaStore());<a name="line.701"></a>
-<span class="sourceLineNo">702</span> storeFile.initReader();<a name="line.702"></a>
-<span class="sourceLineNo">703</span> return storeFile;<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span> /**<a name="line.706"></a>
-<span class="sourceLineNo">707</span> * This message intends to inform the MemStore that next coming updates<a name="line.707"></a>
-<span class="sourceLineNo">708</span> * are going to be part of the replaying edits from WAL<a name="line.708"></a>
-<span class="sourceLineNo">709</span> */<a name="line.709"></a>
-<span class="sourceLineNo">710</span> public void startReplayingFromWAL(){<a name="line.710"></a>
-<span class="sourceLineNo">711</span> this.memstore.startReplayingFromWAL();<a name="line.711"></a>
-<span class="sourceLineNo">712</span> }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span> /**<a name="line.714"></a>
-<span class="sourceLineNo">715</span> * This message intends to inform the MemStore that the replaying edits from WAL<a name="line.715"></a>
-<span class="sourceLineNo">716</span> * are done<a name="line.716"></a>
-<span class="sourceLineNo">717</span> */<a name="line.717"></a>
-<span class="sourceLineNo">718</span> public void stopReplayingFromWAL(){<a name="line.718"></a>
-<span class="sourceLineNo">719</span> this.memstore.stopReplayingFromWAL();<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span><a name="line.721"></a>
-<span class="sourceLineNo">722</span> /**<a name="line.722"></a>
-<span class="sourceLineNo">723</span> * Adds a value to the memstore<a name="line.723"></a>
-<span class="sourceLineNo">724</span> */<a name="line.724"></a>
-<span class="sourceLineNo">725</span> public void add(final Cell cell, MemStoreSizing memstoreSizing) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span> lock.readLock().lock();<a name="line.726"></a>
-<span class="sourceLineNo">727</span> try {<a name="line.727"></a>
-<span class="sourceLineNo">728</span> if (this.currentParallelPutCount.getAndIncrement() > this.parallelPutCountPrintThreshold) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span> LOG.trace(this.getTableName() + "tableName={}, encodedName={}, columnFamilyName={} is " +<a name="line.729"></a>
-<span class="sourceLineNo">730</span> "too busy!", this.getRegionInfo().getEncodedName(), this .getColumnFamilyName());<a name="line.730"></a>
-<span class="sourceLineNo">731</span> }<a name="line.731"></a>
-<span class="sourceLineNo">732</span> this.memstore.add(cell, memstoreSizing);<a name="line.732"></a>
-<span class="sourceLineNo">733</span> } finally {<a name="line.733"></a>
-<span class="sourceLineNo">734</span> lock.readLock().unlock();<a name="line.734"></a>
-<span class="sourceLineNo">735</span> currentParallelPutCount.decrementAndGet();<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span> }<a name="line.737"></a>
-<span class="sourceLineNo">738</span><a name="line.738"></a>
-<span class="sourceLineNo">739</span> /**<a name="line.739"></a>
-<span class="sourceLineNo">740</span> * Adds the specified value to the memstore<a name="line.740"></a>
-<span class="sourceLineNo">741</span> */<a name="line.741"></a>
-<span class="sourceLineNo">742</span> public void add(final Iterable<Cell> cells, MemStoreSizing memstoreSizing) {<a name="line.742"></a>
-<span class="sourceLineNo">743</span> lock.readLock().lock();<a name="line.743"></a>
-<span class="sourceLineNo">744</span> try {<a name="line.744"></a>
-<span class="sourceLineNo">745</span> if (this.currentParallelPutCount.getAndIncrement() > this.parallelPutCountPrintThreshold) {<a name="line.745"></a>
-<span class="sourceLineNo">746</span> LOG.trace(this.getTableName() + "tableName={}, encodedName={}, columnFamilyName={} is " +<a name="line.746"></a>
-<span class="sourceLineNo">747</span> "too busy!", this.getRegionInfo().getEncodedName(), this .getColumnFamilyName());<a name="line.747"></a>
-<span class="sourceLineNo">748</span> }<a name="line.748"></a>
-<span class="sourceLineNo">749</span> memstore.add(cells, memstoreSizing);<a name="line.749"></a>
-<span class="sourceLineNo">750</span> } finally {<a name="line.750"></a>
-<span class="sourceLineNo">751</span> lock.readLock().unlock();<a name="line.751"></a>
-<span class="sourceLineNo">752</span> currentParallelPutCount.decrementAndGet();<a name="line.752"></a>
-<span class="sourceLineNo">753</span> }<a name="line.753"></a>
-<span class="sourceLineNo">754</span> }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span> @Override<a name="line.756"></a>
-<span class="sourceLineNo">757</span> public long timeOfOldestEdit() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span> return memstore.timeOfOldestEdit();<a name="line.758"></a>
-<span class="sourceLineNo">759</span> }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span> /**<a name="line.761"></a>
-<span class="sourceLineNo">762</span> * @return All store files.<a name="line.762"></a>
-<span class="sourceLineNo">763</span> */<a name="line.763"></a>
-<span class="sourceLineNo">764</span> @Override<a name="line.764"></a>
-<span class="sourceLineNo">765</span> public Collection<HStoreFile> getStorefiles() {<a name="line.765"></a>
-<span class="sourceLineNo">766</span> return this.storeEngine.getStoreFileManager().getStorefiles();<a name="line.766"></a>
-<span class="sourceLineNo">767</span> }<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span> @Override<a name="line.769"></a>
-<span class="sourceLineNo">770</span> public Collection<HStoreFile> getCompactedFiles() {<a name="line.770"></a>
-<span class="sourceLineNo">771</span> return this.storeEngine.getStoreFileManager().getCompactedfiles();<a name="line.771"></a>
-<span class="sourceLineNo">772</span> }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span> /**<a name="line.774"></a>
-<span class="sourceLineNo">775</span> * This throws a WrongRegionException if the HFile does not fit in this region, or an<a name="line.775"></a>
-<span class="sourceLineNo">776</span> * InvalidHFileException if the HFile is not valid.<a name="line.776"></a>
-<span class="sourceLineNo">777</span> */<a name="line.777"></a>
-<span class="sourceLineNo">778</span> public void assertBulkLoadHFileOk(Path srcPath) throws IOException {<a name="line.778"></a>
-<span class="sourceLineNo">779</span> HFile.Reader reader = null;<a name="line.779"></a>
-<span class="sourceLineNo">780</span> try {<a name="line.780"></a>
-<span class="sourceLineNo">781</span> LOG.info("Validating hfile at " + srcPath + " for inclusion in "<a name="line.781"></a>
-<span class="sourceLineNo">782</span> + "store " + this + " region " + this.getRegionInfo().getRegionNameAsString());<a name="line.782"></a>
-<span class="sourceLineNo">783</span> reader = HFile.createReader(srcPath.getFileSystem(conf), srcPath, cacheConf,<a name="line.783"></a>
-<span class="sourceLineNo">784</span> isPrimaryReplicaStore(), conf);<a name="line.784"></a>
-<span class="sourceLineNo">785</span> reader.loadFileInfo();<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span> Optional<byte[]> firstKey = reader.getFirstRowKey();<a name="line.787"></a>
-<span class="sourceLineNo">788</span> Preconditions.checkState(firstKey.isPresent(), "First key can not be null");<a name="line.788"></a>
-<span class="sourceLineNo">789</span> Optional<Cell> lk = reader.getLastKey();<a name="line.789"></a>
-<span class="sourceLineNo">790</span> Preconditions.checkState(lk.isPresent(), "Last key can not be null");<a name="line.790"></a>
-<span class="sourceLineNo">791</span> byte[] lastKey = CellUtil.cloneRow(lk.get());<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span> if (LOG.isDebugEnabled()) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span> LOG.debug("HFile bounds: first=" + Bytes.toStringBinary(firstKey.get()) +<a name="line.794"></a>
-<span class="sourceLineNo">795</span> " last=" + Bytes.toStringBinary(lastKey));<a name="line.795"></a>
-<span class="sourceLineNo">796</span> LOG.debug("Region bounds: first=" +<a name="line.796"></a>
-<span class="sourceLineNo">797</span> Bytes.toStringBinary(getRegionInfo().getStartKey()) +<a name="line.797"></a>
-<span class="sourceLineNo">798</span> " last=" + Bytes.toStringBinary(getRegionInfo().getEndKey()));<a name="line.798"></a>
-<span class="sourceLineNo">799</span> }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span> if (!this.getRegionInfo().containsRange(firstKey.get(), lastKey)) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span> throw new WrongRegionException(<a name="line.802"></a>
-<span class="sourceLineNo">803</span> "Bulk load file " + srcPath.toString() + " does not fit inside region "<a name="line.803"></a>
-<span class="sourceLineNo">804</span> + this.getRegionInfo().getRegionNameAsString());<a name="line.804"></a>
-<span class="sourceLineNo">805</span> }<a name="line.805"></a>
-<span class="sourceLineNo">806</span><a name="line.806"></a>
-<span class="sourceLineNo">807</span> if(reader.length() > conf.getLong(HConstants.HREGION_MAX_FILESIZE,<a name="line.807"></a>
-<span class="sourceLineNo">808</span> HConstants.DEFAULT_MAX_FILE_SIZE)) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> LOG.warn("Trying to bulk load hfile " + srcPath + " with size: " +<a name="line.809"></a>
-<span class="sourceLineNo">810</span> reader.length() + " bytes can be problematic as it may lead to oversplitting.");<a name="line.810"></a>
-<span class="sourceLineNo">811</span> }<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span> if (verifyBulkLoads) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span> long verificationStartTime = EnvironmentEdgeManager.currentTime();<a name="line.814"></a>
-<span class="sourceLineNo">815</span> LOG.info("Full verification started for bulk load hfile: {}", srcPath);<a name="line.815"></a>
-<span class="sourceLineNo">816</span> Cell prevCell = null;<a name="line.816"></a>
-<span class="sourceLineNo">817</span> HFileScanner scanner = reader.getScanner(false, false, false);<a name="line.817"></a>
-<span class="sourceLineNo">818</span> scanner.seekTo();<a name="line.818"></a>
-<span class="sourceLineNo">819</span> do {<a name="line.819"></a>
-<span class="sourceLineNo">820</span> Cell cell = scanner.getCell();<a name="line.820"></a>
-<span class="sourceLineNo">821</span> if (prevCell != null) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span> if (comparator.compareRows(prevCell, cell) > 0) {<a name="line.822"></a>
-<span class="sourceLineNo">823</span> throw new InvalidHFileException("Previous row is greater than"<a name="line.823"></a>
-<span class="sourceLineNo">824</span> + " current row: path=" + srcPath + " previous="<a name="line.824"></a>
-<span class="sourceLineNo">825</span> + CellUtil.getCellKeyAsString(prevCell) + " current="<a name="line.825"></a>
-<span class="sourceLineNo">826</span> + CellUtil.getCellKeyAsString(cell));<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span> if (CellComparator.getInstance().compareFam
<TRUNCATED>
[23/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html
index 688bd4e..37bf508 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html
@@ -589,1651 +589,1649 @@
<span class="sourceLineNo">581</span> LOG.debug("Loading {}", proc);<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span> Long rootProcId = getRootProcedureId(proc);<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (rootProcId == null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.585"></a>
-<span class="sourceLineNo">586</span> scheduler.addBack(proc);<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (proc.hasParent()) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.591"></a>
-<span class="sourceLineNo">592</span> // corrupted procedures are handled later at step 3<a name="line.592"></a>
-<span class="sourceLineNo">593</span> if (parent != null && !proc.isFinished()) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> parent.incChildrenLatch();<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.598"></a>
-<span class="sourceLineNo">599</span> procStack.loadStack(proc);<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span> proc.setRootProcId(rootProcId);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> switch (proc.getState()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> case RUNNABLE:<a name="line.603"></a>
-<span class="sourceLineNo">604</span> runnableList.add(proc);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> break;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> case WAITING:<a name="line.606"></a>
-<span class="sourceLineNo">607</span> waitingList.add(proc);<a name="line.607"></a>
-<span class="sourceLineNo">608</span> break;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> case WAITING_TIMEOUT:<a name="line.609"></a>
-<span class="sourceLineNo">610</span> waitingTimeoutList.add(proc);<a name="line.610"></a>
-<span class="sourceLineNo">611</span> break;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> case FAILED:<a name="line.612"></a>
-<span class="sourceLineNo">613</span> failedList.add(proc);<a name="line.613"></a>
-<span class="sourceLineNo">614</span> break;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> case ROLLEDBACK:<a name="line.615"></a>
-<span class="sourceLineNo">616</span> case INITIALIZING:<a name="line.616"></a>
-<span class="sourceLineNo">617</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> LOG.error(msg);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throw new UnsupportedOperationException(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> default:<a name="line.620"></a>
-<span class="sourceLineNo">621</span> break;<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> // 4. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> waitingList.forEach(proc -> {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> if (!proc.hasChildren()) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> // Normally, WAITING procedures should be waken by its children.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> // But, there is a case that, all the children are successful and before<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // they can wake up their parent procedure, the master was killed.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // are not loaded because of their SUCCESS state.<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // So we need to continue to run this WAITING procedure. But before<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // will throw:<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.637"></a>
-<span class="sourceLineNo">638</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> runnableList.add(proc);<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span> });<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span> // 5. Push the procedures to the timeout executor<a name="line.643"></a>
-<span class="sourceLineNo">644</span> waitingTimeoutList.forEach(proc -> {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> proc.afterReplay(getEnvironment());<a name="line.645"></a>
-<span class="sourceLineNo">646</span> timeoutExecutor.add(proc);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> });<a name="line.647"></a>
-<span class="sourceLineNo">648</span> // 6. restore locks<a name="line.648"></a>
-<span class="sourceLineNo">649</span> restoreLocks();<a name="line.649"></a>
-<span class="sourceLineNo">650</span> // 7. Push the procedure to the scheduler<a name="line.650"></a>
-<span class="sourceLineNo">651</span> failedList.forEach(scheduler::addBack);<a name="line.651"></a>
-<span class="sourceLineNo">652</span> runnableList.forEach(p -> {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> p.afterReplay(getEnvironment());<a name="line.653"></a>
-<span class="sourceLineNo">654</span> if (!p.hasParent()) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.655"></a>
-<span class="sourceLineNo">656</span> }<a name="line.656"></a>
-<span class="sourceLineNo">657</span> scheduler.addBack(p);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> });<a name="line.658"></a>
-<span class="sourceLineNo">659</span> }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span> /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.662"></a>
-<span class="sourceLineNo">663</span> * <p/><a name="line.663"></a>
-<span class="sourceLineNo">664</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.664"></a>
-<span class="sourceLineNo">665</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.665"></a>
-<span class="sourceLineNo">666</span> * pending and in-progress procedures.<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * @param numThreads number of threads available for procedure execution.<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * is found on replay. otherwise false.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> // We have numThreads executor + one timer thread used for timing out<a name="line.672"></a>
-<span class="sourceLineNo">673</span> // procedures and triggering periodic procedures.<a name="line.673"></a>
-<span class="sourceLineNo">674</span> this.corePoolSize = numThreads;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> this.maxPoolSize = 10 * numThreads;<a name="line.675"></a>
-<span class="sourceLineNo">676</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.676"></a>
-<span class="sourceLineNo">677</span> corePoolSize, maxPoolSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.679"></a>
-<span class="sourceLineNo">680</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span> // Create the workers<a name="line.682"></a>
-<span class="sourceLineNo">683</span> workerId.set(0);<a name="line.683"></a>
-<span class="sourceLineNo">684</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.684"></a>
-<span class="sourceLineNo">685</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">584</span> // The orphan procedures will be passed to handleCorrupted, so add an assert here<a name="line.584"></a>
+<span class="sourceLineNo">585</span> assert rootProcId != null;<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (proc.hasParent()) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.588"></a>
+<span class="sourceLineNo">589</span> if (parent != null && !proc.isFinished()) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> parent.incChildrenLatch();<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> procStack.loadStack(proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span> proc.setRootProcId(rootProcId);<a name="line.597"></a>
+<span class="sourceLineNo">598</span> switch (proc.getState()) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> case RUNNABLE:<a name="line.599"></a>
+<span class="sourceLineNo">600</span> runnableList.add(proc);<a name="line.600"></a>
+<span class="sourceLineNo">601</span> break;<a name="line.601"></a>
+<span class="sourceLineNo">602</span> case WAITING:<a name="line.602"></a>
+<span class="sourceLineNo">603</span> waitingList.add(proc);<a name="line.603"></a>
+<span class="sourceLineNo">604</span> break;<a name="line.604"></a>
+<span class="sourceLineNo">605</span> case WAITING_TIMEOUT:<a name="line.605"></a>
+<span class="sourceLineNo">606</span> waitingTimeoutList.add(proc);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> break;<a name="line.607"></a>
+<span class="sourceLineNo">608</span> case FAILED:<a name="line.608"></a>
+<span class="sourceLineNo">609</span> failedList.add(proc);<a name="line.609"></a>
+<span class="sourceLineNo">610</span> break;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> case ROLLEDBACK:<a name="line.611"></a>
+<span class="sourceLineNo">612</span> case INITIALIZING:<a name="line.612"></a>
+<span class="sourceLineNo">613</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.613"></a>
+<span class="sourceLineNo">614</span> LOG.error(msg);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> throw new UnsupportedOperationException(msg);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> default:<a name="line.616"></a>
+<span class="sourceLineNo">617</span> break;<a name="line.617"></a>
+<span class="sourceLineNo">618</span> }<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span> // 3. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.621"></a>
+<span class="sourceLineNo">622</span> waitingList.forEach(proc -> {<a name="line.622"></a>
+<span class="sourceLineNo">623</span> if (!proc.hasChildren()) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // Normally, WAITING procedures should be waken by its children.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // But, there is a case that, all the children are successful and before<a name="line.625"></a>
+<span class="sourceLineNo">626</span> // they can wake up their parent procedure, the master was killed.<a name="line.626"></a>
+<span class="sourceLineNo">627</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.627"></a>
+<span class="sourceLineNo">628</span> // are not loaded because of their SUCCESS state.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // So we need to continue to run this WAITING procedure. But before<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // will throw:<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.633"></a>
+<span class="sourceLineNo">634</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> runnableList.add(proc);<a name="line.635"></a>
+<span class="sourceLineNo">636</span> } else {<a name="line.636"></a>
+<span class="sourceLineNo">637</span> proc.afterReplay(getEnvironment());<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span> });<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span> // 4. Push the procedures to the timeout executor<a name="line.641"></a>
+<span class="sourceLineNo">642</span> waitingTimeoutList.forEach(proc -> {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> proc.afterReplay(getEnvironment());<a name="line.643"></a>
+<span class="sourceLineNo">644</span> timeoutExecutor.add(proc);<a name="line.644"></a>
+<span class="sourceLineNo">645</span> });<a name="line.645"></a>
+<span class="sourceLineNo">646</span> // 5. restore locks<a name="line.646"></a>
+<span class="sourceLineNo">647</span> restoreLocks();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> // 6. Push the procedure to the scheduler<a name="line.648"></a>
+<span class="sourceLineNo">649</span> failedList.forEach(scheduler::addBack);<a name="line.649"></a>
+<span class="sourceLineNo">650</span> runnableList.forEach(p -> {<a name="line.650"></a>
+<span class="sourceLineNo">651</span> p.afterReplay(getEnvironment());<a name="line.651"></a>
+<span class="sourceLineNo">652</span> if (!p.hasParent()) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> scheduler.addBack(p);<a name="line.655"></a>
+<span class="sourceLineNo">656</span> });<a name="line.656"></a>
+<span class="sourceLineNo">657</span> }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span> /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.660"></a>
+<span class="sourceLineNo">661</span> * <p/><a name="line.661"></a>
+<span class="sourceLineNo">662</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.662"></a>
+<span class="sourceLineNo">663</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.663"></a>
+<span class="sourceLineNo">664</span> * pending and in-progress procedures.<a name="line.664"></a>
+<span class="sourceLineNo">665</span> * @param numThreads number of threads available for procedure execution.<a name="line.665"></a>
+<span class="sourceLineNo">666</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.666"></a>
+<span class="sourceLineNo">667</span> * is found on replay. otherwise false.<a name="line.667"></a>
+<span class="sourceLineNo">668</span> */<a name="line.668"></a>
+<span class="sourceLineNo">669</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> // We have numThreads executor + one timer thread used for timing out<a name="line.670"></a>
+<span class="sourceLineNo">671</span> // procedures and triggering periodic procedures.<a name="line.671"></a>
+<span class="sourceLineNo">672</span> this.corePoolSize = numThreads;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> this.maxPoolSize = 10 * numThreads;<a name="line.673"></a>
+<span class="sourceLineNo">674</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.674"></a>
+<span class="sourceLineNo">675</span> corePoolSize, maxPoolSize);<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.677"></a>
+<span class="sourceLineNo">678</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span> // Create the workers<a name="line.680"></a>
+<span class="sourceLineNo">681</span> workerId.set(0);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.682"></a>
+<span class="sourceLineNo">683</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> long st, et;<a name="line.687"></a>
<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> long st, et;<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> // Acquire the store lease.<a name="line.691"></a>
-<span class="sourceLineNo">692</span> st = System.nanoTime();<a name="line.692"></a>
-<span class="sourceLineNo">693</span> store.recoverLease();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> et = System.nanoTime();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.695"></a>
-<span class="sourceLineNo">696</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span> // start the procedure scheduler<a name="line.698"></a>
-<span class="sourceLineNo">699</span> scheduler.start();<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> // TODO: Split in two steps.<a name="line.701"></a>
-<span class="sourceLineNo">702</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.702"></a>
-<span class="sourceLineNo">703</span> // The first one will make sure that we have the latest id,<a name="line.703"></a>
-<span class="sourceLineNo">704</span> // so we can start the threads and accept new procedures.<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // The second step will do the actual load of old procedures.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> st = System.nanoTime();<a name="line.706"></a>
-<span class="sourceLineNo">707</span> load(abortOnCorruption);<a name="line.707"></a>
-<span class="sourceLineNo">708</span> et = System.nanoTime();<a name="line.708"></a>
-<span class="sourceLineNo">709</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.709"></a>
-<span class="sourceLineNo">710</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.710"></a>
-<span class="sourceLineNo">711</span> }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></a>
-<span class="sourceLineNo">713</span> /**<a name="line.713"></a>
-<span class="sourceLineNo">714</span> * Start the workers.<a name="line.714"></a>
-<span class="sourceLineNo">715</span> */<a name="line.715"></a>
-<span class="sourceLineNo">716</span> public void startWorkers() throws IOException {<a name="line.716"></a>
-<span class="sourceLineNo">717</span> if (!running.compareAndSet(false, true)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Already running");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span> // Start the executors. Here we must have the lastProcId set.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.722"></a>
-<span class="sourceLineNo">723</span> timeoutExecutor.start();<a name="line.723"></a>
-<span class="sourceLineNo">724</span> for (WorkerThread worker: workerThreads) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span> worker.start();<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> // Internal chores<a name="line.728"></a>
-<span class="sourceLineNo">729</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span> // Add completed cleaner chore<a name="line.731"></a>
-<span class="sourceLineNo">732</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.732"></a>
-<span class="sourceLineNo">733</span> }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span> public void stop() {<a name="line.735"></a>
-<span class="sourceLineNo">736</span> if (!running.getAndSet(false)) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span> return;<a name="line.737"></a>
-<span class="sourceLineNo">738</span> }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span> LOG.info("Stopping");<a name="line.740"></a>
-<span class="sourceLineNo">741</span> scheduler.stop();<a name="line.741"></a>
-<span class="sourceLineNo">742</span> timeoutExecutor.sendStopSignal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> @VisibleForTesting<a name="line.745"></a>
-<span class="sourceLineNo">746</span> public void join() {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> assert !isRunning() : "expected not running";<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span> // stop the timeout executor<a name="line.749"></a>
-<span class="sourceLineNo">750</span> timeoutExecutor.awaitTermination();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span> // stop the worker threads<a name="line.752"></a>
-<span class="sourceLineNo">753</span> for (WorkerThread worker: workerThreads) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span> worker.awaitTermination();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span> // Destroy the Thread Group for the executors<a name="line.757"></a>
-<span class="sourceLineNo">758</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.758"></a>
-<span class="sourceLineNo">759</span> try {<a name="line.759"></a>
-<span class="sourceLineNo">760</span> threadGroup.destroy();<a name="line.760"></a>
-<span class="sourceLineNo">761</span> } catch (IllegalThreadStateException e) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.threadGroup, e.getMessage());<a name="line.763"></a>
-<span class="sourceLineNo">764</span> // This dumps list of threads on STDOUT.<a name="line.764"></a>
-<span class="sourceLineNo">765</span> this.threadGroup.list();<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span> // reset the in-memory state for testing<a name="line.768"></a>
-<span class="sourceLineNo">769</span> completed.clear();<a name="line.769"></a>
-<span class="sourceLineNo">770</span> rollbackStack.clear();<a name="line.770"></a>
-<span class="sourceLineNo">771</span> procedures.clear();<a name="line.771"></a>
-<span class="sourceLineNo">772</span> nonceKeysToProcIdsMap.clear();<a name="line.772"></a>
-<span class="sourceLineNo">773</span> scheduler.clear();<a name="line.773"></a>
-<span class="sourceLineNo">774</span> lastProcId.set(-1);<a name="line.774"></a>
-<span class="sourceLineNo">775</span> }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span> public void refreshConfiguration(final Configuration conf) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span> this.conf = conf;<a name="line.778"></a>
-<span class="sourceLineNo">779</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.779"></a>
-<span class="sourceLineNo">780</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span> }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">689</span> // Acquire the store lease.<a name="line.689"></a>
+<span class="sourceLineNo">690</span> st = System.nanoTime();<a name="line.690"></a>
+<span class="sourceLineNo">691</span> store.recoverLease();<a name="line.691"></a>
+<span class="sourceLineNo">692</span> et = System.nanoTime();<a name="line.692"></a>
+<span class="sourceLineNo">693</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.693"></a>
+<span class="sourceLineNo">694</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> // start the procedure scheduler<a name="line.696"></a>
+<span class="sourceLineNo">697</span> scheduler.start();<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> // TODO: Split in two steps.<a name="line.699"></a>
+<span class="sourceLineNo">700</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.700"></a>
+<span class="sourceLineNo">701</span> // The first one will make sure that we have the latest id,<a name="line.701"></a>
+<span class="sourceLineNo">702</span> // so we can start the threads and accept new procedures.<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // The second step will do the actual load of old procedures.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> st = System.nanoTime();<a name="line.704"></a>
+<span class="sourceLineNo">705</span> load(abortOnCorruption);<a name="line.705"></a>
+<span class="sourceLineNo">706</span> et = System.nanoTime();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.707"></a>
+<span class="sourceLineNo">708</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.708"></a>
+<span class="sourceLineNo">709</span> }<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span> /**<a name="line.711"></a>
+<span class="sourceLineNo">712</span> * Start the workers.<a name="line.712"></a>
+<span class="sourceLineNo">713</span> */<a name="line.713"></a>
+<span class="sourceLineNo">714</span> public void startWorkers() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span> if (!running.compareAndSet(false, true)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Already running");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> return;<a name="line.717"></a>
+<span class="sourceLineNo">718</span> }<a name="line.718"></a>
+<span class="sourceLineNo">719</span> // Start the executors. Here we must have the lastProcId set.<a name="line.719"></a>
+<span class="sourceLineNo">720</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.720"></a>
+<span class="sourceLineNo">721</span> timeoutExecutor.start();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (WorkerThread worker: workerThreads) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> worker.start();<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span> // Internal chores<a name="line.726"></a>
+<span class="sourceLineNo">727</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.727"></a>
+<span class="sourceLineNo">728</span><a name="line.728"></a>
+<span class="sourceLineNo">729</span> // Add completed cleaner chore<a name="line.729"></a>
+<span class="sourceLineNo">730</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.730"></a>
+<span class="sourceLineNo">731</span> }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span> public void stop() {<a name="line.733"></a>
+<span class="sourceLineNo">734</span> if (!running.getAndSet(false)) {<a name="line.734"></a>
+<span class="sourceLineNo">735</span> return;<a name="line.735"></a>
+<span class="sourceLineNo">736</span> }<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span> LOG.info("Stopping");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> scheduler.stop();<a name="line.739"></a>
+<span class="sourceLineNo">740</span> timeoutExecutor.sendStopSignal();<a name="line.740"></a>
+<span class="sourceLineNo">741</span> }<a name="line.741"></a>
+<span class="sourceLineNo">742</span><a name="line.742"></a>
+<span class="sourceLineNo">743</span> @VisibleForTesting<a name="line.743"></a>
+<span class="sourceLineNo">744</span> public void join() {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> assert !isRunning() : "expected not running";<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span> // stop the timeout executor<a name="line.747"></a>
+<span class="sourceLineNo">748</span> timeoutExecutor.awaitTermination();<a name="line.748"></a>
+<span class="sourceLineNo">749</span><a name="line.749"></a>
+<span class="sourceLineNo">750</span> // stop the worker threads<a name="line.750"></a>
+<span class="sourceLineNo">751</span> for (WorkerThread worker: workerThreads) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span> worker.awaitTermination();<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> // Destroy the Thread Group for the executors<a name="line.755"></a>
+<span class="sourceLineNo">756</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> try {<a name="line.757"></a>
+<span class="sourceLineNo">758</span> threadGroup.destroy();<a name="line.758"></a>
+<span class="sourceLineNo">759</span> } catch (IllegalThreadStateException e) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.threadGroup, e.getMessage());<a name="line.761"></a>
+<span class="sourceLineNo">762</span> // This dumps list of threads on STDOUT.<a name="line.762"></a>
+<span class="sourceLineNo">763</span> this.threadGroup.list();<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span><a name="line.765"></a>
+<span class="sourceLineNo">766</span> // reset the in-memory state for testing<a name="line.766"></a>
+<span class="sourceLineNo">767</span> completed.clear();<a name="line.767"></a>
+<span class="sourceLineNo">768</span> rollbackStack.clear();<a name="line.768"></a>
+<span class="sourceLineNo">769</span> procedures.clear();<a name="line.769"></a>
+<span class="sourceLineNo">770</span> nonceKeysToProcIdsMap.clear();<a name="line.770"></a>
+<span class="sourceLineNo">771</span> scheduler.clear();<a name="line.771"></a>
+<span class="sourceLineNo">772</span> lastProcId.set(-1);<a name="line.772"></a>
+<span class="sourceLineNo">773</span> }<a name="line.773"></a>
+<span class="sourceLineNo">774</span><a name="line.774"></a>
+<span class="sourceLineNo">775</span> public void refreshConfiguration(final Configuration conf) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span> this.conf = conf;<a name="line.776"></a>
+<span class="sourceLineNo">777</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.777"></a>
+<span class="sourceLineNo">778</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.778"></a>
+<span class="sourceLineNo">779</span> }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span> // ==========================================================================<a name="line.781"></a>
+<span class="sourceLineNo">782</span> // Accessors<a name="line.782"></a>
<span class="sourceLineNo">783</span> // ==========================================================================<a name="line.783"></a>
-<span class="sourceLineNo">784</span> // Accessors<a name="line.784"></a>
-<span class="sourceLineNo">785</span> // ==========================================================================<a name="line.785"></a>
-<span class="sourceLineNo">786</span> public boolean isRunning() {<a name="line.786"></a>
-<span class="sourceLineNo">787</span> return running.get();<a name="line.787"></a>
-<span class="sourceLineNo">788</span> }<a name="line.788"></a>
-<span class="sourceLineNo">789</span><a name="line.789"></a>
-<span class="sourceLineNo">790</span> /**<a name="line.790"></a>
-<span class="sourceLineNo">791</span> * @return the current number of worker threads.<a name="line.791"></a>
-<span class="sourceLineNo">792</span> */<a name="line.792"></a>
-<span class="sourceLineNo">793</span> public int getWorkerThreadCount() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span> return workerThreads.size();<a name="line.794"></a>
-<span class="sourceLineNo">795</span> }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span> /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span> * @return the core pool size settings.<a name="line.798"></a>
-<span class="sourceLineNo">799</span> */<a name="line.799"></a>
-<span class="sourceLineNo">800</span> public int getCorePoolSize() {<a name="line.800"></a>
-<span class="sourceLineNo">801</span> return corePoolSize;<a name="line.801"></a>
-<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span> public int getActiveExecutorCount() {<a name="line.804"></a>
-<span class="sourceLineNo">805</span> return activeExecutorCount.get();<a name="line.805"></a>
-<span class="sourceLineNo">806</span> }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span> public TEnvironment getEnvironment() {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.environment;<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> public ProcedureStore getStore() {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> return this.store;<a name="line.813"></a>
-<span class="sourceLineNo">814</span> }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span> ProcedureScheduler getScheduler() {<a name="line.816"></a>
-<span class="sourceLineNo">817</span> return scheduler;<a name="line.817"></a>
-<span class="sourceLineNo">818</span> }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.821"></a>
-<span class="sourceLineNo">822</span> this.scheduler.signalAll();<a name="line.822"></a>
-<span class="sourceLineNo">823</span> }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
+<span class="sourceLineNo">784</span> public boolean isRunning() {<a name="line.784"></a>
+<span class="sourceLineNo">785</span> return running.get();<a name="line.785"></a>
+<span class="sourceLineNo">786</span> }<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span> /**<a name="line.788"></a>
+<span class="sourceLineNo">789</span> * @return the current number of worker threads.<a name="line.789"></a>
+<span class="sourceLineNo">790</span> */<a name="line.790"></a>
+<span class="sourceLineNo">791</span> public int getWorkerThreadCount() {<a name="line.791"></a>
+<span class="sourceLineNo">792</span> return workerThreads.size();<a name="line.792"></a>
+<span class="sourceLineNo">793</span> }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span> * @return the core pool size settings.<a name="line.796"></a>
+<span class="sourceLineNo">797</span> */<a name="line.797"></a>
+<span class="sourceLineNo">798</span> public int getCorePoolSize() {<a name="line.798"></a>
+<span class="sourceLineNo">799</span> return corePoolSize;<a name="line.799"></a>
+<span class="sourceLineNo">800</span> }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span> public int getActiveExecutorCount() {<a name="line.802"></a>
+<span class="sourceLineNo">803</span> return activeExecutorCount.get();<a name="line.803"></a>
+<span class="sourceLineNo">804</span> }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span> public TEnvironment getEnvironment() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.environment;<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> public ProcedureStore getStore() {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> return this.store;<a name="line.811"></a>
+<span class="sourceLineNo">812</span> }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span> ProcedureScheduler getScheduler() {<a name="line.814"></a>
+<span class="sourceLineNo">815</span> return scheduler;<a name="line.815"></a>
+<span class="sourceLineNo">816</span> }<a name="line.816"></a>
+<span class="sourceLineNo">817</span><a name="line.817"></a>
+<span class="sourceLineNo">818</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.819"></a>
+<span class="sourceLineNo">820</span> this.scheduler.signalAll();<a name="line.820"></a>
+<span class="sourceLineNo">821</span> }<a name="line.821"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span><a name="line.826"></a>
+<span class="sourceLineNo">827</span> // ==========================================================================<a name="line.827"></a>
+<span class="sourceLineNo">828</span> // Submit/Remove Chores<a name="line.828"></a>
<span class="sourceLineNo">829</span> // ==========================================================================<a name="line.829"></a>
-<span class="sourceLineNo">830</span> // Submit/Remove Chores<a name="line.830"></a>
-<span class="sourceLineNo">831</span> // ==========================================================================<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span> * Add a chore procedure to the executor<a name="line.834"></a>
-<span class="sourceLineNo">835</span> * @param chore the chore to add<a name="line.835"></a>
-<span class="sourceLineNo">836</span> */<a name="line.836"></a>
-<span class="sourceLineNo">837</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.837"></a>
-<span class="sourceLineNo">838</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.838"></a>
-<span class="sourceLineNo">839</span> timeoutExecutor.add(chore);<a name="line.839"></a>
-<span class="sourceLineNo">840</span> }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span> /**<a name="line.842"></a>
-<span class="sourceLineNo">843</span> * Remove a chore procedure from the executor<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * @param chore the chore to remove<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return whether the chore is removed, or it will be removed later<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> chore.setState(ProcedureState.SUCCESS);<a name="line.848"></a>
-<span class="sourceLineNo">849</span> return timeoutExecutor.remove(chore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span> }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span> /**<a name="line.831"></a>
+<span class="sourceLineNo">832</span> * Add a chore procedure to the executor<a name="line.832"></a>
+<span class="sourceLineNo">833</span> * @param chore the chore to add<a name="line.833"></a>
+<span class="sourceLineNo">834</span> */<a name="line.834"></a>
+<span class="sourceLineNo">835</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.835"></a>
+<span class="sourceLineNo">836</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.836"></a>
+<span class="sourceLineNo">837</span> timeoutExecutor.add(chore);<a name="line.837"></a>
+<span class="sourceLineNo">838</span> }<a name="line.838"></a>
+<span class="sourceLineNo">839</span><a name="line.839"></a>
+<span class="sourceLineNo">840</span> /**<a name="line.840"></a>
+<span class="sourceLineNo">841</span> * Remove a chore procedure from the executor<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * @param chore the chore to remove<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return whether the chore is removed, or it will be removed later<a name="line.843"></a>
+<span class="sourceLineNo">844</span> */<a name="line.844"></a>
+<span class="sourceLineNo">845</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span> chore.setState(ProcedureState.SUCCESS);<a name="line.846"></a>
+<span class="sourceLineNo">847</span> return timeoutExecutor.remove(chore);<a name="line.847"></a>
+<span class="sourceLineNo">848</span> }<a name="line.848"></a>
+<span class="sourceLineNo">849</span><a name="line.849"></a>
+<span class="sourceLineNo">850</span> // ==========================================================================<a name="line.850"></a>
+<span class="sourceLineNo">851</span> // Nonce Procedure helpers<a name="line.851"></a>
<span class="sourceLineNo">852</span> // ==========================================================================<a name="line.852"></a>
-<span class="sourceLineNo">853</span> // Nonce Procedure helpers<a name="line.853"></a>
-<span class="sourceLineNo">854</span> // ==========================================================================<a name="line.854"></a>
-<span class="sourceLineNo">855</span> /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.856"></a>
-<span class="sourceLineNo">857</span> * @param nonceGroup<a name="line.857"></a>
-<span class="sourceLineNo">858</span> * @param nonce<a name="line.858"></a>
-<span class="sourceLineNo">859</span> * @return the generated NonceKey<a name="line.859"></a>
-<span class="sourceLineNo">860</span> */<a name="line.860"></a>
-<span class="sourceLineNo">861</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.862"></a>
-<span class="sourceLineNo">863</span> }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span> /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.866"></a>
-<span class="sourceLineNo">867</span> * A procId will be reserved and on submitProcedure(),<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.868"></a>
-<span class="sourceLineNo">869</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.870"></a>
-<span class="sourceLineNo">871</span> * and submit the procedure.<a name="line.871"></a>
-<span class="sourceLineNo">872</span> *<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.873"></a>
-<span class="sourceLineNo">874</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.874"></a>
-<span class="sourceLineNo">875</span> */<a name="line.875"></a>
-<span class="sourceLineNo">876</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> if (nonceKey == null) return -1;<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span> // check if we have already a Reserved ID for the nonce<a name="line.879"></a>
-<span class="sourceLineNo">880</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (oldProcId == null) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.882"></a>
-<span class="sourceLineNo">883</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.883"></a>
-<span class="sourceLineNo">884</span> final long newProcId = nextProcId();<a name="line.884"></a>
-<span class="sourceLineNo">885</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> if (oldProcId == null) return -1;<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span><a name="line.888"></a>
-<span class="sourceLineNo">889</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.889"></a>
-<span class="sourceLineNo">890</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.890"></a>
-<span class="sourceLineNo">891</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.891"></a>
-<span class="sourceLineNo">892</span> while (isRunning() &&<a name="line.892"></a>
-<span class="sourceLineNo">893</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.893"></a>
-<span class="sourceLineNo">894</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> if (traceEnabled) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.896"></a>
-<span class="sourceLineNo">897</span> }<a name="line.897"></a>
-<span class="sourceLineNo">898</span> Threads.sleep(100);<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span> return oldProcId.longValue();<a name="line.900"></a>
-<span class="sourceLineNo">901</span> }<a name="line.901"></a>
-<span class="sourceLineNo">902</span><a name="line.902"></a>
-<span class="sourceLineNo">903</span> /**<a name="line.903"></a>
-<span class="sourceLineNo">904</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.904"></a>
-<span class="sourceLineNo">905</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.905"></a>
-<span class="sourceLineNo">906</span> */<a name="line.906"></a>
-<span class="sourceLineNo">907</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.907"></a>
-<span class="sourceLineNo">908</span> if (nonceKey == null) return;<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.910"></a>
-<span class="sourceLineNo">911</span> if (procId == null) return;<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span> // if the procedure was not submitted, remove the nonce<a name="line.913"></a>
-<span class="sourceLineNo">914</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.915"></a>
-<span class="sourceLineNo">916</span> }<a name="line.916"></a>
-<span class="sourceLineNo">917</span> }<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.919"></a>
-<span class="sourceLineNo">920</span> private String procName;<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span> public FailedProcedure() {<a name="line.922"></a>
-<span class="sourceLineNo">923</span> }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.925"></a>
-<span class="sourceLineNo">926</span> NonceKey nonceKey, IOException exception) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span> this.procName = procName;<a name="line.927"></a>
-<span class="sourceLineNo">928</span> setProcId(procId);<a name="line.928"></a>
-<span class="sourceLineNo">929</span> setState(ProcedureState.ROLLEDBACK);<a name="line.929"></a>
-<span class="sourceLineNo">930</span> setOwner(owner);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> setNonceKey(nonceKey);<a name="line.931"></a>
-<span class="sourceLineNo">932</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.932"></a>
-<span class="sourceLineNo">933</span> setSubmittedTime(currentTime);<a name="line.933"></a>
-<span class="sourceLineNo">934</span> setLastUpdate(currentTime);<a name="line.934"></a>
-<span class="sourceLineNo">935</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.935"></a>
-<span class="sourceLineNo">936</span> }<a name="line.936"></a>
-<span class="sourceLineNo">937</span><a name="line.937"></a>
-<span class="sourceLineNo">938</span> @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span> public String getProcName() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span> return procName;<a name="line.940"></a>
-<span class="sourceLineNo">941</span> }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span> @Override<a name="line.943"></a>
-<span class="sourceLineNo">944</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.944"></a>
-<span class="sourceLineNo">945</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.945"></a>
-<span class="sourceLineNo">946</span> InterruptedException {<a name="line.946"></a>
-<span class="sourceLineNo">947</span> throw new UnsupportedOperationException();<a name="line.947"></a>
-<span class="sourceLineNo">948</span> }<a name="line.948"></a>
-<span class="sourceLineNo">949</span><a name="line.949"></a>
-<span class="sourceLineNo">950</span> @Override<a name="line.950"></a>
-<span class="sourceLineNo">951</span> protected void rollback(TEnvironment env)<a name="line.951"></a>
-<span class="sourceLineNo">952</span> throws IOException, InterruptedException {<a name="line.952"></a>
-<span class="sourceLineNo">953</span> throw new UnsupportedOperationException();<a name="line.953"></a>
-<span class="sourceLineNo">954</span> }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span> @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span> protected boolean abort(TEnvironment env) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span> throw new UnsupportedOperationException();<a name="line.958"></a>
-<span class="sourceLineNo">959</span> }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span> @Override<a name="line.961"></a>
-<span class="sourceLineNo">962</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.962"></a>
-<span class="sourceLineNo">963</span> throws IOException {<a name="line.963"></a>
-<span class="sourceLineNo">964</span> }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span> @Override<a name="line.966"></a>
-<span class="sourceLineNo">967</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.967"></a>
-<span class="sourceLineNo">968</span> throws IOException {<a name="line.968"></a>
-<span class="sourceLineNo">969</span> }<a name="line.969"></a>
-<span class="sourceLineNo">970</span> }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span> /**<a name="line.972"></a>
-<span class="sourceLineNo">973</span> * If the failure failed before submitting it, we may want to give back the<a name="line.973"></a>
-<span class="sourceLineNo">974</span> * same error to the requests with the same nonceKey.<a name="line.974"></a>
-<span class="sourceLineNo">975</span> *<a name="line.975"></a>
-<span class="sourceLineNo">976</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.976"></a>
-<span class="sourceLineNo">977</span> * @param procName name of the procedure, used to inform the user<a name="line.977"></a>
-<span class="sourceLineNo">978</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.978"></a>
-<span class="sourceLineNo">979</span> * @param exception the failure to report to the user<a name="line.979"></a>
-<span class="sourceLineNo">980</span> */<a name="line.980"></a>
-<span class="sourceLineNo">981</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.981"></a>
-<span class="sourceLineNo">982</span> IOException exception) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span> if (nonceKey == null) {<a name="line.983"></a>
-<span class="sourceLineNo">984</span> return;<a name="line.984"></a>
-<span class="sourceLineNo">985</span> }<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.987"></a>
-<span class="sourceLineNo">988</span> if (procId == null || completed.containsKey(procId)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span> return;<a name="line.989"></a>
-<span class="sourceLineNo">990</span> }<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span> Procedure<TEnvironment> proc =<a name="line.992"></a>
-<span class="sourceLineNo">993</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.993"></a>
-<span class="sourceLineNo">994</span><a name="line.994"></a>
-<span class="sourceLineNo">995</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.995"></a>
-<span class="sourceLineNo">996</span> }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">853</span> /**<a name="line.853"></a>
+<span class="sourceLineNo">854</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.854"></a>
+<span class="sourceLineNo">855</span> * @param nonceGroup<a name="line.855"></a>
+<span class="sourceLineNo">856</span> * @param nonce<a name="line.856"></a>
+<span class="sourceLineNo">857</span> * @return the generated NonceKey<a name="line.857"></a>
+<span class="sourceLineNo">858</span> */<a name="line.858"></a>
+<span class="sourceLineNo">859</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.860"></a>
+<span class="sourceLineNo">861</span> }<a name="line.861"></a>
+<span class="sourceLineNo">862</span><a name="line.862"></a>
+<span class="sourceLineNo">863</span> /**<a name="line.863"></a>
+<span class="sourceLineNo">864</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.864"></a>
+<span class="sourceLineNo">865</span> * A procId will be reserved and on submitProcedure(),<a name="line.865"></a>
+<span class="sourceLineNo">866</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.866"></a>
+<span class="sourceLineNo">867</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.867"></a>
+<span class="sourceLineNo">868</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.868"></a>
+<span class="sourceLineNo">869</span> * and submit the procedure.<a name="line.869"></a>
+<span class="sourceLineNo">870</span> *<a name="line.870"></a>
+<span class="sourceLineNo">871</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.871"></a>
+<span class="sourceLineNo">872</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.872"></a>
+<span class="sourceLineNo">873</span> */<a name="line.873"></a>
+<span class="sourceLineNo">874</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.874"></a>
+<span class="sourceLineNo">875</span> if (nonceKey == null) return -1;<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span> // check if we have already a Reserved ID for the nonce<a name="line.877"></a>
+<span class="sourceLineNo">878</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.878"></a>
+<span class="sourceLineNo">879</span> if (oldProcId == null) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.880"></a>
+<span class="sourceLineNo">881</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.881"></a>
+<span class="sourceLineNo">882</span> final long newProcId = nextProcId();<a name="line.882"></a>
+<span class="sourceLineNo">883</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.883"></a>
+<span class="sourceLineNo">884</span> if (oldProcId == null) return -1;<a name="line.884"></a>
+<span class="sourceLineNo">885</span> }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.887"></a>
+<span class="sourceLineNo">888</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.888"></a>
+<span class="sourceLineNo">889</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.889"></a>
+<span class="sourceLineNo">890</span> while (isRunning() &&<a name="line.890"></a>
+<span class="sourceLineNo">891</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.891"></a>
+<span class="sourceLineNo">892</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> if (traceEnabled) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> Threads.sleep(100);<a name="line.896"></a>
+<span class="sourceLineNo">897</span> }<a name="line.897"></a>
+<span class="sourceLineNo">898</span> return oldProcId.longValue();<a name="line.898"></a>
+<span class="sourceLineNo">899</span> }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span> /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.903"></a>
+<span class="sourceLineNo">904</span> */<a name="line.904"></a>
+<span class="sourceLineNo">905</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span> if (nonceKey == null) return;<a name="line.906"></a>
+<span class="sourceLineNo">907</span><a name="line.907"></a>
+<span class="sourceLineNo">908</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.908"></a>
+<span class="sourceLineNo">909</span> if (procId == null) return;<a name="line.909"></a>
+<span class="sourceLineNo">910</span><a name="line.910"></a>
+<span class="sourceLineNo">911</span> // if the procedure was not submitted, remove the nonce<a name="line.911"></a>
+<span class="sourceLineNo">912</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.912"></a>
+<span class="sourceLineNo">913</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.913"></a>
+<span class="sourceLineNo">914</span> }<a name="line.914"></a>
+<span class="sourceLineNo">915</span> }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.917"></a>
+<span class="sourceLineNo">918</span> private String procName;<a name="line.918"></a>
+<span class="sourceLineNo">919</span><a name="line.919"></a>
+<span class="sourceLineNo">920</span> public FailedProcedure() {<a name="line.920"></a>
+<span class="sourceLineNo">921</span> }<a name="line.921"></a>
+<span class="sourceLineNo">922</span><a name="line.922"></a>
+<span class="sourceLineNo">923</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.923"></a>
+<span class="sourceLineNo">924</span> NonceKey nonceKey, IOException exception) {<a name="line.924"></a>
+<span class="sourceLineNo">925</span> this.procName = procName;<a name="line.925"></a>
+<span class="sourceLineNo">926</span> setProcId(procId);<a name="line.926"></a>
+<span class="sourceLineNo">927</span> setState(ProcedureState.ROLLEDBACK);<a name="line.927"></a>
+<span class="sourceLineNo">928</span> setOwner(owner);<a name="line.928"></a>
+<span class="sourceLineNo">929</span> setNonceKey(nonceKey);<a name="line.929"></a>
+<span class="sourceLineNo">930</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.930"></a>
+<span class="sourceLineNo">931</span> setSubmittedTime(currentTime);<a name="line.931"></a>
+<span class="sourceLineNo">932</span> setLastUpdate(currentTime);<a name="line.932"></a>
+<span class="sourceLineNo">933</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.933"></a>
+<span class="sourceLineNo">934</span> }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span> @Override<a name="line.936"></a>
+<span class="sourceLineNo">937</span> public String getProcName() {<a name="line.937"></a>
+<span class="sourceLineNo">938</span> return procName;<a name="line.938"></a>
+<span class="sourceLineNo">939</span> }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span> @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.942"></a>
+<span class="sourceLineNo">943</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.943"></a>
+<span class="sourceLineNo">944</span> InterruptedException {<a name="line.944"></a>
+<span class="sourceLineNo">945</span> throw new UnsupportedOperationException();<a name="line.945"></a>
+<span class="sourceLineNo">946</span> }<a name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span> @Override<a name="line.948"></a>
+<span class="sourceLineNo">949</span> protected void rollback(TEnvironment env)<a name="line.949"></a>
+<span class="sourceLineNo">950</span> throws IOException, InterruptedException {<a name="line.950"></a>
+<span class="sourceLineNo">951</span> throw new UnsupportedOperationException();<a name="line.951"></a>
+<span class="sourceLineNo">952</span> }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span> @Override<a name="line.954"></a>
+<span class="sourceLineNo">955</span> protected boolean abort(TEnvironment env) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span> throw new UnsupportedOperationException();<a name="line.956"></a>
+<span class="sourceLineNo">957</span> }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span> @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.960"></a>
+<span class="sourceLineNo">961</span> throws IOException {<a name="line.961"></a>
+<span class="sourceLineNo">962</span> }<a name="line.962"></a>
+<span class="sourceLineNo">963</span><a name="line.963"></a>
+<span class="sourceLineNo">964</span> @Override<a name="line.964"></a>
+<span class="sourceLineNo">965</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.965"></a>
+<span class="sourceLineNo">966</span> throws IOException {<a name="line.966"></a>
+<span class="sourceLineNo">967</span> }<a name="line.967"></a>
+<span class="sourceLineNo">968</span> }<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span> /**<a name="line.970"></a>
+<span class="sourceLineNo">971</span> * If the failure failed before submitting it, we may want to give back the<a name="line.971"></a>
+<span class="sourceLineNo">972</span> * same error to the requests with the same nonceKey.<a name="line.972"></a>
+<span class="sourceLineNo">973</span> *<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * @param procName name of the procedure, used to inform the user<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * @param exception the failure to report to the user<a name="line.977"></a>
+<span class="sourceLineNo">978</span> */<a name="line.978"></a>
+<span class="sourceLineNo">979</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.979"></a>
+<span class="sourceLineNo">980</span> IOException exception) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span> if (nonceKey == null) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span> return;<a name="line.982"></a>
+<span class="sourceLineNo">983</span> }<a name="line.983"></a>
+<span class="sourceLineNo">984</span><a name="line.984"></a>
+<span class="sourceLineNo">985</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.985"></a>
+<span class="sourceLineNo">986</span> if (procId == null || completed.containsKey(procId)) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span> return;<a name="line.987"></a>
+<span class="sourceLineNo">988</span> }<a name="line.988"></a>
+<span class="sourceLineNo">989</span><a name="line.989"></a>
+<span class="sourceLineNo">990</span> Procedure<TEnvironment> proc =<a name="line.990"></a>
+<span class="sourceLineNo">991</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.991"></a>
+<span class="sourceLineNo">992</span><a name="line.992"></a>
+<span class="sourceLineNo">993</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.993"></a>
+<span class="sourceLineNo">994</span> }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span> // ==========================================================================<a name="line.996"></a>
+<span class="sourceLineNo">997</span> // Submit/Abort Procedure<a name="line.997"></a>
<span class="sourceLineNo">998</span> // ==========================================================================<a name="line.998"></a>
-<span class="sourceLineNo">999</span> // Submit/Abort Procedure<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> // ==========================================================================<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> /**<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> * Add a new root-procedure to the executor.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> * @param proc the new procedure to execute.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> * @return the procedure id, that can be used to monitor the operation<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> */<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> public long submitProcedure(Procedure<TEnvironment> proc) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> return submitProcedure(proc, null);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span><a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> /**<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> * Bypass a procedure. If the procedure is set to bypass, all the logic in<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> * execute/rollback will be ignored and it will return success, whatever.<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> * It is used to recover buggy stuck procedures, releasing the lock resources<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> * and letting other procedures run. Bypassing one procedure (and its ancestors will<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> * be bypassed automatically) may leave the cluster in a middle state, e.g. region<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> * not assigned, or some hdfs files left behind. After getting rid of those stuck procedures,<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> * the operators may have to do some clean up on hdfs or schedule some assign procedures<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> * to let region online. DO AT YOUR OWN RISK.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> * <p><a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> * A procedure can be bypassed only if<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span> * 1. The procedure is in state of RUNNABLE, WAITING, WAITING_TIMEOUT<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> * or it is a root procedure without any child.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * 2. No other worker thread is executing it<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> * 3. No child procedure has been submitted<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> *<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> * <p><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> * If all the requirements are meet, the procedure and its ancestors will be<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> * bypassed and persisted to WAL.<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> *<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span> * <p><a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> * If the procedure is in WAITING state, will set it to RUNNABLE add it to run queue.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> * TODO: What about WAITING_TIMEOUT?<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> * @param pids the procedure id<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> * @param lockWait time to wait lock<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> * @param force if force set to true, we will bypass the procedure even if it is executing.<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> * This is for procedures which can't break out during executing(due to bug, mostly)<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> * In this case, bypassing the procedure is not enough, since it is already stuck<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> * there. We need to restart the master after bypassing, and letting the problematic<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span> * procedure to execute wth bypass=true, so in that condition, the procedure can be<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> * successfully bypassed.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> * @param recursive We will do an expensive search for children of each pid. EXPENSIVE!<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> * @return true if bypass success<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> * @throws IOException IOException<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span> */<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> public List<Boolean> bypassProcedure(List<Long> pids, long lockWait, boolean force,<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span> boolean recursive)<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> throws IOException {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> List<Boolean> result = new ArrayList<Boolean>(pids.size());<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> for(long pid: pids) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span> result.add(bypassProcedure(pid, lockWait, force, recursive));<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> return result;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span> }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> boolean bypassProcedure(long pid, long lockWait, boolean override, boolean recursive)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span> throws IOException {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> Preconditions.checkArgument(lockWait > 0, "lockWait should be positive");<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span> final Procedure<TEnvironment> procedure = getProcedure(pid);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span> if (procedure == null) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> LOG.debug("Procedure pid={} does not exist, skipping bypass", pid);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> return false;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span> }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span><a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> LOG.debug("Begin bypass {} with lockWait={}, override={}, recursive={}",<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span> procedure, lockWait, override, recursive);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> IdLock.Entry lockEntry = procExecutionLock.tryLockEntry(procedure.getProcId(), lockWait);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> if (lockEntry == null && !override) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> LOG.debug("Waited {} ms, but {} is still running, skipping bypass with force={}",<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> lockWait, procedure, override);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> } else if (lockEntry == null) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> LOG.debug("Waited {} ms, but {} is still running, begin bypass with force={}",<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span> lockWait, procedure, override);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // check whether the procedure is already finished<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> if (procedure.isFinished()) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> LOG.debug("{} is already finished, skipping bypass", procedure);<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> return false;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> if (procedure.hasChildren()) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> if (recursive) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> // EXPENSIVE. Checks each live procedure of which there could be many!!!<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span> // Is there another way to get children of a procedure?<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> LOG.info("Recursive bypass on children of pid={}", procedure.getProcId());<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> this.procedures.forEachValue(1 /*Single-threaded*/,<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> // Transformer<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> v -> v.getParentProcId() == procedure.getProcId()? v: null,<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> // Consumer<a name="line
<TRUNCATED>
[22/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
index 688bd4e..37bf508 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html
@@ -589,1651 +589,1649 @@
<span class="sourceLineNo">581</span> LOG.debug("Loading {}", proc);<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span> Long rootProcId = getRootProcedureId(proc);<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (rootProcId == null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.585"></a>
-<span class="sourceLineNo">586</span> scheduler.addBack(proc);<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (proc.hasParent()) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.591"></a>
-<span class="sourceLineNo">592</span> // corrupted procedures are handled later at step 3<a name="line.592"></a>
-<span class="sourceLineNo">593</span> if (parent != null && !proc.isFinished()) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> parent.incChildrenLatch();<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.598"></a>
-<span class="sourceLineNo">599</span> procStack.loadStack(proc);<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span> proc.setRootProcId(rootProcId);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> switch (proc.getState()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> case RUNNABLE:<a name="line.603"></a>
-<span class="sourceLineNo">604</span> runnableList.add(proc);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> break;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> case WAITING:<a name="line.606"></a>
-<span class="sourceLineNo">607</span> waitingList.add(proc);<a name="line.607"></a>
-<span class="sourceLineNo">608</span> break;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> case WAITING_TIMEOUT:<a name="line.609"></a>
-<span class="sourceLineNo">610</span> waitingTimeoutList.add(proc);<a name="line.610"></a>
-<span class="sourceLineNo">611</span> break;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> case FAILED:<a name="line.612"></a>
-<span class="sourceLineNo">613</span> failedList.add(proc);<a name="line.613"></a>
-<span class="sourceLineNo">614</span> break;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> case ROLLEDBACK:<a name="line.615"></a>
-<span class="sourceLineNo">616</span> case INITIALIZING:<a name="line.616"></a>
-<span class="sourceLineNo">617</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> LOG.error(msg);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throw new UnsupportedOperationException(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> default:<a name="line.620"></a>
-<span class="sourceLineNo">621</span> break;<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> // 4. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> waitingList.forEach(proc -> {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> if (!proc.hasChildren()) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> // Normally, WAITING procedures should be waken by its children.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> // But, there is a case that, all the children are successful and before<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // they can wake up their parent procedure, the master was killed.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // are not loaded because of their SUCCESS state.<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // So we need to continue to run this WAITING procedure. But before<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // will throw:<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.637"></a>
-<span class="sourceLineNo">638</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> runnableList.add(proc);<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span> });<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span> // 5. Push the procedures to the timeout executor<a name="line.643"></a>
-<span class="sourceLineNo">644</span> waitingTimeoutList.forEach(proc -> {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> proc.afterReplay(getEnvironment());<a name="line.645"></a>
-<span class="sourceLineNo">646</span> timeoutExecutor.add(proc);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> });<a name="line.647"></a>
-<span class="sourceLineNo">648</span> // 6. restore locks<a name="line.648"></a>
-<span class="sourceLineNo">649</span> restoreLocks();<a name="line.649"></a>
-<span class="sourceLineNo">650</span> // 7. Push the procedure to the scheduler<a name="line.650"></a>
-<span class="sourceLineNo">651</span> failedList.forEach(scheduler::addBack);<a name="line.651"></a>
-<span class="sourceLineNo">652</span> runnableList.forEach(p -> {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> p.afterReplay(getEnvironment());<a name="line.653"></a>
-<span class="sourceLineNo">654</span> if (!p.hasParent()) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.655"></a>
-<span class="sourceLineNo">656</span> }<a name="line.656"></a>
-<span class="sourceLineNo">657</span> scheduler.addBack(p);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> });<a name="line.658"></a>
-<span class="sourceLineNo">659</span> }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span> /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.662"></a>
-<span class="sourceLineNo">663</span> * <p/><a name="line.663"></a>
-<span class="sourceLineNo">664</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.664"></a>
-<span class="sourceLineNo">665</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.665"></a>
-<span class="sourceLineNo">666</span> * pending and in-progress procedures.<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * @param numThreads number of threads available for procedure execution.<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * is found on replay. otherwise false.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> // We have numThreads executor + one timer thread used for timing out<a name="line.672"></a>
-<span class="sourceLineNo">673</span> // procedures and triggering periodic procedures.<a name="line.673"></a>
-<span class="sourceLineNo">674</span> this.corePoolSize = numThreads;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> this.maxPoolSize = 10 * numThreads;<a name="line.675"></a>
-<span class="sourceLineNo">676</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.676"></a>
-<span class="sourceLineNo">677</span> corePoolSize, maxPoolSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.679"></a>
-<span class="sourceLineNo">680</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span> // Create the workers<a name="line.682"></a>
-<span class="sourceLineNo">683</span> workerId.set(0);<a name="line.683"></a>
-<span class="sourceLineNo">684</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.684"></a>
-<span class="sourceLineNo">685</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">584</span> // The orphan procedures will be passed to handleCorrupted, so add an assert here<a name="line.584"></a>
+<span class="sourceLineNo">585</span> assert rootProcId != null;<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (proc.hasParent()) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.588"></a>
+<span class="sourceLineNo">589</span> if (parent != null && !proc.isFinished()) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> parent.incChildrenLatch();<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> procStack.loadStack(proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span> proc.setRootProcId(rootProcId);<a name="line.597"></a>
+<span class="sourceLineNo">598</span> switch (proc.getState()) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> case RUNNABLE:<a name="line.599"></a>
+<span class="sourceLineNo">600</span> runnableList.add(proc);<a name="line.600"></a>
+<span class="sourceLineNo">601</span> break;<a name="line.601"></a>
+<span class="sourceLineNo">602</span> case WAITING:<a name="line.602"></a>
+<span class="sourceLineNo">603</span> waitingList.add(proc);<a name="line.603"></a>
+<span class="sourceLineNo">604</span> break;<a name="line.604"></a>
+<span class="sourceLineNo">605</span> case WAITING_TIMEOUT:<a name="line.605"></a>
+<span class="sourceLineNo">606</span> waitingTimeoutList.add(proc);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> break;<a name="line.607"></a>
+<span class="sourceLineNo">608</span> case FAILED:<a name="line.608"></a>
+<span class="sourceLineNo">609</span> failedList.add(proc);<a name="line.609"></a>
+<span class="sourceLineNo">610</span> break;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> case ROLLEDBACK:<a name="line.611"></a>
+<span class="sourceLineNo">612</span> case INITIALIZING:<a name="line.612"></a>
+<span class="sourceLineNo">613</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.613"></a>
+<span class="sourceLineNo">614</span> LOG.error(msg);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> throw new UnsupportedOperationException(msg);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> default:<a name="line.616"></a>
+<span class="sourceLineNo">617</span> break;<a name="line.617"></a>
+<span class="sourceLineNo">618</span> }<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span> // 3. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.621"></a>
+<span class="sourceLineNo">622</span> waitingList.forEach(proc -> {<a name="line.622"></a>
+<span class="sourceLineNo">623</span> if (!proc.hasChildren()) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // Normally, WAITING procedures should be waken by its children.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // But, there is a case that, all the children are successful and before<a name="line.625"></a>
+<span class="sourceLineNo">626</span> // they can wake up their parent procedure, the master was killed.<a name="line.626"></a>
+<span class="sourceLineNo">627</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.627"></a>
+<span class="sourceLineNo">628</span> // are not loaded because of their SUCCESS state.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // So we need to continue to run this WAITING procedure. But before<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // will throw:<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.633"></a>
+<span class="sourceLineNo">634</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> runnableList.add(proc);<a name="line.635"></a>
+<span class="sourceLineNo">636</span> } else {<a name="line.636"></a>
+<span class="sourceLineNo">637</span> proc.afterReplay(getEnvironment());<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span> });<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span> // 4. Push the procedures to the timeout executor<a name="line.641"></a>
+<span class="sourceLineNo">642</span> waitingTimeoutList.forEach(proc -> {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> proc.afterReplay(getEnvironment());<a name="line.643"></a>
+<span class="sourceLineNo">644</span> timeoutExecutor.add(proc);<a name="line.644"></a>
+<span class="sourceLineNo">645</span> });<a name="line.645"></a>
+<span class="sourceLineNo">646</span> // 5. restore locks<a name="line.646"></a>
+<span class="sourceLineNo">647</span> restoreLocks();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> // 6. Push the procedure to the scheduler<a name="line.648"></a>
+<span class="sourceLineNo">649</span> failedList.forEach(scheduler::addBack);<a name="line.649"></a>
+<span class="sourceLineNo">650</span> runnableList.forEach(p -> {<a name="line.650"></a>
+<span class="sourceLineNo">651</span> p.afterReplay(getEnvironment());<a name="line.651"></a>
+<span class="sourceLineNo">652</span> if (!p.hasParent()) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> scheduler.addBack(p);<a name="line.655"></a>
+<span class="sourceLineNo">656</span> });<a name="line.656"></a>
+<span class="sourceLineNo">657</span> }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span> /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.660"></a>
+<span class="sourceLineNo">661</span> * <p/><a name="line.661"></a>
+<span class="sourceLineNo">662</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.662"></a>
+<span class="sourceLineNo">663</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.663"></a>
+<span class="sourceLineNo">664</span> * pending and in-progress procedures.<a name="line.664"></a>
+<span class="sourceLineNo">665</span> * @param numThreads number of threads available for procedure execution.<a name="line.665"></a>
+<span class="sourceLineNo">666</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.666"></a>
+<span class="sourceLineNo">667</span> * is found on replay. otherwise false.<a name="line.667"></a>
+<span class="sourceLineNo">668</span> */<a name="line.668"></a>
+<span class="sourceLineNo">669</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> // We have numThreads executor + one timer thread used for timing out<a name="line.670"></a>
+<span class="sourceLineNo">671</span> // procedures and triggering periodic procedures.<a name="line.671"></a>
+<span class="sourceLineNo">672</span> this.corePoolSize = numThreads;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> this.maxPoolSize = 10 * numThreads;<a name="line.673"></a>
+<span class="sourceLineNo">674</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.674"></a>
+<span class="sourceLineNo">675</span> corePoolSize, maxPoolSize);<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.677"></a>
+<span class="sourceLineNo">678</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span> // Create the workers<a name="line.680"></a>
+<span class="sourceLineNo">681</span> workerId.set(0);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.682"></a>
+<span class="sourceLineNo">683</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> long st, et;<a name="line.687"></a>
<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> long st, et;<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> // Acquire the store lease.<a name="line.691"></a>
-<span class="sourceLineNo">692</span> st = System.nanoTime();<a name="line.692"></a>
-<span class="sourceLineNo">693</span> store.recoverLease();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> et = System.nanoTime();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.695"></a>
-<span class="sourceLineNo">696</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span> // start the procedure scheduler<a name="line.698"></a>
-<span class="sourceLineNo">699</span> scheduler.start();<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> // TODO: Split in two steps.<a name="line.701"></a>
-<span class="sourceLineNo">702</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.702"></a>
-<span class="sourceLineNo">703</span> // The first one will make sure that we have the latest id,<a name="line.703"></a>
-<span class="sourceLineNo">704</span> // so we can start the threads and accept new procedures.<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // The second step will do the actual load of old procedures.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> st = System.nanoTime();<a name="line.706"></a>
-<span class="sourceLineNo">707</span> load(abortOnCorruption);<a name="line.707"></a>
-<span class="sourceLineNo">708</span> et = System.nanoTime();<a name="line.708"></a>
-<span class="sourceLineNo">709</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.709"></a>
-<span class="sourceLineNo">710</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.710"></a>
-<span class="sourceLineNo">711</span> }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></a>
-<span class="sourceLineNo">713</span> /**<a name="line.713"></a>
-<span class="sourceLineNo">714</span> * Start the workers.<a name="line.714"></a>
-<span class="sourceLineNo">715</span> */<a name="line.715"></a>
-<span class="sourceLineNo">716</span> public void startWorkers() throws IOException {<a name="line.716"></a>
-<span class="sourceLineNo">717</span> if (!running.compareAndSet(false, true)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Already running");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span> // Start the executors. Here we must have the lastProcId set.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.722"></a>
-<span class="sourceLineNo">723</span> timeoutExecutor.start();<a name="line.723"></a>
-<span class="sourceLineNo">724</span> for (WorkerThread worker: workerThreads) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span> worker.start();<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> // Internal chores<a name="line.728"></a>
-<span class="sourceLineNo">729</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span> // Add completed cleaner chore<a name="line.731"></a>
-<span class="sourceLineNo">732</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.732"></a>
-<span class="sourceLineNo">733</span> }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span> public void stop() {<a name="line.735"></a>
-<span class="sourceLineNo">736</span> if (!running.getAndSet(false)) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span> return;<a name="line.737"></a>
-<span class="sourceLineNo">738</span> }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span> LOG.info("Stopping");<a name="line.740"></a>
-<span class="sourceLineNo">741</span> scheduler.stop();<a name="line.741"></a>
-<span class="sourceLineNo">742</span> timeoutExecutor.sendStopSignal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> @VisibleForTesting<a name="line.745"></a>
-<span class="sourceLineNo">746</span> public void join() {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> assert !isRunning() : "expected not running";<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span> // stop the timeout executor<a name="line.749"></a>
-<span class="sourceLineNo">750</span> timeoutExecutor.awaitTermination();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span> // stop the worker threads<a name="line.752"></a>
-<span class="sourceLineNo">753</span> for (WorkerThread worker: workerThreads) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span> worker.awaitTermination();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span> // Destroy the Thread Group for the executors<a name="line.757"></a>
-<span class="sourceLineNo">758</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.758"></a>
-<span class="sourceLineNo">759</span> try {<a name="line.759"></a>
-<span class="sourceLineNo">760</span> threadGroup.destroy();<a name="line.760"></a>
-<span class="sourceLineNo">761</span> } catch (IllegalThreadStateException e) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.threadGroup, e.getMessage());<a name="line.763"></a>
-<span class="sourceLineNo">764</span> // This dumps list of threads on STDOUT.<a name="line.764"></a>
-<span class="sourceLineNo">765</span> this.threadGroup.list();<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span> // reset the in-memory state for testing<a name="line.768"></a>
-<span class="sourceLineNo">769</span> completed.clear();<a name="line.769"></a>
-<span class="sourceLineNo">770</span> rollbackStack.clear();<a name="line.770"></a>
-<span class="sourceLineNo">771</span> procedures.clear();<a name="line.771"></a>
-<span class="sourceLineNo">772</span> nonceKeysToProcIdsMap.clear();<a name="line.772"></a>
-<span class="sourceLineNo">773</span> scheduler.clear();<a name="line.773"></a>
-<span class="sourceLineNo">774</span> lastProcId.set(-1);<a name="line.774"></a>
-<span class="sourceLineNo">775</span> }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span> public void refreshConfiguration(final Configuration conf) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span> this.conf = conf;<a name="line.778"></a>
-<span class="sourceLineNo">779</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.779"></a>
-<span class="sourceLineNo">780</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span> }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">689</span> // Acquire the store lease.<a name="line.689"></a>
+<span class="sourceLineNo">690</span> st = System.nanoTime();<a name="line.690"></a>
+<span class="sourceLineNo">691</span> store.recoverLease();<a name="line.691"></a>
+<span class="sourceLineNo">692</span> et = System.nanoTime();<a name="line.692"></a>
+<span class="sourceLineNo">693</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.693"></a>
+<span class="sourceLineNo">694</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> // start the procedure scheduler<a name="line.696"></a>
+<span class="sourceLineNo">697</span> scheduler.start();<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> // TODO: Split in two steps.<a name="line.699"></a>
+<span class="sourceLineNo">700</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.700"></a>
+<span class="sourceLineNo">701</span> // The first one will make sure that we have the latest id,<a name="line.701"></a>
+<span class="sourceLineNo">702</span> // so we can start the threads and accept new procedures.<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // The second step will do the actual load of old procedures.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> st = System.nanoTime();<a name="line.704"></a>
+<span class="sourceLineNo">705</span> load(abortOnCorruption);<a name="line.705"></a>
+<span class="sourceLineNo">706</span> et = System.nanoTime();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.707"></a>
+<span class="sourceLineNo">708</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.708"></a>
+<span class="sourceLineNo">709</span> }<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span> /**<a name="line.711"></a>
+<span class="sourceLineNo">712</span> * Start the workers.<a name="line.712"></a>
+<span class="sourceLineNo">713</span> */<a name="line.713"></a>
+<span class="sourceLineNo">714</span> public void startWorkers() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span> if (!running.compareAndSet(false, true)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Already running");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> return;<a name="line.717"></a>
+<span class="sourceLineNo">718</span> }<a name="line.718"></a>
+<span class="sourceLineNo">719</span> // Start the executors. Here we must have the lastProcId set.<a name="line.719"></a>
+<span class="sourceLineNo">720</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.720"></a>
+<span class="sourceLineNo">721</span> timeoutExecutor.start();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (WorkerThread worker: workerThreads) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> worker.start();<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span> // Internal chores<a name="line.726"></a>
+<span class="sourceLineNo">727</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.727"></a>
+<span class="sourceLineNo">728</span><a name="line.728"></a>
+<span class="sourceLineNo">729</span> // Add completed cleaner chore<a name="line.729"></a>
+<span class="sourceLineNo">730</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.730"></a>
+<span class="sourceLineNo">731</span> }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span> public void stop() {<a name="line.733"></a>
+<span class="sourceLineNo">734</span> if (!running.getAndSet(false)) {<a name="line.734"></a>
+<span class="sourceLineNo">735</span> return;<a name="line.735"></a>
+<span class="sourceLineNo">736</span> }<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span> LOG.info("Stopping");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> scheduler.stop();<a name="line.739"></a>
+<span class="sourceLineNo">740</span> timeoutExecutor.sendStopSignal();<a name="line.740"></a>
+<span class="sourceLineNo">741</span> }<a name="line.741"></a>
+<span class="sourceLineNo">742</span><a name="line.742"></a>
+<span class="sourceLineNo">743</span> @VisibleForTesting<a name="line.743"></a>
+<span class="sourceLineNo">744</span> public void join() {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> assert !isRunning() : "expected not running";<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span> // stop the timeout executor<a name="line.747"></a>
+<span class="sourceLineNo">748</span> timeoutExecutor.awaitTermination();<a name="line.748"></a>
+<span class="sourceLineNo">749</span><a name="line.749"></a>
+<span class="sourceLineNo">750</span> // stop the worker threads<a name="line.750"></a>
+<span class="sourceLineNo">751</span> for (WorkerThread worker: workerThreads) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span> worker.awaitTermination();<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> // Destroy the Thread Group for the executors<a name="line.755"></a>
+<span class="sourceLineNo">756</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> try {<a name="line.757"></a>
+<span class="sourceLineNo">758</span> threadGroup.destroy();<a name="line.758"></a>
+<span class="sourceLineNo">759</span> } catch (IllegalThreadStateException e) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.threadGroup, e.getMessage());<a name="line.761"></a>
+<span class="sourceLineNo">762</span> // This dumps list of threads on STDOUT.<a name="line.762"></a>
+<span class="sourceLineNo">763</span> this.threadGroup.list();<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span><a name="line.765"></a>
+<span class="sourceLineNo">766</span> // reset the in-memory state for testing<a name="line.766"></a>
+<span class="sourceLineNo">767</span> completed.clear();<a name="line.767"></a>
+<span class="sourceLineNo">768</span> rollbackStack.clear();<a name="line.768"></a>
+<span class="sourceLineNo">769</span> procedures.clear();<a name="line.769"></a>
+<span class="sourceLineNo">770</span> nonceKeysToProcIdsMap.clear();<a name="line.770"></a>
+<span class="sourceLineNo">771</span> scheduler.clear();<a name="line.771"></a>
+<span class="sourceLineNo">772</span> lastProcId.set(-1);<a name="line.772"></a>
+<span class="sourceLineNo">773</span> }<a name="line.773"></a>
+<span class="sourceLineNo">774</span><a name="line.774"></a>
+<span class="sourceLineNo">775</span> public void refreshConfiguration(final Configuration conf) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span> this.conf = conf;<a name="line.776"></a>
+<span class="sourceLineNo">777</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.777"></a>
+<span class="sourceLineNo">778</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.778"></a>
+<span class="sourceLineNo">779</span> }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span> // ==========================================================================<a name="line.781"></a>
+<span class="sourceLineNo">782</span> // Accessors<a name="line.782"></a>
<span class="sourceLineNo">783</span> // ==========================================================================<a name="line.783"></a>
-<span class="sourceLineNo">784</span> // Accessors<a name="line.784"></a>
-<span class="sourceLineNo">785</span> // ==========================================================================<a name="line.785"></a>
-<span class="sourceLineNo">786</span> public boolean isRunning() {<a name="line.786"></a>
-<span class="sourceLineNo">787</span> return running.get();<a name="line.787"></a>
-<span class="sourceLineNo">788</span> }<a name="line.788"></a>
-<span class="sourceLineNo">789</span><a name="line.789"></a>
-<span class="sourceLineNo">790</span> /**<a name="line.790"></a>
-<span class="sourceLineNo">791</span> * @return the current number of worker threads.<a name="line.791"></a>
-<span class="sourceLineNo">792</span> */<a name="line.792"></a>
-<span class="sourceLineNo">793</span> public int getWorkerThreadCount() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span> return workerThreads.size();<a name="line.794"></a>
-<span class="sourceLineNo">795</span> }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span> /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span> * @return the core pool size settings.<a name="line.798"></a>
-<span class="sourceLineNo">799</span> */<a name="line.799"></a>
-<span class="sourceLineNo">800</span> public int getCorePoolSize() {<a name="line.800"></a>
-<span class="sourceLineNo">801</span> return corePoolSize;<a name="line.801"></a>
-<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span> public int getActiveExecutorCount() {<a name="line.804"></a>
-<span class="sourceLineNo">805</span> return activeExecutorCount.get();<a name="line.805"></a>
-<span class="sourceLineNo">806</span> }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span> public TEnvironment getEnvironment() {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.environment;<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> public ProcedureStore getStore() {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> return this.store;<a name="line.813"></a>
-<span class="sourceLineNo">814</span> }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span> ProcedureScheduler getScheduler() {<a name="line.816"></a>
-<span class="sourceLineNo">817</span> return scheduler;<a name="line.817"></a>
-<span class="sourceLineNo">818</span> }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.821"></a>
-<span class="sourceLineNo">822</span> this.scheduler.signalAll();<a name="line.822"></a>
-<span class="sourceLineNo">823</span> }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
+<span class="sourceLineNo">784</span> public boolean isRunning() {<a name="line.784"></a>
+<span class="sourceLineNo">785</span> return running.get();<a name="line.785"></a>
+<span class="sourceLineNo">786</span> }<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span> /**<a name="line.788"></a>
+<span class="sourceLineNo">789</span> * @return the current number of worker threads.<a name="line.789"></a>
+<span class="sourceLineNo">790</span> */<a name="line.790"></a>
+<span class="sourceLineNo">791</span> public int getWorkerThreadCount() {<a name="line.791"></a>
+<span class="sourceLineNo">792</span> return workerThreads.size();<a name="line.792"></a>
+<span class="sourceLineNo">793</span> }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span> * @return the core pool size settings.<a name="line.796"></a>
+<span class="sourceLineNo">797</span> */<a name="line.797"></a>
+<span class="sourceLineNo">798</span> public int getCorePoolSize() {<a name="line.798"></a>
+<span class="sourceLineNo">799</span> return corePoolSize;<a name="line.799"></a>
+<span class="sourceLineNo">800</span> }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span> public int getActiveExecutorCount() {<a name="line.802"></a>
+<span class="sourceLineNo">803</span> return activeExecutorCount.get();<a name="line.803"></a>
+<span class="sourceLineNo">804</span> }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span> public TEnvironment getEnvironment() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.environment;<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> public ProcedureStore getStore() {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> return this.store;<a name="line.811"></a>
+<span class="sourceLineNo">812</span> }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span> ProcedureScheduler getScheduler() {<a name="line.814"></a>
+<span class="sourceLineNo">815</span> return scheduler;<a name="line.815"></a>
+<span class="sourceLineNo">816</span> }<a name="line.816"></a>
+<span class="sourceLineNo">817</span><a name="line.817"></a>
+<span class="sourceLineNo">818</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.819"></a>
+<span class="sourceLineNo">820</span> this.scheduler.signalAll();<a name="line.820"></a>
+<span class="sourceLineNo">821</span> }<a name="line.821"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span><a name="line.826"></a>
+<span class="sourceLineNo">827</span> // ==========================================================================<a name="line.827"></a>
+<span class="sourceLineNo">828</span> // Submit/Remove Chores<a name="line.828"></a>
<span class="sourceLineNo">829</span> // ==========================================================================<a name="line.829"></a>
-<span class="sourceLineNo">830</span> // Submit/Remove Chores<a name="line.830"></a>
-<span class="sourceLineNo">831</span> // ==========================================================================<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span> * Add a chore procedure to the executor<a name="line.834"></a>
-<span class="sourceLineNo">835</span> * @param chore the chore to add<a name="line.835"></a>
-<span class="sourceLineNo">836</span> */<a name="line.836"></a>
-<span class="sourceLineNo">837</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.837"></a>
-<span class="sourceLineNo">838</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.838"></a>
-<span class="sourceLineNo">839</span> timeoutExecutor.add(chore);<a name="line.839"></a>
-<span class="sourceLineNo">840</span> }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span> /**<a name="line.842"></a>
-<span class="sourceLineNo">843</span> * Remove a chore procedure from the executor<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * @param chore the chore to remove<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return whether the chore is removed, or it will be removed later<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> chore.setState(ProcedureState.SUCCESS);<a name="line.848"></a>
-<span class="sourceLineNo">849</span> return timeoutExecutor.remove(chore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span> }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span> /**<a name="line.831"></a>
+<span class="sourceLineNo">832</span> * Add a chore procedure to the executor<a name="line.832"></a>
+<span class="sourceLineNo">833</span> * @param chore the chore to add<a name="line.833"></a>
+<span class="sourceLineNo">834</span> */<a name="line.834"></a>
+<span class="sourceLineNo">835</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.835"></a>
+<span class="sourceLineNo">836</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.836"></a>
+<span class="sourceLineNo">837</span> timeoutExecutor.add(chore);<a name="line.837"></a>
+<span class="sourceLineNo">838</span> }<a name="line.838"></a>
+<span class="sourceLineNo">839</span><a name="line.839"></a>
+<span class="sourceLineNo">840</span> /**<a name="line.840"></a>
+<span class="sourceLineNo">841</span> * Remove a chore procedure from the executor<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * @param chore the chore to remove<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return whether the chore is removed, or it will be removed later<a name="line.843"></a>
+<span class="sourceLineNo">844</span> */<a name="line.844"></a>
+<span class="sourceLineNo">845</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span> chore.setState(ProcedureState.SUCCESS);<a name="line.846"></a>
+<span class="sourceLineNo">847</span> return timeoutExecutor.remove(chore);<a name="line.847"></a>
+<span class="sourceLineNo">848</span> }<a name="line.848"></a>
+<span class="sourceLineNo">849</span><a name="line.849"></a>
+<span class="sourceLineNo">850</span> // ==========================================================================<a name="line.850"></a>
+<span class="sourceLineNo">851</span> // Nonce Procedure helpers<a name="line.851"></a>
<span class="sourceLineNo">852</span> // ==========================================================================<a name="line.852"></a>
-<span class="sourceLineNo">853</span> // Nonce Procedure helpers<a name="line.853"></a>
-<span class="sourceLineNo">854</span> // ==========================================================================<a name="line.854"></a>
-<span class="sourceLineNo">855</span> /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.856"></a>
-<span class="sourceLineNo">857</span> * @param nonceGroup<a name="line.857"></a>
-<span class="sourceLineNo">858</span> * @param nonce<a name="line.858"></a>
-<span class="sourceLineNo">859</span> * @return the generated NonceKey<a name="line.859"></a>
-<span class="sourceLineNo">860</span> */<a name="line.860"></a>
-<span class="sourceLineNo">861</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.862"></a>
-<span class="sourceLineNo">863</span> }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span> /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.866"></a>
-<span class="sourceLineNo">867</span> * A procId will be reserved and on submitProcedure(),<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.868"></a>
-<span class="sourceLineNo">869</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.870"></a>
-<span class="sourceLineNo">871</span> * and submit the procedure.<a name="line.871"></a>
-<span class="sourceLineNo">872</span> *<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.873"></a>
-<span class="sourceLineNo">874</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.874"></a>
-<span class="sourceLineNo">875</span> */<a name="line.875"></a>
-<span class="sourceLineNo">876</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> if (nonceKey == null) return -1;<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span> // check if we have already a Reserved ID for the nonce<a name="line.879"></a>
-<span class="sourceLineNo">880</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (oldProcId == null) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.882"></a>
-<span class="sourceLineNo">883</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.883"></a>
-<span class="sourceLineNo">884</span> final long newProcId = nextProcId();<a name="line.884"></a>
-<span class="sourceLineNo">885</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> if (oldProcId == null) return -1;<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span><a name="line.888"></a>
-<span class="sourceLineNo">889</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.889"></a>
-<span class="sourceLineNo">890</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.890"></a>
-<span class="sourceLineNo">891</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.891"></a>
-<span class="sourceLineNo">892</span> while (isRunning() &&<a name="line.892"></a>
-<span class="sourceLineNo">893</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.893"></a>
-<span class="sourceLineNo">894</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> if (traceEnabled) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.896"></a>
-<span class="sourceLineNo">897</span> }<a name="line.897"></a>
-<span class="sourceLineNo">898</span> Threads.sleep(100);<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span> return oldProcId.longValue();<a name="line.900"></a>
-<span class="sourceLineNo">901</span> }<a name="line.901"></a>
-<span class="sourceLineNo">902</span><a name="line.902"></a>
-<span class="sourceLineNo">903</span> /**<a name="line.903"></a>
-<span class="sourceLineNo">904</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.904"></a>
-<span class="sourceLineNo">905</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.905"></a>
-<span class="sourceLineNo">906</span> */<a name="line.906"></a>
-<span class="sourceLineNo">907</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.907"></a>
-<span class="sourceLineNo">908</span> if (nonceKey == null) return;<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.910"></a>
-<span class="sourceLineNo">911</span> if (procId == null) return;<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span> // if the procedure was not submitted, remove the nonce<a name="line.913"></a>
-<span class="sourceLineNo">914</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.915"></a>
-<span class="sourceLineNo">916</span> }<a name="line.916"></a>
-<span class="sourceLineNo">917</span> }<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.919"></a>
-<span class="sourceLineNo">920</span> private String procName;<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span> public FailedProcedure() {<a name="line.922"></a>
-<span class="sourceLineNo">923</span> }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.925"></a>
-<span class="sourceLineNo">926</span> NonceKey nonceKey, IOException exception) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span> this.procName = procName;<a name="line.927"></a>
-<span class="sourceLineNo">928</span> setProcId(procId);<a name="line.928"></a>
-<span class="sourceLineNo">929</span> setState(ProcedureState.ROLLEDBACK);<a name="line.929"></a>
-<span class="sourceLineNo">930</span> setOwner(owner);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> setNonceKey(nonceKey);<a name="line.931"></a>
-<span class="sourceLineNo">932</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.932"></a>
-<span class="sourceLineNo">933</span> setSubmittedTime(currentTime);<a name="line.933"></a>
-<span class="sourceLineNo">934</span> setLastUpdate(currentTime);<a name="line.934"></a>
-<span class="sourceLineNo">935</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.935"></a>
-<span class="sourceLineNo">936</span> }<a name="line.936"></a>
-<span class="sourceLineNo">937</span><a name="line.937"></a>
-<span class="sourceLineNo">938</span> @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span> public String getProcName() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span> return procName;<a name="line.940"></a>
-<span class="sourceLineNo">941</span> }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span> @Override<a name="line.943"></a>
-<span class="sourceLineNo">944</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.944"></a>
-<span class="sourceLineNo">945</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.945"></a>
-<span class="sourceLineNo">946</span> InterruptedException {<a name="line.946"></a>
-<span class="sourceLineNo">947</span> throw new UnsupportedOperationException();<a name="line.947"></a>
-<span class="sourceLineNo">948</span> }<a name="line.948"></a>
-<span class="sourceLineNo">949</span><a name="line.949"></a>
-<span class="sourceLineNo">950</span> @Override<a name="line.950"></a>
-<span class="sourceLineNo">951</span> protected void rollback(TEnvironment env)<a name="line.951"></a>
-<span class="sourceLineNo">952</span> throws IOException, InterruptedException {<a name="line.952"></a>
-<span class="sourceLineNo">953</span> throw new UnsupportedOperationException();<a name="line.953"></a>
-<span class="sourceLineNo">954</span> }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span> @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span> protected boolean abort(TEnvironment env) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span> throw new UnsupportedOperationException();<a name="line.958"></a>
-<span class="sourceLineNo">959</span> }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span> @Override<a name="line.961"></a>
-<span class="sourceLineNo">962</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.962"></a>
-<span class="sourceLineNo">963</span> throws IOException {<a name="line.963"></a>
-<span class="sourceLineNo">964</span> }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span> @Override<a name="line.966"></a>
-<span class="sourceLineNo">967</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.967"></a>
-<span class="sourceLineNo">968</span> throws IOException {<a name="line.968"></a>
-<span class="sourceLineNo">969</span> }<a name="line.969"></a>
-<span class="sourceLineNo">970</span> }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span> /**<a name="line.972"></a>
-<span class="sourceLineNo">973</span> * If the failure failed before submitting it, we may want to give back the<a name="line.973"></a>
-<span class="sourceLineNo">974</span> * same error to the requests with the same nonceKey.<a name="line.974"></a>
-<span class="sourceLineNo">975</span> *<a name="line.975"></a>
-<span class="sourceLineNo">976</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.976"></a>
-<span class="sourceLineNo">977</span> * @param procName name of the procedure, used to inform the user<a name="line.977"></a>
-<span class="sourceLineNo">978</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.978"></a>
-<span class="sourceLineNo">979</span> * @param exception the failure to report to the user<a name="line.979"></a>
-<span class="sourceLineNo">980</span> */<a name="line.980"></a>
-<span class="sourceLineNo">981</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.981"></a>
-<span class="sourceLineNo">982</span> IOException exception) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span> if (nonceKey == null) {<a name="line.983"></a>
-<span class="sourceLineNo">984</span> return;<a name="line.984"></a>
-<span class="sourceLineNo">985</span> }<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.987"></a>
-<span class="sourceLineNo">988</span> if (procId == null || completed.containsKey(procId)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span> return;<a name="line.989"></a>
-<span class="sourceLineNo">990</span> }<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span> Procedure<TEnvironment> proc =<a name="line.992"></a>
-<span class="sourceLineNo">993</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.993"></a>
-<span class="sourceLineNo">994</span><a name="line.994"></a>
-<span class="sourceLineNo">995</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.995"></a>
-<span class="sourceLineNo">996</span> }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">853</span> /**<a name="line.853"></a>
+<span class="sourceLineNo">854</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.854"></a>
+<span class="sourceLineNo">855</span> * @param nonceGroup<a name="line.855"></a>
+<span class="sourceLineNo">856</span> * @param nonce<a name="line.856"></a>
+<span class="sourceLineNo">857</span> * @return the generated NonceKey<a name="line.857"></a>
+<span class="sourceLineNo">858</span> */<a name="line.858"></a>
+<span class="sourceLineNo">859</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.860"></a>
+<span class="sourceLineNo">861</span> }<a name="line.861"></a>
+<span class="sourceLineNo">862</span><a name="line.862"></a>
+<span class="sourceLineNo">863</span> /**<a name="line.863"></a>
+<span class="sourceLineNo">864</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.864"></a>
+<span class="sourceLineNo">865</span> * A procId will be reserved and on submitProcedure(),<a name="line.865"></a>
+<span class="sourceLineNo">866</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.866"></a>
+<span class="sourceLineNo">867</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.867"></a>
+<span class="sourceLineNo">868</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.868"></a>
+<span class="sourceLineNo">869</span> * and submit the procedure.<a name="line.869"></a>
+<span class="sourceLineNo">870</span> *<a name="line.870"></a>
+<span class="sourceLineNo">871</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.871"></a>
+<span class="sourceLineNo">872</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.872"></a>
+<span class="sourceLineNo">873</span> */<a name="line.873"></a>
+<span class="sourceLineNo">874</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.874"></a>
+<span class="sourceLineNo">875</span> if (nonceKey == null) return -1;<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span> // check if we have already a Reserved ID for the nonce<a name="line.877"></a>
+<span class="sourceLineNo">878</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.878"></a>
+<span class="sourceLineNo">879</span> if (oldProcId == null) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.880"></a>
+<span class="sourceLineNo">881</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.881"></a>
+<span class="sourceLineNo">882</span> final long newProcId = nextProcId();<a name="line.882"></a>
+<span class="sourceLineNo">883</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.883"></a>
+<span class="sourceLineNo">884</span> if (oldProcId == null) return -1;<a name="line.884"></a>
+<span class="sourceLineNo">885</span> }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.887"></a>
+<span class="sourceLineNo">888</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.888"></a>
+<span class="sourceLineNo">889</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.889"></a>
+<span class="sourceLineNo">890</span> while (isRunning() &&<a name="line.890"></a>
+<span class="sourceLineNo">891</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.891"></a>
+<span class="sourceLineNo">892</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> if (traceEnabled) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> Threads.sleep(100);<a name="line.896"></a>
+<span class="sourceLineNo">897</span> }<a name="line.897"></a>
+<span class="sourceLineNo">898</span> return oldProcId.longValue();<a name="line.898"></a>
+<span class="sourceLineNo">899</span> }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span> /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.903"></a>
+<span class="sourceLineNo">904</span> */<a name="line.904"></a>
+<span class="sourceLineNo">905</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span> if (nonceKey == null) return;<a name="line.906"></a>
+<span class="sourceLineNo">907</span><a name="line.907"></a>
+<span class="sourceLineNo">908</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.908"></a>
+<span class="sourceLineNo">909</span> if (procId == null) return;<a name="line.909"></a>
+<span class="sourceLineNo">910</span><a name="line.910"></a>
+<span class="sourceLineNo">911</span> // if the procedure was not submitted, remove the nonce<a name="line.911"></a>
+<span class="sourceLineNo">912</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.912"></a>
+<span class="sourceLineNo">913</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.913"></a>
+<span class="sourceLineNo">914</span> }<a name="line.914"></a>
+<span class="sourceLineNo">915</span> }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.917"></a>
+<span class="sourceLineNo">918</span> private String procName;<a name="line.918"></a>
+<span class="sourceLineNo">919</span><a name="line.919"></a>
+<span class="sourceLineNo">920</span> public FailedProcedure() {<a name="line.920"></a>
+<span class="sourceLineNo">921</span> }<a name="line.921"></a>
+<span class="sourceLineNo">922</span><a name="line.922"></a>
+<span class="sourceLineNo">923</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.923"></a>
+<span class="sourceLineNo">924</span> NonceKey nonceKey, IOException exception) {<a name="line.924"></a>
+<span class="sourceLineNo">925</span> this.procName = procName;<a name="line.925"></a>
+<span class="sourceLineNo">926</span> setProcId(procId);<a name="line.926"></a>
+<span class="sourceLineNo">927</span> setState(ProcedureState.ROLLEDBACK);<a name="line.927"></a>
+<span class="sourceLineNo">928</span> setOwner(owner);<a name="line.928"></a>
+<span class="sourceLineNo">929</span> setNonceKey(nonceKey);<a name="line.929"></a>
+<span class="sourceLineNo">930</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.930"></a>
+<span class="sourceLineNo">931</span> setSubmittedTime(currentTime);<a name="line.931"></a>
+<span class="sourceLineNo">932</span> setLastUpdate(currentTime);<a name="line.932"></a>
+<span class="sourceLineNo">933</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.933"></a>
+<span class="sourceLineNo">934</span> }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span> @Override<a name="line.936"></a>
+<span class="sourceLineNo">937</span> public String getProcName() {<a name="line.937"></a>
+<span class="sourceLineNo">938</span> return procName;<a name="line.938"></a>
+<span class="sourceLineNo">939</span> }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span> @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.942"></a>
+<span class="sourceLineNo">943</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.943"></a>
+<span class="sourceLineNo">944</span> InterruptedException {<a name="line.944"></a>
+<span class="sourceLineNo">945</span> throw new UnsupportedOperationException();<a name="line.945"></a>
+<span class="sourceLineNo">946</span> }<a name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span> @Override<a name="line.948"></a>
+<span class="sourceLineNo">949</span> protected void rollback(TEnvironment env)<a name="line.949"></a>
+<span class="sourceLineNo">950</span> throws IOException, InterruptedException {<a name="line.950"></a>
+<span class="sourceLineNo">951</span> throw new UnsupportedOperationException();<a name="line.951"></a>
+<span class="sourceLineNo">952</span> }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span> @Override<a name="line.954"></a>
+<span class="sourceLineNo">955</span> protected boolean abort(TEnvironment env) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span> throw new UnsupportedOperationException();<a name="line.956"></a>
+<span class="sourceLineNo">957</span> }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span> @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.960"></a>
+<span class="sourceLineNo">961</span> throws IOException {<a name="line.961"></a>
+<span class="sourceLineNo">962</span> }<a name="line.962"></a>
+<span class="sourceLineNo">963</span><a name="line.963"></a>
+<span class="sourceLineNo">964</span> @Override<a name="line.964"></a>
+<span class="sourceLineNo">965</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.965"></a>
+<span class="sourceLineNo">966</span> throws IOException {<a name="line.966"></a>
+<span class="sourceLineNo">967</span> }<a name="line.967"></a>
+<span class="sourceLineNo">968</span> }<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span> /**<a name="line.970"></a>
+<span class="sourceLineNo">971</span> * If the failure failed before submitting it, we may want to give back the<a name="line.971"></a>
+<span class="sourceLineNo">972</span> * same error to the requests with the same nonceKey.<a name="line.972"></a>
+<span class="sourceLineNo">973</span> *<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * @param procName name of the procedure, used to inform the user<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * @param exception the failure to report to the user<a name="line.977"></a>
+<span class="sourceLineNo">978</span> */<a name="line.978"></a>
+<span class="sourceLineNo">979</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.979"></a>
+<span class="sourceLineNo">980</span> IOException exception) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span> if (nonceKey == null) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span> return;<a name="line.982"></a>
+<span class="sourceLineNo">983</span> }<a name="line.983"></a>
+<span class="sourceLineNo">984</span><a name="line.984"></a>
+<span class="sourceLineNo">985</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.985"></a>
+<span class="sourceLineNo">986</span> if (procId == null || completed.containsKey(procId)) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span> return;<a name="line.987"></a>
+<span class="sourceLineNo">988</span> }<a name="line.988"></a>
+<span class="sourceLineNo">989</span><a name="line.989"></a>
+<span class="sourceLineNo">990</span> Procedure<TEnvironment> proc =<a name="line.990"></a>
+<span class="sourceLineNo">991</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.991"></a>
+<span class="sourceLineNo">992</span><a name="line.992"></a>
+<span class="sourceLineNo">993</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.993"></a>
+<span class="sourceLineNo">994</span> }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span> // ==========================================================================<a name="line.996"></a>
+<span class="sourceLineNo">997</span> // Submit/Abort Procedure<a name="line.997"></a>
<span class="sourceLineNo">998</span> // ==========================================================================<a name="line.998"></a>
-<span class="sourceLineNo">999</span> // Submit/Abort Procedure<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> // ==========================================================================<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> /**<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> * Add a new root-procedure to the executor.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> * @param proc the new procedure to execute.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> * @return the procedure id, that can be used to monitor the operation<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> */<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> public long submitProcedure(Procedure<TEnvironment> proc) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> return submitProcedure(proc, null);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span><a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> /**<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> * Bypass a procedure. If the procedure is set to bypass, all the logic in<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> * execute/rollback will be ignored and it will return success, whatever.<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> * It is used to recover buggy stuck procedures, releasing the lock resources<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> * and letting other procedures run. Bypassing one procedure (and its ancestors will<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> * be bypassed automatically) may leave the cluster in a middle state, e.g. region<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> * not assigned, or some hdfs files left behind. After getting rid of those stuck procedures,<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> * the operators may have to do some clean up on hdfs or schedule some assign procedures<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> * to let region online. DO AT YOUR OWN RISK.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> * <p><a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> * A procedure can be bypassed only if<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span> * 1. The procedure is in state of RUNNABLE, WAITING, WAITING_TIMEOUT<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> * or it is a root procedure without any child.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * 2. No other worker thread is executing it<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> * 3. No child procedure has been submitted<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> *<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> * <p><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> * If all the requirements are meet, the procedure and its ancestors will be<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> * bypassed and persisted to WAL.<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> *<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span> * <p><a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> * If the procedure is in WAITING state, will set it to RUNNABLE add it to run queue.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> * TODO: What about WAITING_TIMEOUT?<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> * @param pids the procedure id<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> * @param lockWait time to wait lock<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> * @param force if force set to true, we will bypass the procedure even if it is executing.<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> * This is for procedures which can't break out during executing(due to bug, mostly)<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> * In this case, bypassing the procedure is not enough, since it is already stuck<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> * there. We need to restart the master after bypassing, and letting the problematic<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span> * procedure to execute wth bypass=true, so in that condition, the procedure can be<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> * successfully bypassed.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> * @param recursive We will do an expensive search for children of each pid. EXPENSIVE!<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> * @return true if bypass success<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> * @throws IOException IOException<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span> */<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> public List<Boolean> bypassProcedure(List<Long> pids, long lockWait, boolean force,<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span> boolean recursive)<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> throws IOException {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> List<Boolean> result = new ArrayList<Boolean>(pids.size());<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> for(long pid: pids) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span> result.add(bypassProcedure(pid, lockWait, force, recursive));<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> return result;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span> }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> boolean bypassProcedure(long pid, long lockWait, boolean override, boolean recursive)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span> throws IOException {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> Preconditions.checkArgument(lockWait > 0, "lockWait should be positive");<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span> final Procedure<TEnvironment> procedure = getProcedure(pid);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span> if (procedure == null) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> LOG.debug("Procedure pid={} does not exist, skipping bypass", pid);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> return false;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span> }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span><a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> LOG.debug("Begin bypass {} with lockWait={}, override={}, recursive={}",<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span> procedure, lockWait, override, recursive);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> IdLock.Entry lockEntry = procExecutionLock.tryLockEntry(procedure.getProcId(), lockWait);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> if (lockEntry == null && !override) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> LOG.debug("Waited {} ms, but {} is still running, skipping bypass with force={}",<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> lockWait, procedure, override);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> } else if (lockEntry == null) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> LOG.debug("Waited {} ms, but {} is still running, begin bypass with force={}",<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span> lockWait, procedure, override);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // check whether the procedure is already finished<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> if (procedure.isFinished()) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> LOG.debug("{} is already finished, skipping bypass", procedure);<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> return false;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> if (procedure.hasChildren()) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> if (recursive) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> // EXPENSIVE. Checks each live procedure of which there could be many!!!<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span> // Is there another way to get children of a procedure?<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> LOG.info("Recursive bypass on children of pid={}", procedure.getProcId());<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> this.procedures.forEachValue(1 /*Single-threaded*/,<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> // Transformer<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> v -> v.getParentProcId() == procedure.getProcId()? v: null,<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> // Consumer<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>
<TRUNCATED>
[16/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
index 688bd4e..37bf508 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -589,1651 +589,1649 @@
<span class="sourceLineNo">581</span> LOG.debug("Loading {}", proc);<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span> Long rootProcId = getRootProcedureId(proc);<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (rootProcId == null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.585"></a>
-<span class="sourceLineNo">586</span> scheduler.addBack(proc);<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (proc.hasParent()) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.591"></a>
-<span class="sourceLineNo">592</span> // corrupted procedures are handled later at step 3<a name="line.592"></a>
-<span class="sourceLineNo">593</span> if (parent != null && !proc.isFinished()) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> parent.incChildrenLatch();<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.598"></a>
-<span class="sourceLineNo">599</span> procStack.loadStack(proc);<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span> proc.setRootProcId(rootProcId);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> switch (proc.getState()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> case RUNNABLE:<a name="line.603"></a>
-<span class="sourceLineNo">604</span> runnableList.add(proc);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> break;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> case WAITING:<a name="line.606"></a>
-<span class="sourceLineNo">607</span> waitingList.add(proc);<a name="line.607"></a>
-<span class="sourceLineNo">608</span> break;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> case WAITING_TIMEOUT:<a name="line.609"></a>
-<span class="sourceLineNo">610</span> waitingTimeoutList.add(proc);<a name="line.610"></a>
-<span class="sourceLineNo">611</span> break;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> case FAILED:<a name="line.612"></a>
-<span class="sourceLineNo">613</span> failedList.add(proc);<a name="line.613"></a>
-<span class="sourceLineNo">614</span> break;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> case ROLLEDBACK:<a name="line.615"></a>
-<span class="sourceLineNo">616</span> case INITIALIZING:<a name="line.616"></a>
-<span class="sourceLineNo">617</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> LOG.error(msg);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throw new UnsupportedOperationException(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> default:<a name="line.620"></a>
-<span class="sourceLineNo">621</span> break;<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> // 4. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> waitingList.forEach(proc -> {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> if (!proc.hasChildren()) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> // Normally, WAITING procedures should be waken by its children.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> // But, there is a case that, all the children are successful and before<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // they can wake up their parent procedure, the master was killed.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // are not loaded because of their SUCCESS state.<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // So we need to continue to run this WAITING procedure. But before<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // will throw:<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.637"></a>
-<span class="sourceLineNo">638</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> runnableList.add(proc);<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span> });<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span> // 5. Push the procedures to the timeout executor<a name="line.643"></a>
-<span class="sourceLineNo">644</span> waitingTimeoutList.forEach(proc -> {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> proc.afterReplay(getEnvironment());<a name="line.645"></a>
-<span class="sourceLineNo">646</span> timeoutExecutor.add(proc);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> });<a name="line.647"></a>
-<span class="sourceLineNo">648</span> // 6. restore locks<a name="line.648"></a>
-<span class="sourceLineNo">649</span> restoreLocks();<a name="line.649"></a>
-<span class="sourceLineNo">650</span> // 7. Push the procedure to the scheduler<a name="line.650"></a>
-<span class="sourceLineNo">651</span> failedList.forEach(scheduler::addBack);<a name="line.651"></a>
-<span class="sourceLineNo">652</span> runnableList.forEach(p -> {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> p.afterReplay(getEnvironment());<a name="line.653"></a>
-<span class="sourceLineNo">654</span> if (!p.hasParent()) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.655"></a>
-<span class="sourceLineNo">656</span> }<a name="line.656"></a>
-<span class="sourceLineNo">657</span> scheduler.addBack(p);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> });<a name="line.658"></a>
-<span class="sourceLineNo">659</span> }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span> /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.662"></a>
-<span class="sourceLineNo">663</span> * <p/><a name="line.663"></a>
-<span class="sourceLineNo">664</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.664"></a>
-<span class="sourceLineNo">665</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.665"></a>
-<span class="sourceLineNo">666</span> * pending and in-progress procedures.<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * @param numThreads number of threads available for procedure execution.<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * is found on replay. otherwise false.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> // We have numThreads executor + one timer thread used for timing out<a name="line.672"></a>
-<span class="sourceLineNo">673</span> // procedures and triggering periodic procedures.<a name="line.673"></a>
-<span class="sourceLineNo">674</span> this.corePoolSize = numThreads;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> this.maxPoolSize = 10 * numThreads;<a name="line.675"></a>
-<span class="sourceLineNo">676</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.676"></a>
-<span class="sourceLineNo">677</span> corePoolSize, maxPoolSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.679"></a>
-<span class="sourceLineNo">680</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span> // Create the workers<a name="line.682"></a>
-<span class="sourceLineNo">683</span> workerId.set(0);<a name="line.683"></a>
-<span class="sourceLineNo">684</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.684"></a>
-<span class="sourceLineNo">685</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">584</span> // The orphan procedures will be passed to handleCorrupted, so add an assert here<a name="line.584"></a>
+<span class="sourceLineNo">585</span> assert rootProcId != null;<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (proc.hasParent()) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.588"></a>
+<span class="sourceLineNo">589</span> if (parent != null && !proc.isFinished()) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> parent.incChildrenLatch();<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> procStack.loadStack(proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span> proc.setRootProcId(rootProcId);<a name="line.597"></a>
+<span class="sourceLineNo">598</span> switch (proc.getState()) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> case RUNNABLE:<a name="line.599"></a>
+<span class="sourceLineNo">600</span> runnableList.add(proc);<a name="line.600"></a>
+<span class="sourceLineNo">601</span> break;<a name="line.601"></a>
+<span class="sourceLineNo">602</span> case WAITING:<a name="line.602"></a>
+<span class="sourceLineNo">603</span> waitingList.add(proc);<a name="line.603"></a>
+<span class="sourceLineNo">604</span> break;<a name="line.604"></a>
+<span class="sourceLineNo">605</span> case WAITING_TIMEOUT:<a name="line.605"></a>
+<span class="sourceLineNo">606</span> waitingTimeoutList.add(proc);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> break;<a name="line.607"></a>
+<span class="sourceLineNo">608</span> case FAILED:<a name="line.608"></a>
+<span class="sourceLineNo">609</span> failedList.add(proc);<a name="line.609"></a>
+<span class="sourceLineNo">610</span> break;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> case ROLLEDBACK:<a name="line.611"></a>
+<span class="sourceLineNo">612</span> case INITIALIZING:<a name="line.612"></a>
+<span class="sourceLineNo">613</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.613"></a>
+<span class="sourceLineNo">614</span> LOG.error(msg);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> throw new UnsupportedOperationException(msg);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> default:<a name="line.616"></a>
+<span class="sourceLineNo">617</span> break;<a name="line.617"></a>
+<span class="sourceLineNo">618</span> }<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span> // 3. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.621"></a>
+<span class="sourceLineNo">622</span> waitingList.forEach(proc -> {<a name="line.622"></a>
+<span class="sourceLineNo">623</span> if (!proc.hasChildren()) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // Normally, WAITING procedures should be waken by its children.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // But, there is a case that, all the children are successful and before<a name="line.625"></a>
+<span class="sourceLineNo">626</span> // they can wake up their parent procedure, the master was killed.<a name="line.626"></a>
+<span class="sourceLineNo">627</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.627"></a>
+<span class="sourceLineNo">628</span> // are not loaded because of their SUCCESS state.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // So we need to continue to run this WAITING procedure. But before<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // will throw:<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.633"></a>
+<span class="sourceLineNo">634</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> runnableList.add(proc);<a name="line.635"></a>
+<span class="sourceLineNo">636</span> } else {<a name="line.636"></a>
+<span class="sourceLineNo">637</span> proc.afterReplay(getEnvironment());<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span> });<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span> // 4. Push the procedures to the timeout executor<a name="line.641"></a>
+<span class="sourceLineNo">642</span> waitingTimeoutList.forEach(proc -> {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> proc.afterReplay(getEnvironment());<a name="line.643"></a>
+<span class="sourceLineNo">644</span> timeoutExecutor.add(proc);<a name="line.644"></a>
+<span class="sourceLineNo">645</span> });<a name="line.645"></a>
+<span class="sourceLineNo">646</span> // 5. restore locks<a name="line.646"></a>
+<span class="sourceLineNo">647</span> restoreLocks();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> // 6. Push the procedure to the scheduler<a name="line.648"></a>
+<span class="sourceLineNo">649</span> failedList.forEach(scheduler::addBack);<a name="line.649"></a>
+<span class="sourceLineNo">650</span> runnableList.forEach(p -> {<a name="line.650"></a>
+<span class="sourceLineNo">651</span> p.afterReplay(getEnvironment());<a name="line.651"></a>
+<span class="sourceLineNo">652</span> if (!p.hasParent()) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> scheduler.addBack(p);<a name="line.655"></a>
+<span class="sourceLineNo">656</span> });<a name="line.656"></a>
+<span class="sourceLineNo">657</span> }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span> /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.660"></a>
+<span class="sourceLineNo">661</span> * <p/><a name="line.661"></a>
+<span class="sourceLineNo">662</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.662"></a>
+<span class="sourceLineNo">663</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.663"></a>
+<span class="sourceLineNo">664</span> * pending and in-progress procedures.<a name="line.664"></a>
+<span class="sourceLineNo">665</span> * @param numThreads number of threads available for procedure execution.<a name="line.665"></a>
+<span class="sourceLineNo">666</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.666"></a>
+<span class="sourceLineNo">667</span> * is found on replay. otherwise false.<a name="line.667"></a>
+<span class="sourceLineNo">668</span> */<a name="line.668"></a>
+<span class="sourceLineNo">669</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> // We have numThreads executor + one timer thread used for timing out<a name="line.670"></a>
+<span class="sourceLineNo">671</span> // procedures and triggering periodic procedures.<a name="line.671"></a>
+<span class="sourceLineNo">672</span> this.corePoolSize = numThreads;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> this.maxPoolSize = 10 * numThreads;<a name="line.673"></a>
+<span class="sourceLineNo">674</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.674"></a>
+<span class="sourceLineNo">675</span> corePoolSize, maxPoolSize);<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.677"></a>
+<span class="sourceLineNo">678</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span> // Create the workers<a name="line.680"></a>
+<span class="sourceLineNo">681</span> workerId.set(0);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.682"></a>
+<span class="sourceLineNo">683</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> long st, et;<a name="line.687"></a>
<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> long st, et;<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> // Acquire the store lease.<a name="line.691"></a>
-<span class="sourceLineNo">692</span> st = System.nanoTime();<a name="line.692"></a>
-<span class="sourceLineNo">693</span> store.recoverLease();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> et = System.nanoTime();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.695"></a>
-<span class="sourceLineNo">696</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span> // start the procedure scheduler<a name="line.698"></a>
-<span class="sourceLineNo">699</span> scheduler.start();<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> // TODO: Split in two steps.<a name="line.701"></a>
-<span class="sourceLineNo">702</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.702"></a>
-<span class="sourceLineNo">703</span> // The first one will make sure that we have the latest id,<a name="line.703"></a>
-<span class="sourceLineNo">704</span> // so we can start the threads and accept new procedures.<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // The second step will do the actual load of old procedures.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> st = System.nanoTime();<a name="line.706"></a>
-<span class="sourceLineNo">707</span> load(abortOnCorruption);<a name="line.707"></a>
-<span class="sourceLineNo">708</span> et = System.nanoTime();<a name="line.708"></a>
-<span class="sourceLineNo">709</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.709"></a>
-<span class="sourceLineNo">710</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.710"></a>
-<span class="sourceLineNo">711</span> }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></a>
-<span class="sourceLineNo">713</span> /**<a name="line.713"></a>
-<span class="sourceLineNo">714</span> * Start the workers.<a name="line.714"></a>
-<span class="sourceLineNo">715</span> */<a name="line.715"></a>
-<span class="sourceLineNo">716</span> public void startWorkers() throws IOException {<a name="line.716"></a>
-<span class="sourceLineNo">717</span> if (!running.compareAndSet(false, true)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Already running");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span> // Start the executors. Here we must have the lastProcId set.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.722"></a>
-<span class="sourceLineNo">723</span> timeoutExecutor.start();<a name="line.723"></a>
-<span class="sourceLineNo">724</span> for (WorkerThread worker: workerThreads) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span> worker.start();<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> // Internal chores<a name="line.728"></a>
-<span class="sourceLineNo">729</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span> // Add completed cleaner chore<a name="line.731"></a>
-<span class="sourceLineNo">732</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.732"></a>
-<span class="sourceLineNo">733</span> }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span> public void stop() {<a name="line.735"></a>
-<span class="sourceLineNo">736</span> if (!running.getAndSet(false)) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span> return;<a name="line.737"></a>
-<span class="sourceLineNo">738</span> }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span> LOG.info("Stopping");<a name="line.740"></a>
-<span class="sourceLineNo">741</span> scheduler.stop();<a name="line.741"></a>
-<span class="sourceLineNo">742</span> timeoutExecutor.sendStopSignal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> @VisibleForTesting<a name="line.745"></a>
-<span class="sourceLineNo">746</span> public void join() {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> assert !isRunning() : "expected not running";<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span> // stop the timeout executor<a name="line.749"></a>
-<span class="sourceLineNo">750</span> timeoutExecutor.awaitTermination();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span> // stop the worker threads<a name="line.752"></a>
-<span class="sourceLineNo">753</span> for (WorkerThread worker: workerThreads) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span> worker.awaitTermination();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span> // Destroy the Thread Group for the executors<a name="line.757"></a>
-<span class="sourceLineNo">758</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.758"></a>
-<span class="sourceLineNo">759</span> try {<a name="line.759"></a>
-<span class="sourceLineNo">760</span> threadGroup.destroy();<a name="line.760"></a>
-<span class="sourceLineNo">761</span> } catch (IllegalThreadStateException e) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.threadGroup, e.getMessage());<a name="line.763"></a>
-<span class="sourceLineNo">764</span> // This dumps list of threads on STDOUT.<a name="line.764"></a>
-<span class="sourceLineNo">765</span> this.threadGroup.list();<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span> // reset the in-memory state for testing<a name="line.768"></a>
-<span class="sourceLineNo">769</span> completed.clear();<a name="line.769"></a>
-<span class="sourceLineNo">770</span> rollbackStack.clear();<a name="line.770"></a>
-<span class="sourceLineNo">771</span> procedures.clear();<a name="line.771"></a>
-<span class="sourceLineNo">772</span> nonceKeysToProcIdsMap.clear();<a name="line.772"></a>
-<span class="sourceLineNo">773</span> scheduler.clear();<a name="line.773"></a>
-<span class="sourceLineNo">774</span> lastProcId.set(-1);<a name="line.774"></a>
-<span class="sourceLineNo">775</span> }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span> public void refreshConfiguration(final Configuration conf) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span> this.conf = conf;<a name="line.778"></a>
-<span class="sourceLineNo">779</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.779"></a>
-<span class="sourceLineNo">780</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span> }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">689</span> // Acquire the store lease.<a name="line.689"></a>
+<span class="sourceLineNo">690</span> st = System.nanoTime();<a name="line.690"></a>
+<span class="sourceLineNo">691</span> store.recoverLease();<a name="line.691"></a>
+<span class="sourceLineNo">692</span> et = System.nanoTime();<a name="line.692"></a>
+<span class="sourceLineNo">693</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.693"></a>
+<span class="sourceLineNo">694</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> // start the procedure scheduler<a name="line.696"></a>
+<span class="sourceLineNo">697</span> scheduler.start();<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> // TODO: Split in two steps.<a name="line.699"></a>
+<span class="sourceLineNo">700</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.700"></a>
+<span class="sourceLineNo">701</span> // The first one will make sure that we have the latest id,<a name="line.701"></a>
+<span class="sourceLineNo">702</span> // so we can start the threads and accept new procedures.<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // The second step will do the actual load of old procedures.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> st = System.nanoTime();<a name="line.704"></a>
+<span class="sourceLineNo">705</span> load(abortOnCorruption);<a name="line.705"></a>
+<span class="sourceLineNo">706</span> et = System.nanoTime();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.707"></a>
+<span class="sourceLineNo">708</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.708"></a>
+<span class="sourceLineNo">709</span> }<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span> /**<a name="line.711"></a>
+<span class="sourceLineNo">712</span> * Start the workers.<a name="line.712"></a>
+<span class="sourceLineNo">713</span> */<a name="line.713"></a>
+<span class="sourceLineNo">714</span> public void startWorkers() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span> if (!running.compareAndSet(false, true)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Already running");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> return;<a name="line.717"></a>
+<span class="sourceLineNo">718</span> }<a name="line.718"></a>
+<span class="sourceLineNo">719</span> // Start the executors. Here we must have the lastProcId set.<a name="line.719"></a>
+<span class="sourceLineNo">720</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.720"></a>
+<span class="sourceLineNo">721</span> timeoutExecutor.start();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (WorkerThread worker: workerThreads) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> worker.start();<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span> // Internal chores<a name="line.726"></a>
+<span class="sourceLineNo">727</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.727"></a>
+<span class="sourceLineNo">728</span><a name="line.728"></a>
+<span class="sourceLineNo">729</span> // Add completed cleaner chore<a name="line.729"></a>
+<span class="sourceLineNo">730</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.730"></a>
+<span class="sourceLineNo">731</span> }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span> public void stop() {<a name="line.733"></a>
+<span class="sourceLineNo">734</span> if (!running.getAndSet(false)) {<a name="line.734"></a>
+<span class="sourceLineNo">735</span> return;<a name="line.735"></a>
+<span class="sourceLineNo">736</span> }<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span> LOG.info("Stopping");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> scheduler.stop();<a name="line.739"></a>
+<span class="sourceLineNo">740</span> timeoutExecutor.sendStopSignal();<a name="line.740"></a>
+<span class="sourceLineNo">741</span> }<a name="line.741"></a>
+<span class="sourceLineNo">742</span><a name="line.742"></a>
+<span class="sourceLineNo">743</span> @VisibleForTesting<a name="line.743"></a>
+<span class="sourceLineNo">744</span> public void join() {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> assert !isRunning() : "expected not running";<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span> // stop the timeout executor<a name="line.747"></a>
+<span class="sourceLineNo">748</span> timeoutExecutor.awaitTermination();<a name="line.748"></a>
+<span class="sourceLineNo">749</span><a name="line.749"></a>
+<span class="sourceLineNo">750</span> // stop the worker threads<a name="line.750"></a>
+<span class="sourceLineNo">751</span> for (WorkerThread worker: workerThreads) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span> worker.awaitTermination();<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> // Destroy the Thread Group for the executors<a name="line.755"></a>
+<span class="sourceLineNo">756</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> try {<a name="line.757"></a>
+<span class="sourceLineNo">758</span> threadGroup.destroy();<a name="line.758"></a>
+<span class="sourceLineNo">759</span> } catch (IllegalThreadStateException e) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.threadGroup, e.getMessage());<a name="line.761"></a>
+<span class="sourceLineNo">762</span> // This dumps list of threads on STDOUT.<a name="line.762"></a>
+<span class="sourceLineNo">763</span> this.threadGroup.list();<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span><a name="line.765"></a>
+<span class="sourceLineNo">766</span> // reset the in-memory state for testing<a name="line.766"></a>
+<span class="sourceLineNo">767</span> completed.clear();<a name="line.767"></a>
+<span class="sourceLineNo">768</span> rollbackStack.clear();<a name="line.768"></a>
+<span class="sourceLineNo">769</span> procedures.clear();<a name="line.769"></a>
+<span class="sourceLineNo">770</span> nonceKeysToProcIdsMap.clear();<a name="line.770"></a>
+<span class="sourceLineNo">771</span> scheduler.clear();<a name="line.771"></a>
+<span class="sourceLineNo">772</span> lastProcId.set(-1);<a name="line.772"></a>
+<span class="sourceLineNo">773</span> }<a name="line.773"></a>
+<span class="sourceLineNo">774</span><a name="line.774"></a>
+<span class="sourceLineNo">775</span> public void refreshConfiguration(final Configuration conf) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span> this.conf = conf;<a name="line.776"></a>
+<span class="sourceLineNo">777</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.777"></a>
+<span class="sourceLineNo">778</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.778"></a>
+<span class="sourceLineNo">779</span> }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span> // ==========================================================================<a name="line.781"></a>
+<span class="sourceLineNo">782</span> // Accessors<a name="line.782"></a>
<span class="sourceLineNo">783</span> // ==========================================================================<a name="line.783"></a>
-<span class="sourceLineNo">784</span> // Accessors<a name="line.784"></a>
-<span class="sourceLineNo">785</span> // ==========================================================================<a name="line.785"></a>
-<span class="sourceLineNo">786</span> public boolean isRunning() {<a name="line.786"></a>
-<span class="sourceLineNo">787</span> return running.get();<a name="line.787"></a>
-<span class="sourceLineNo">788</span> }<a name="line.788"></a>
-<span class="sourceLineNo">789</span><a name="line.789"></a>
-<span class="sourceLineNo">790</span> /**<a name="line.790"></a>
-<span class="sourceLineNo">791</span> * @return the current number of worker threads.<a name="line.791"></a>
-<span class="sourceLineNo">792</span> */<a name="line.792"></a>
-<span class="sourceLineNo">793</span> public int getWorkerThreadCount() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span> return workerThreads.size();<a name="line.794"></a>
-<span class="sourceLineNo">795</span> }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span> /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span> * @return the core pool size settings.<a name="line.798"></a>
-<span class="sourceLineNo">799</span> */<a name="line.799"></a>
-<span class="sourceLineNo">800</span> public int getCorePoolSize() {<a name="line.800"></a>
-<span class="sourceLineNo">801</span> return corePoolSize;<a name="line.801"></a>
-<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span> public int getActiveExecutorCount() {<a name="line.804"></a>
-<span class="sourceLineNo">805</span> return activeExecutorCount.get();<a name="line.805"></a>
-<span class="sourceLineNo">806</span> }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span> public TEnvironment getEnvironment() {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.environment;<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> public ProcedureStore getStore() {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> return this.store;<a name="line.813"></a>
-<span class="sourceLineNo">814</span> }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span> ProcedureScheduler getScheduler() {<a name="line.816"></a>
-<span class="sourceLineNo">817</span> return scheduler;<a name="line.817"></a>
-<span class="sourceLineNo">818</span> }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.821"></a>
-<span class="sourceLineNo">822</span> this.scheduler.signalAll();<a name="line.822"></a>
-<span class="sourceLineNo">823</span> }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
+<span class="sourceLineNo">784</span> public boolean isRunning() {<a name="line.784"></a>
+<span class="sourceLineNo">785</span> return running.get();<a name="line.785"></a>
+<span class="sourceLineNo">786</span> }<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span> /**<a name="line.788"></a>
+<span class="sourceLineNo">789</span> * @return the current number of worker threads.<a name="line.789"></a>
+<span class="sourceLineNo">790</span> */<a name="line.790"></a>
+<span class="sourceLineNo">791</span> public int getWorkerThreadCount() {<a name="line.791"></a>
+<span class="sourceLineNo">792</span> return workerThreads.size();<a name="line.792"></a>
+<span class="sourceLineNo">793</span> }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span> * @return the core pool size settings.<a name="line.796"></a>
+<span class="sourceLineNo">797</span> */<a name="line.797"></a>
+<span class="sourceLineNo">798</span> public int getCorePoolSize() {<a name="line.798"></a>
+<span class="sourceLineNo">799</span> return corePoolSize;<a name="line.799"></a>
+<span class="sourceLineNo">800</span> }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span> public int getActiveExecutorCount() {<a name="line.802"></a>
+<span class="sourceLineNo">803</span> return activeExecutorCount.get();<a name="line.803"></a>
+<span class="sourceLineNo">804</span> }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span> public TEnvironment getEnvironment() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.environment;<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> public ProcedureStore getStore() {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> return this.store;<a name="line.811"></a>
+<span class="sourceLineNo">812</span> }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span> ProcedureScheduler getScheduler() {<a name="line.814"></a>
+<span class="sourceLineNo">815</span> return scheduler;<a name="line.815"></a>
+<span class="sourceLineNo">816</span> }<a name="line.816"></a>
+<span class="sourceLineNo">817</span><a name="line.817"></a>
+<span class="sourceLineNo">818</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.819"></a>
+<span class="sourceLineNo">820</span> this.scheduler.signalAll();<a name="line.820"></a>
+<span class="sourceLineNo">821</span> }<a name="line.821"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span><a name="line.826"></a>
+<span class="sourceLineNo">827</span> // ==========================================================================<a name="line.827"></a>
+<span class="sourceLineNo">828</span> // Submit/Remove Chores<a name="line.828"></a>
<span class="sourceLineNo">829</span> // ==========================================================================<a name="line.829"></a>
-<span class="sourceLineNo">830</span> // Submit/Remove Chores<a name="line.830"></a>
-<span class="sourceLineNo">831</span> // ==========================================================================<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span> * Add a chore procedure to the executor<a name="line.834"></a>
-<span class="sourceLineNo">835</span> * @param chore the chore to add<a name="line.835"></a>
-<span class="sourceLineNo">836</span> */<a name="line.836"></a>
-<span class="sourceLineNo">837</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.837"></a>
-<span class="sourceLineNo">838</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.838"></a>
-<span class="sourceLineNo">839</span> timeoutExecutor.add(chore);<a name="line.839"></a>
-<span class="sourceLineNo">840</span> }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span> /**<a name="line.842"></a>
-<span class="sourceLineNo">843</span> * Remove a chore procedure from the executor<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * @param chore the chore to remove<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return whether the chore is removed, or it will be removed later<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> chore.setState(ProcedureState.SUCCESS);<a name="line.848"></a>
-<span class="sourceLineNo">849</span> return timeoutExecutor.remove(chore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span> }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span> /**<a name="line.831"></a>
+<span class="sourceLineNo">832</span> * Add a chore procedure to the executor<a name="line.832"></a>
+<span class="sourceLineNo">833</span> * @param chore the chore to add<a name="line.833"></a>
+<span class="sourceLineNo">834</span> */<a name="line.834"></a>
+<span class="sourceLineNo">835</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.835"></a>
+<span class="sourceLineNo">836</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.836"></a>
+<span class="sourceLineNo">837</span> timeoutExecutor.add(chore);<a name="line.837"></a>
+<span class="sourceLineNo">838</span> }<a name="line.838"></a>
+<span class="sourceLineNo">839</span><a name="line.839"></a>
+<span class="sourceLineNo">840</span> /**<a name="line.840"></a>
+<span class="sourceLineNo">841</span> * Remove a chore procedure from the executor<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * @param chore the chore to remove<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return whether the chore is removed, or it will be removed later<a name="line.843"></a>
+<span class="sourceLineNo">844</span> */<a name="line.844"></a>
+<span class="sourceLineNo">845</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span> chore.setState(ProcedureState.SUCCESS);<a name="line.846"></a>
+<span class="sourceLineNo">847</span> return timeoutExecutor.remove(chore);<a name="line.847"></a>
+<span class="sourceLineNo">848</span> }<a name="line.848"></a>
+<span class="sourceLineNo">849</span><a name="line.849"></a>
+<span class="sourceLineNo">850</span> // ==========================================================================<a name="line.850"></a>
+<span class="sourceLineNo">851</span> // Nonce Procedure helpers<a name="line.851"></a>
<span class="sourceLineNo">852</span> // ==========================================================================<a name="line.852"></a>
-<span class="sourceLineNo">853</span> // Nonce Procedure helpers<a name="line.853"></a>
-<span class="sourceLineNo">854</span> // ==========================================================================<a name="line.854"></a>
-<span class="sourceLineNo">855</span> /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.856"></a>
-<span class="sourceLineNo">857</span> * @param nonceGroup<a name="line.857"></a>
-<span class="sourceLineNo">858</span> * @param nonce<a name="line.858"></a>
-<span class="sourceLineNo">859</span> * @return the generated NonceKey<a name="line.859"></a>
-<span class="sourceLineNo">860</span> */<a name="line.860"></a>
-<span class="sourceLineNo">861</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.862"></a>
-<span class="sourceLineNo">863</span> }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span> /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.866"></a>
-<span class="sourceLineNo">867</span> * A procId will be reserved and on submitProcedure(),<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.868"></a>
-<span class="sourceLineNo">869</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.870"></a>
-<span class="sourceLineNo">871</span> * and submit the procedure.<a name="line.871"></a>
-<span class="sourceLineNo">872</span> *<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.873"></a>
-<span class="sourceLineNo">874</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.874"></a>
-<span class="sourceLineNo">875</span> */<a name="line.875"></a>
-<span class="sourceLineNo">876</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> if (nonceKey == null) return -1;<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span> // check if we have already a Reserved ID for the nonce<a name="line.879"></a>
-<span class="sourceLineNo">880</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (oldProcId == null) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.882"></a>
-<span class="sourceLineNo">883</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.883"></a>
-<span class="sourceLineNo">884</span> final long newProcId = nextProcId();<a name="line.884"></a>
-<span class="sourceLineNo">885</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> if (oldProcId == null) return -1;<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span><a name="line.888"></a>
-<span class="sourceLineNo">889</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.889"></a>
-<span class="sourceLineNo">890</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.890"></a>
-<span class="sourceLineNo">891</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.891"></a>
-<span class="sourceLineNo">892</span> while (isRunning() &&<a name="line.892"></a>
-<span class="sourceLineNo">893</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.893"></a>
-<span class="sourceLineNo">894</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> if (traceEnabled) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.896"></a>
-<span class="sourceLineNo">897</span> }<a name="line.897"></a>
-<span class="sourceLineNo">898</span> Threads.sleep(100);<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span> return oldProcId.longValue();<a name="line.900"></a>
-<span class="sourceLineNo">901</span> }<a name="line.901"></a>
-<span class="sourceLineNo">902</span><a name="line.902"></a>
-<span class="sourceLineNo">903</span> /**<a name="line.903"></a>
-<span class="sourceLineNo">904</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.904"></a>
-<span class="sourceLineNo">905</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.905"></a>
-<span class="sourceLineNo">906</span> */<a name="line.906"></a>
-<span class="sourceLineNo">907</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.907"></a>
-<span class="sourceLineNo">908</span> if (nonceKey == null) return;<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.910"></a>
-<span class="sourceLineNo">911</span> if (procId == null) return;<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span> // if the procedure was not submitted, remove the nonce<a name="line.913"></a>
-<span class="sourceLineNo">914</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.915"></a>
-<span class="sourceLineNo">916</span> }<a name="line.916"></a>
-<span class="sourceLineNo">917</span> }<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.919"></a>
-<span class="sourceLineNo">920</span> private String procName;<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span> public FailedProcedure() {<a name="line.922"></a>
-<span class="sourceLineNo">923</span> }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.925"></a>
-<span class="sourceLineNo">926</span> NonceKey nonceKey, IOException exception) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span> this.procName = procName;<a name="line.927"></a>
-<span class="sourceLineNo">928</span> setProcId(procId);<a name="line.928"></a>
-<span class="sourceLineNo">929</span> setState(ProcedureState.ROLLEDBACK);<a name="line.929"></a>
-<span class="sourceLineNo">930</span> setOwner(owner);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> setNonceKey(nonceKey);<a name="line.931"></a>
-<span class="sourceLineNo">932</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.932"></a>
-<span class="sourceLineNo">933</span> setSubmittedTime(currentTime);<a name="line.933"></a>
-<span class="sourceLineNo">934</span> setLastUpdate(currentTime);<a name="line.934"></a>
-<span class="sourceLineNo">935</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.935"></a>
-<span class="sourceLineNo">936</span> }<a name="line.936"></a>
-<span class="sourceLineNo">937</span><a name="line.937"></a>
-<span class="sourceLineNo">938</span> @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span> public String getProcName() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span> return procName;<a name="line.940"></a>
-<span class="sourceLineNo">941</span> }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span> @Override<a name="line.943"></a>
-<span class="sourceLineNo">944</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.944"></a>
-<span class="sourceLineNo">945</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.945"></a>
-<span class="sourceLineNo">946</span> InterruptedException {<a name="line.946"></a>
-<span class="sourceLineNo">947</span> throw new UnsupportedOperationException();<a name="line.947"></a>
-<span class="sourceLineNo">948</span> }<a name="line.948"></a>
-<span class="sourceLineNo">949</span><a name="line.949"></a>
-<span class="sourceLineNo">950</span> @Override<a name="line.950"></a>
-<span class="sourceLineNo">951</span> protected void rollback(TEnvironment env)<a name="line.951"></a>
-<span class="sourceLineNo">952</span> throws IOException, InterruptedException {<a name="line.952"></a>
-<span class="sourceLineNo">953</span> throw new UnsupportedOperationException();<a name="line.953"></a>
-<span class="sourceLineNo">954</span> }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span> @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span> protected boolean abort(TEnvironment env) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span> throw new UnsupportedOperationException();<a name="line.958"></a>
-<span class="sourceLineNo">959</span> }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span> @Override<a name="line.961"></a>
-<span class="sourceLineNo">962</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.962"></a>
-<span class="sourceLineNo">963</span> throws IOException {<a name="line.963"></a>
-<span class="sourceLineNo">964</span> }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span> @Override<a name="line.966"></a>
-<span class="sourceLineNo">967</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.967"></a>
-<span class="sourceLineNo">968</span> throws IOException {<a name="line.968"></a>
-<span class="sourceLineNo">969</span> }<a name="line.969"></a>
-<span class="sourceLineNo">970</span> }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span> /**<a name="line.972"></a>
-<span class="sourceLineNo">973</span> * If the failure failed before submitting it, we may want to give back the<a name="line.973"></a>
-<span class="sourceLineNo">974</span> * same error to the requests with the same nonceKey.<a name="line.974"></a>
-<span class="sourceLineNo">975</span> *<a name="line.975"></a>
-<span class="sourceLineNo">976</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.976"></a>
-<span class="sourceLineNo">977</span> * @param procName name of the procedure, used to inform the user<a name="line.977"></a>
-<span class="sourceLineNo">978</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.978"></a>
-<span class="sourceLineNo">979</span> * @param exception the failure to report to the user<a name="line.979"></a>
-<span class="sourceLineNo">980</span> */<a name="line.980"></a>
-<span class="sourceLineNo">981</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.981"></a>
-<span class="sourceLineNo">982</span> IOException exception) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span> if (nonceKey == null) {<a name="line.983"></a>
-<span class="sourceLineNo">984</span> return;<a name="line.984"></a>
-<span class="sourceLineNo">985</span> }<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.987"></a>
-<span class="sourceLineNo">988</span> if (procId == null || completed.containsKey(procId)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span> return;<a name="line.989"></a>
-<span class="sourceLineNo">990</span> }<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span> Procedure<TEnvironment> proc =<a name="line.992"></a>
-<span class="sourceLineNo">993</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.993"></a>
-<span class="sourceLineNo">994</span><a name="line.994"></a>
-<span class="sourceLineNo">995</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.995"></a>
-<span class="sourceLineNo">996</span> }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">853</span> /**<a name="line.853"></a>
+<span class="sourceLineNo">854</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.854"></a>
+<span class="sourceLineNo">855</span> * @param nonceGroup<a name="line.855"></a>
+<span class="sourceLineNo">856</span> * @param nonce<a name="line.856"></a>
+<span class="sourceLineNo">857</span> * @return the generated NonceKey<a name="line.857"></a>
+<span class="sourceLineNo">858</span> */<a name="line.858"></a>
+<span class="sourceLineNo">859</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.860"></a>
+<span class="sourceLineNo">861</span> }<a name="line.861"></a>
+<span class="sourceLineNo">862</span><a name="line.862"></a>
+<span class="sourceLineNo">863</span> /**<a name="line.863"></a>
+<span class="sourceLineNo">864</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.864"></a>
+<span class="sourceLineNo">865</span> * A procId will be reserved and on submitProcedure(),<a name="line.865"></a>
+<span class="sourceLineNo">866</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.866"></a>
+<span class="sourceLineNo">867</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.867"></a>
+<span class="sourceLineNo">868</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.868"></a>
+<span class="sourceLineNo">869</span> * and submit the procedure.<a name="line.869"></a>
+<span class="sourceLineNo">870</span> *<a name="line.870"></a>
+<span class="sourceLineNo">871</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.871"></a>
+<span class="sourceLineNo">872</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.872"></a>
+<span class="sourceLineNo">873</span> */<a name="line.873"></a>
+<span class="sourceLineNo">874</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.874"></a>
+<span class="sourceLineNo">875</span> if (nonceKey == null) return -1;<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span> // check if we have already a Reserved ID for the nonce<a name="line.877"></a>
+<span class="sourceLineNo">878</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.878"></a>
+<span class="sourceLineNo">879</span> if (oldProcId == null) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.880"></a>
+<span class="sourceLineNo">881</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.881"></a>
+<span class="sourceLineNo">882</span> final long newProcId = nextProcId();<a name="line.882"></a>
+<span class="sourceLineNo">883</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.883"></a>
+<span class="sourceLineNo">884</span> if (oldProcId == null) return -1;<a name="line.884"></a>
+<span class="sourceLineNo">885</span> }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.887"></a>
+<span class="sourceLineNo">888</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.888"></a>
+<span class="sourceLineNo">889</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.889"></a>
+<span class="sourceLineNo">890</span> while (isRunning() &&<a name="line.890"></a>
+<span class="sourceLineNo">891</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.891"></a>
+<span class="sourceLineNo">892</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> if (traceEnabled) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> Threads.sleep(100);<a name="line.896"></a>
+<span class="sourceLineNo">897</span> }<a name="line.897"></a>
+<span class="sourceLineNo">898</span> return oldProcId.longValue();<a name="line.898"></a>
+<span class="sourceLineNo">899</span> }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span> /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.903"></a>
+<span class="sourceLineNo">904</span> */<a name="line.904"></a>
+<span class="sourceLineNo">905</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span> if (nonceKey == null) return;<a name="line.906"></a>
+<span class="sourceLineNo">907</span><a name="line.907"></a>
+<span class="sourceLineNo">908</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.908"></a>
+<span class="sourceLineNo">909</span> if (procId == null) return;<a name="line.909"></a>
+<span class="sourceLineNo">910</span><a name="line.910"></a>
+<span class="sourceLineNo">911</span> // if the procedure was not submitted, remove the nonce<a name="line.911"></a>
+<span class="sourceLineNo">912</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.912"></a>
+<span class="sourceLineNo">913</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.913"></a>
+<span class="sourceLineNo">914</span> }<a name="line.914"></a>
+<span class="sourceLineNo">915</span> }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.917"></a>
+<span class="sourceLineNo">918</span> private String procName;<a name="line.918"></a>
+<span class="sourceLineNo">919</span><a name="line.919"></a>
+<span class="sourceLineNo">920</span> public FailedProcedure() {<a name="line.920"></a>
+<span class="sourceLineNo">921</span> }<a name="line.921"></a>
+<span class="sourceLineNo">922</span><a name="line.922"></a>
+<span class="sourceLineNo">923</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.923"></a>
+<span class="sourceLineNo">924</span> NonceKey nonceKey, IOException exception) {<a name="line.924"></a>
+<span class="sourceLineNo">925</span> this.procName = procName;<a name="line.925"></a>
+<span class="sourceLineNo">926</span> setProcId(procId);<a name="line.926"></a>
+<span class="sourceLineNo">927</span> setState(ProcedureState.ROLLEDBACK);<a name="line.927"></a>
+<span class="sourceLineNo">928</span> setOwner(owner);<a name="line.928"></a>
+<span class="sourceLineNo">929</span> setNonceKey(nonceKey);<a name="line.929"></a>
+<span class="sourceLineNo">930</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.930"></a>
+<span class="sourceLineNo">931</span> setSubmittedTime(currentTime);<a name="line.931"></a>
+<span class="sourceLineNo">932</span> setLastUpdate(currentTime);<a name="line.932"></a>
+<span class="sourceLineNo">933</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.933"></a>
+<span class="sourceLineNo">934</span> }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span> @Override<a name="line.936"></a>
+<span class="sourceLineNo">937</span> public String getProcName() {<a name="line.937"></a>
+<span class="sourceLineNo">938</span> return procName;<a name="line.938"></a>
+<span class="sourceLineNo">939</span> }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span> @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.942"></a>
+<span class="sourceLineNo">943</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.943"></a>
+<span class="sourceLineNo">944</span> InterruptedException {<a name="line.944"></a>
+<span class="sourceLineNo">945</span> throw new UnsupportedOperationException();<a name="line.945"></a>
+<span class="sourceLineNo">946</span> }<a name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span> @Override<a name="line.948"></a>
+<span class="sourceLineNo">949</span> protected void rollback(TEnvironment env)<a name="line.949"></a>
+<span class="sourceLineNo">950</span> throws IOException, InterruptedException {<a name="line.950"></a>
+<span class="sourceLineNo">951</span> throw new UnsupportedOperationException();<a name="line.951"></a>
+<span class="sourceLineNo">952</span> }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span> @Override<a name="line.954"></a>
+<span class="sourceLineNo">955</span> protected boolean abort(TEnvironment env) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span> throw new UnsupportedOperationException();<a name="line.956"></a>
+<span class="sourceLineNo">957</span> }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span> @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.960"></a>
+<span class="sourceLineNo">961</span> throws IOException {<a name="line.961"></a>
+<span class="sourceLineNo">962</span> }<a name="line.962"></a>
+<span class="sourceLineNo">963</span><a name="line.963"></a>
+<span class="sourceLineNo">964</span> @Override<a name="line.964"></a>
+<span class="sourceLineNo">965</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.965"></a>
+<span class="sourceLineNo">966</span> throws IOException {<a name="line.966"></a>
+<span class="sourceLineNo">967</span> }<a name="line.967"></a>
+<span class="sourceLineNo">968</span> }<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span> /**<a name="line.970"></a>
+<span class="sourceLineNo">971</span> * If the failure failed before submitting it, we may want to give back the<a name="line.971"></a>
+<span class="sourceLineNo">972</span> * same error to the requests with the same nonceKey.<a name="line.972"></a>
+<span class="sourceLineNo">973</span> *<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * @param procName name of the procedure, used to inform the user<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * @param exception the failure to report to the user<a name="line.977"></a>
+<span class="sourceLineNo">978</span> */<a name="line.978"></a>
+<span class="sourceLineNo">979</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.979"></a>
+<span class="sourceLineNo">980</span> IOException exception) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span> if (nonceKey == null) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span> return;<a name="line.982"></a>
+<span class="sourceLineNo">983</span> }<a name="line.983"></a>
+<span class="sourceLineNo">984</span><a name="line.984"></a>
+<span class="sourceLineNo">985</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.985"></a>
+<span class="sourceLineNo">986</span> if (procId == null || completed.containsKey(procId)) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span> return;<a name="line.987"></a>
+<span class="sourceLineNo">988</span> }<a name="line.988"></a>
+<span class="sourceLineNo">989</span><a name="line.989"></a>
+<span class="sourceLineNo">990</span> Procedure<TEnvironment> proc =<a name="line.990"></a>
+<span class="sourceLineNo">991</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.991"></a>
+<span class="sourceLineNo">992</span><a name="line.992"></a>
+<span class="sourceLineNo">993</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.993"></a>
+<span class="sourceLineNo">994</span> }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span> // ==========================================================================<a name="line.996"></a>
+<span class="sourceLineNo">997</span> // Submit/Abort Procedure<a name="line.997"></a>
<span class="sourceLineNo">998</span> // ==========================================================================<a name="line.998"></a>
-<span class="sourceLineNo">999</span> // Submit/Abort Procedure<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> // ==========================================================================<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> /**<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> * Add a new root-procedure to the executor.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> * @param proc the new procedure to execute.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> * @return the procedure id, that can be used to monitor the operation<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> */<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> public long submitProcedure(Procedure<TEnvironment> proc) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> return submitProcedure(proc, null);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span><a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> /**<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> * Bypass a procedure. If the procedure is set to bypass, all the logic in<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> * execute/rollback will be ignored and it will return success, whatever.<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> * It is used to recover buggy stuck procedures, releasing the lock resources<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> * and letting other procedures run. Bypassing one procedure (and its ancestors will<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> * be bypassed automatically) may leave the cluster in a middle state, e.g. region<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> * not assigned, or some hdfs files left behind. After getting rid of those stuck procedures,<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> * the operators may have to do some clean up on hdfs or schedule some assign procedures<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> * to let region online. DO AT YOUR OWN RISK.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> * <p><a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> * A procedure can be bypassed only if<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span> * 1. The procedure is in state of RUNNABLE, WAITING, WAITING_TIMEOUT<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> * or it is a root procedure without any child.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * 2. No other worker thread is executing it<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> * 3. No child procedure has been submitted<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> *<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> * <p><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> * If all the requirements are meet, the procedure and its ancestors will be<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> * bypassed and persisted to WAL.<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> *<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span> * <p><a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> * If the procedure is in WAITING state, will set it to RUNNABLE add it to run queue.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> * TODO: What about WAITING_TIMEOUT?<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> * @param pids the procedure id<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> * @param lockWait time to wait lock<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> * @param force if force set to true, we will bypass the procedure even if it is executing.<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> * This is for procedures which can't break out during executing(due to bug, mostly)<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> * In this case, bypassing the procedure is not enough, since it is already stuck<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> * there. We need to restart the master after bypassing, and letting the problematic<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span> * procedure to execute wth bypass=true, so in that condition, the procedure can be<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> * successfully bypassed.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> * @param recursive We will do an expensive search for children of each pid. EXPENSIVE!<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> * @return true if bypass success<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> * @throws IOException IOException<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span> */<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> public List<Boolean> bypassProcedure(List<Long> pids, long lockWait, boolean force,<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span> boolean recursive)<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> throws IOException {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> List<Boolean> result = new ArrayList<Boolean>(pids.size());<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> for(long pid: pids) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span> result.add(bypassProcedure(pid, lockWait, force, recursive));<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> return result;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span> }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> boolean bypassProcedure(long pid, long lockWait, boolean override, boolean recursive)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span> throws IOException {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> Preconditions.checkArgument(lockWait > 0, "lockWait should be positive");<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span> final Procedure<TEnvironment> procedure = getProcedure(pid);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span> if (procedure == null) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> LOG.debug("Procedure pid={} does not exist, skipping bypass", pid);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> return false;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span> }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span><a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> LOG.debug("Begin bypass {} with lockWait={}, override={}, recursive={}",<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span> procedure, lockWait, override, recursive);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> IdLock.Entry lockEntry = procExecutionLock.tryLockEntry(procedure.getProcId(), lockWait);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> if (lockEntry == null && !override) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> LOG.debug("Waited {} ms, but {} is still running, skipping bypass with force={}",<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> lockWait, procedure, override);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> } else if (lockEntry == null) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> LOG.debug("Waited {} ms, but {} is still running, begin bypass with force={}",<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span> lockWait, procedure, override);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // check whether the procedure is already finished<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> if (procedure.isFinished()) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> LOG.debug("{} is already finished, skipping bypass", procedure);<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> return false;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> if (procedure.hasChildren()) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> if (recursive) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> // EXPENSIVE. Checks each live procedure of which there could be many!!!<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span> // Is there another way to get children of a procedure?<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> LOG.info("Recursive bypass on children of pid={}", procedure.getProcId());<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> this.procedures.forEachValue(1 /*Single-threaded*/,<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> // Transformer<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> v -> v.getParentProcId() == procedure.getProcId()? v: null,<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> // Consumer<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span> v -> {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span
<TRUNCATED>
[08/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 85db2da..a8efa41 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -124,7 +124,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Public
-public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.178">HBaseTestingUtility</a>
+public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.177">HBaseTestingUtility</a>
extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseZKTestingUtility</a></pre>
<div class="block">Facility for testing HBase. Replacement for
old HBaseTestCase and HBaseClusterTestCase functionality.
@@ -140,8 +140,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
region-server-port are overridden such that a random port will be assigned (thus
avoiding port contention if another local HBase instance is already running).
<p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"
- setting it to true.
- Trigger pre commit.</div>
+ setting it to true.</div>
</li>
</ul>
</div>
@@ -2019,7 +2018,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<li class="blockList">
<h4>TEST_DIRECTORY_KEY</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-private static final <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/HBaseTestingUtility.html#line.187">TEST_DIRECTORY_KEY</a></pre>
+private static final <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/HBaseTestingUtility.html#line.186">TEST_DIRECTORY_KEY</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">can be used only with mini dfs</span></div>
<div class="block">System property key to get test directory value. Name is as it is because mini dfs has
hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property
@@ -2036,7 +2035,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>REGIONS_PER_SERVER_KEY</h4>
-<pre>public static final <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/HBaseTestingUtility.html#line.189">REGIONS_PER_SERVER_KEY</a></pre>
+<pre>public static final <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/HBaseTestingUtility.html#line.188">REGIONS_PER_SERVER_KEY</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.REGIONS_PER_SERVER_KEY">Constant Field Values</a></dd>
@@ -2049,7 +2048,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_REGIONS_PER_SERVER</h4>
-<pre>public static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.194">DEFAULT_REGIONS_PER_SERVER</a></pre>
+<pre>public static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.193">DEFAULT_REGIONS_PER_SERVER</a></pre>
<div class="block">The default number of regions per regionserver when creating a pre-split
table.</div>
<dl>
@@ -2064,7 +2063,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>PRESPLIT_TEST_TABLE_KEY</h4>
-<pre>public static final <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/HBaseTestingUtility.html#line.197">PRESPLIT_TEST_TABLE_KEY</a></pre>
+<pre>public static final <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/HBaseTestingUtility.html#line.196">PRESPLIT_TEST_TABLE_KEY</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE_KEY">Constant Field Values</a></dd>
@@ -2077,7 +2076,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>PRESPLIT_TEST_TABLE</h4>
-<pre>public static final boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.198">PRESPLIT_TEST_TABLE</a></pre>
+<pre>public static final boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.197">PRESPLIT_TEST_TABLE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE">Constant Field Values</a></dd>
@@ -2090,7 +2089,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>dfsCluster</h4>
-<pre>private org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.200">dfsCluster</a></pre>
+<pre>private org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.199">dfsCluster</a></pre>
</li>
</ul>
<a name="hbaseCluster">
@@ -2099,7 +2098,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>hbaseCluster</h4>
-<pre>private volatile <a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.202">hbaseCluster</a></pre>
+<pre>private volatile <a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.201">hbaseCluster</a></pre>
</li>
</ul>
<a name="mrCluster">
@@ -2108,7 +2107,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>mrCluster</h4>
-<pre>private org.apache.hadoop.mapred.MiniMRCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.203">mrCluster</a></pre>
+<pre>private org.apache.hadoop.mapred.MiniMRCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.202">mrCluster</a></pre>
</li>
</ul>
<a name="miniClusterRunning">
@@ -2117,7 +2116,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>miniClusterRunning</h4>
-<pre>private volatile boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.206">miniClusterRunning</a></pre>
+<pre>private volatile boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.205">miniClusterRunning</a></pre>
<div class="block">If there is a mini cluster running for this testing utility instance.</div>
</li>
</ul>
@@ -2127,7 +2126,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>hadoopLogDir</h4>
-<pre>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> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.208">hadoopLogDir</a></pre>
+<pre>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> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.207">hadoopLogDir</a></pre>
</li>
</ul>
<a name="dataTestDirOnTestFS">
@@ -2136,7 +2135,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>dataTestDirOnTestFS</h4>
-<pre>private org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.212">dataTestDirOnTestFS</a></pre>
+<pre>private org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.211">dataTestDirOnTestFS</a></pre>
<div class="block">Directory on test filesystem where we put the data for this instance of
HBaseTestingUtility</div>
</li>
@@ -2147,7 +2146,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>connection</h4>
-<pre>private volatile org.apache.hadoop.hbase.client.Connection <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.217">connection</a></pre>
+<pre>private volatile org.apache.hadoop.hbase.client.Connection <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.216">connection</a></pre>
<div class="block">Shared cluster connection.</div>
</li>
</ul>
@@ -2157,7 +2156,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>FS_URI</h4>
-<pre>private static <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/HBaseTestingUtility.html#line.220">FS_URI</a></pre>
+<pre>private static <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/HBaseTestingUtility.html#line.219">FS_URI</a></pre>
<div class="block">Filesystem URI used for map-reduce mini-cluster setup</div>
</li>
</ul>
@@ -2167,7 +2166,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>MEMSTORETS_TAGS_PARAMETRIZED</h4>
-<pre>public static final <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.223">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
+<pre>public static final <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.222">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
<div class="block">This is for unit tests parameterized with a single boolean.</div>
</li>
</ul>
@@ -2177,7 +2176,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>BLOOM_AND_COMPRESSION_COMBINATIONS</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.299">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.298">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
</li>
</ul>
<a name="fam1">
@@ -2186,7 +2185,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>fam1</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1827">fam1</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1826">fam1</a></pre>
</li>
</ul>
<a name="fam2">
@@ -2195,7 +2194,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>fam2</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1828">fam2</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1827">fam2</a></pre>
</li>
</ul>
<a name="fam3">
@@ -2204,7 +2203,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>fam3</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1829">fam3</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1828">fam3</a></pre>
</li>
</ul>
<a name="COLUMNS">
@@ -2213,7 +2212,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>COLUMNS</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1830">COLUMNS</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1829">COLUMNS</a></pre>
</li>
</ul>
<a name="MAXVERSIONS">
@@ -2222,7 +2221,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>MAXVERSIONS</h4>
-<pre>private static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1831">MAXVERSIONS</a></pre>
+<pre>private static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1830">MAXVERSIONS</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.MAXVERSIONS">Constant Field Values</a></dd>
@@ -2235,7 +2234,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>FIRST_CHAR</h4>
-<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1833">FIRST_CHAR</a></pre>
+<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1832">FIRST_CHAR</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.FIRST_CHAR">Constant Field Values</a></dd>
@@ -2248,7 +2247,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>LAST_CHAR</h4>
-<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1834">LAST_CHAR</a></pre>
+<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1833">LAST_CHAR</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.LAST_CHAR">Constant Field Values</a></dd>
@@ -2261,7 +2260,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>START_KEY_BYTES</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1835">START_KEY_BYTES</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1834">START_KEY_BYTES</a></pre>
</li>
</ul>
<a name="START_KEY">
@@ -2270,7 +2269,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>START_KEY</h4>
-<pre>public static final <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/HBaseTestingUtility.html#line.1836">START_KEY</a></pre>
+<pre>public static final <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/HBaseTestingUtility.html#line.1835">START_KEY</a></pre>
</li>
</ul>
<a name="ROWS">
@@ -2279,7 +2278,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>ROWS</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2391">ROWS</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2390">ROWS</a></pre>
<div class="block">All the row values for the data loaded by <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#loadTable-org.apache.hadoop.hbase.client.Table-byte:A-"><code>loadTable(Table, byte[])</code></a></div>
</li>
</ul>
@@ -2289,7 +2288,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>KEYS</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2406">KEYS</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2405">KEYS</a></pre>
</li>
</ul>
<a name="KEYS_FOR_HBA_CREATE_TABLE">
@@ -2298,7 +2297,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>KEYS_FOR_HBA_CREATE_TABLE</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2418">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2417">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
</li>
</ul>
<a name="hbaseAdmin">
@@ -2307,7 +2306,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>hbaseAdmin</h4>
-<pre>private org.apache.hadoop.hbase.client.HBaseAdmin <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2970">hbaseAdmin</a></pre>
+<pre>private org.apache.hadoop.hbase.client.HBaseAdmin <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2969">hbaseAdmin</a></pre>
</li>
</ul>
<a name="random">
@@ -2316,7 +2315,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>random</h4>
-<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3715">random</a></pre>
+<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3714">random</a></pre>
</li>
</ul>
<a name="portAllocator">
@@ -2325,7 +2324,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockListLast">
<li class="blockList">
<h4>portAllocator</h4>
-<pre>private static final <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility.PortAllocator</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3717">portAllocator</a></pre>
+<pre>private static final <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility.PortAllocator</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3716">portAllocator</a></pre>
</li>
</ul>
</li>
@@ -2342,7 +2341,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>HBaseTestingUtility</h4>
-<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.315">HBaseTestingUtility</a>()</pre>
+<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.314">HBaseTestingUtility</a>()</pre>
<div class="block"><p>Create an HBaseTestingUtility using a default configuration.
<p>Initially, all tmp files are written to a local test data directory.
@@ -2361,7 +2360,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockListLast">
<li class="blockList">
<h4>HBaseTestingUtility</h4>
-<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.333">HBaseTestingUtility</a>(@Nullable
+<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.332">HBaseTestingUtility</a>(@Nullable
org.apache.hadoop.conf.Configuration conf)</pre>
<div class="block"><p>Create an HBaseTestingUtility using a given configuration.
@@ -2393,7 +2392,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>available</h4>
-<pre>public static boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.231">available</a>(int port)</pre>
+<pre>public static boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.230">available</a>(int port)</pre>
<div class="block">Checks to see if a specific port is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -2409,7 +2408,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>bloomAndCompressionCombinations</h4>
-<pre>private static <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.263">bloomAndCompressionCombinations</a>()</pre>
+<pre>private static <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.262">bloomAndCompressionCombinations</a>()</pre>
<div class="block">Create all combinations of Bloom filters and compression algorithms for
testing.</div>
</li>
@@ -2420,7 +2419,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>memStoreTSAndTagsCombination</h4>
-<pre>private static <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.277">memStoreTSAndTagsCombination</a>()</pre>
+<pre>private static <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.276">memStoreTSAndTagsCombination</a>()</pre>
<div class="block">Create combination of memstoreTS and tags</div>
</li>
</ul>
@@ -2430,7 +2429,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<ul class="blockList">
<li class="blockList">
<h4>memStoreTSTagsAndOffheapCombination</h4>
-<pre>public static <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.286">memStoreTSTagsAndOffheapCombination</a>()</pre>
+<pre>public static <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><<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>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.285">memStoreTSTagsAndOffheapCombination</a>()</pre>
</li>
</ul>
<a name="createLocalHTU--">
@@ -2440,7 +2439,7 @@ private static final <a href="https://docs.oracle.com/javase/8/docs/api/jav
<li class="blockList">
<h4>createLocalHTU</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.364">createLocalHTU</a>()</pre>
+public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.363">createLocalHTU</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#HBaseTestingUtility--"><code>HBaseTestingUtility()</code></a> instead</span></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -2455,7 +2454,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<li class="blockList">
<h4>createLocalHTU</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.373">createLocalHTU</a>(org.apache.hadoop.conf.Configuration c)</pre>
+public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.372">createLocalHTU</a>(org.apache.hadoop.conf.Configuration c)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#HBaseTestingUtility-org.apache.hadoop.conf.Configuration-"><code>HBaseTestingUtility(Configuration)</code></a> instead</span></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -2469,7 +2468,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>closeRegionAndWAL</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.380">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.Region r)
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.379">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.Region r)
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">Close both the region <code>r</code> and it's underlying WAL. For use in tests.</div>
<dl>
@@ -2484,7 +2483,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>closeRegionAndWAL</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.387">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.HRegion r)
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.386">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.HRegion r)
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">Close both the HRegion <code>r</code> and it's underlying WAL. For use in tests.</div>
<dl>
@@ -2499,7 +2498,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>getConfiguration</h4>
-<pre>public org.apache.hadoop.conf.Configuration <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.406">getConfiguration</a>()</pre>
+<pre>public org.apache.hadoop.conf.Configuration <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.405">getConfiguration</a>()</pre>
<div class="block">Returns this classes's instance of <code>Configuration</code>. Be careful how
you use the returned Configuration since <code>Connection</code> instances
can be shared. The Map of Connections is keyed by the Configuration. If
@@ -2522,7 +2521,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>setHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.410">setHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> hbaseCluster)</pre>
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.409">setHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> hbaseCluster)</pre>
</li>
</ul>
<a name="setupDataTestDir--">
@@ -2531,7 +2530,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>setupDataTestDir</h4>
-<pre>protected org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.431">setupDataTestDir</a>()</pre>
+<pre>protected org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.430">setupDataTestDir</a>()</pre>
<div class="block">Home our data in a dir under <a href="../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html#DEFAULT_BASE_TEST_DIRECTORY"><code>HBaseCommonTestingUtility.DEFAULT_BASE_TEST_DIRECTORY</code></a>.
Give it a random name so can have many concurrent tests running if
we need to. It needs to amend the <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#TEST_DIRECTORY_KEY"><code>TEST_DIRECTORY_KEY</code></a>
@@ -2558,7 +2557,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>createSubDirAndSystemProperty</h4>
-<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.455">createSubDirAndSystemProperty</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> propertyName,
+<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.454">createSubDirAndSystemProperty</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> propertyName,
org.apache.hadoop.fs.Path parent,
<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> subDirName)</pre>
</li>
@@ -2569,7 +2568,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<ul class="blockList">
<li class="blockList">
<h4>getBaseTestDirOnTestFS</h4>
-<pre>private org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.487">getBaseTestDirOnTestFS</a>()
+<pre>private org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.486">getBaseTestDirOnTestFS</a>()
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>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -2590,7 +2589,7 @@ public static <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
<li class="blockList">
<h4>getMetaTableDescriptor</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.498">getMetaTableDescriptor</a>()</pre>
+public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.497">getMetaTableDescriptor</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getMetaTableDescriptorBuilder--"><code>getMetaTableDescriptorBuilder()</code></a></span></div>
<dl>
@@ -2605,7 +2604,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>getMetaTableDescriptorBuilder</h4>
-<pre>public org.apache.hadoop.hbase.client.TableDescriptorBuilder <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.505">getMetaTableDescriptorBuilder</a>()</pre>
+<pre>public org.apache.hadoop.hbase.client.TableDescriptorBuilder <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.504">getMetaTableDescriptorBuilder</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>META table descriptor</dd>
@@ -2618,7 +2617,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>getDataTestDirOnTestFS</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.519">getDataTestDirOnTestFS</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.518">getDataTestDirOnTestFS</a>()
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">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2637,7 +2636,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>getDataTestDirOnTestFS</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.534">getDataTestDirOnTestFS</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> subdirName)
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.533">getDataTestDirOnTestFS</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> subdirName)
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">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2658,7 +2657,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>setupDataTestDirOnTestFS</h4>
-<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.542">setupDataTestDirOnTestFS</a>()
+<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.541">setupDataTestDirOnTestFS</a>()
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">Sets up a path in test filesystem to be used by tests.
Creates a new directory if not already setup.</div>
@@ -2674,7 +2673,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>getNewDataTestDirOnTestFS</h4>
-<pre>private org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.554">getNewDataTestDirOnTestFS</a>()
+<pre>private org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.553">getNewDataTestDirOnTestFS</a>()
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">Sets up a new path in test filesystem to be used by tests.</div>
<dl>
@@ -2689,7 +2688,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.579">cleanupDataTestDirOnTestFS</a>()
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.578">cleanupDataTestDirOnTestFS</a>()
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">Cleans the test data directory on the test filesystem.</div>
<dl>
@@ -2706,7 +2705,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.591">cleanupDataTestDirOnTestFS</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> subdirName)
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.590">cleanupDataTestDirOnTestFS</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> subdirName)
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">Cleans a subdirectory under the test data directory on the test filesystem.</div>
<dl>
@@ -2723,7 +2722,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.603">startMiniDFSCluster</a>(int servers)
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.602">startMiniDFSCluster</a>(int servers)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start a minidfscluster.</div>
<dl>
@@ -2744,7 +2743,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.618">startMiniDFSCluster</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>[] hosts)
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.617">startMiniDFSCluster</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>[] hosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start a minidfscluster.
This is useful if you want to run datanode on distinct hosts for things
@@ -2769,7 +2768,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.636">startMiniDFSCluster</a>(int servers,
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.635">startMiniDFSCluster</a>(int servers,
<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>[] hosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start a minidfscluster.
@@ -2793,7 +2792,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>setFs</h4>
-<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.641">setFs</a>()
+<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.640">setFs</a>()
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2807,7 +2806,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.653">startMiniDFSCluster</a>(int servers,
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.652">startMiniDFSCluster</a>(int servers,
<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>[] racks,
<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>[] hosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2823,7 +2822,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSClusterForTestWAL</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.684">startMiniDFSClusterForTestWAL</a>(int namenodePort)
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.683">startMiniDFSClusterForTestWAL</a>(int namenodePort)
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2837,7 +2836,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>createDirsAndSetProperties</h4>
-<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.692">createDirsAndSetProperties</a>()
+<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.691">createDirsAndSetProperties</a>()
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">This is used before starting HDFS and map-reduce mini-clusters</div>
<dl>
@@ -2852,7 +2851,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>isReadShortCircuitOn</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.720">isReadShortCircuitOn</a>()</pre>
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.719">isReadShortCircuitOn</a>()</pre>
<div class="block">Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.
This allows to specify this parameter on the command line.
If not set, default is true.</div>
@@ -2864,7 +2863,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>enableShortCircuit</h4>
-<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.733">enableShortCircuit</a>()</pre>
+<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.732">enableShortCircuit</a>()</pre>
<div class="block">Enable the short circuit read, unless configured differently.
Set both HBase and HDFS settings, including skipping the hdfs checksum checks.</div>
</li>
@@ -2875,7 +2874,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>createDirAndSetProperty</h4>
-<pre>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> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.748">createDirAndSetProperty</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> relPath,
+<pre>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> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.747">createDirAndSetProperty</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> relPath,
<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> property)</pre>
</li>
</ul>
@@ -2885,7 +2884,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<ul class="blockList">
<li class="blockList">
<h4>shutdownMiniDFSCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.762">shutdownMiniDFSCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.761">shutdownMiniDFSCluster</a>()
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">Shuts down instance created by call to <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniDFSCluster-int-"><code>startMiniDFSCluster(int)</code></a>
or does nothing.</div>
@@ -2902,7 +2901,7 @@ public org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../s
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.781">startMiniCluster</a>(boolean createWALDir)
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.780">startMiniCluster</a>(boolean createWALDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
<div class="block">Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.
@@ -2926,7 +2925,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.797">startMiniCluster</a>(int numSlaves,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.796">startMiniCluster</a>(int numSlaves,
boolean createRootDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
@@ -2952,7 +2951,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.815">startMiniCluster</a>(int numSlaves,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.814">startMiniCluster</a>(int numSlaves,
boolean createRootDir,
boolean createWALDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2980,7 +2979,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.834">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.833">startMiniCluster</a>(int numMasters,
int numSlaves,
boolean createRootDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -3008,7 +3007,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.852">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.851">startMiniCluster</a>(int numMasters,
int numSlaves)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
@@ -3034,7 +3033,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.871">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.870">startMiniCluster</a>(int numMasters,
int numSlaves,
<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>[] dataNodeHosts,
boolean createRootDir)
@@ -3065,7 +3064,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.891">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.890">startMiniCluster</a>(int numMasters,
int numSlaves,
<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>[] dataNodeHosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -3094,7 +3093,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.910">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.909">startMiniCluster</a>(int numMasters,
int numRegionServers,
int numDataNodes)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -3122,7 +3121,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.932">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.931">startMiniCluster</a>(int numMasters,
int numSlaves,
<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>[] dataNodeHosts,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends org.apache.hadoop.hbase.master.HMaster> masterClass,
@@ -3155,7 +3154,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.959">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.958">startMiniCluster</a>(int numMasters,
int numRegionServers,
int numDataNodes,
<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>[] dataNodeHosts,
@@ -3190,7 +3189,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.988">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.987">startMiniCluster</a>(int numMasters,
int numRegionServers,
int numDataNodes,
<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>[] dataNodeHosts,
@@ -3228,7 +3227,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1008">startMiniCluster</a>(int numSlaves)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1007">startMiniCluster</a>(int numSlaves)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.
All other options will use default values, defined in <a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html" title="class in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -3249,7 +3248,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1020">startMiniCluster</a>()
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1019">startMiniCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start up a minicluster of hbase, dfs and zookeeper all using default options.
Option default value can be found in <a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html" title="class in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -3268,7 +3267,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1030">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1029">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.
It modifies Configuration. It homes the cluster data directory under a random
@@ -3287,7 +3286,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1068">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1067">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
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">Starts up mini hbase cluster.
@@ -3311,7 +3310,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1114">startMiniHBaseCluster</a>()
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1113">startMiniHBaseCluster</a>()
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">Starts up mini hbase cluster using default options.
@@ -3333,7 +3332,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1129">startMiniHBaseCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1128">startMiniHBaseCluster</a>(int numMasters,
int numRegionServers)
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>
@@ -3362,7 +3361,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1148">startMiniHBaseCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1147">startMiniHBaseCluster</a>(int numMasters,
int numRegionServers,
<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><<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>> rsPorts)
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>,
@@ -3393,7 +3392,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1171">startMiniHBaseCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1170">startMiniHBaseCluster</a>(int numMasters,
int numRegionServers,
<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><<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>> rsPorts,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends org.apache.hadoop.hbase.master.HMaster> masterClass,
@@ -3431,7 +3430,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>restartHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1187">restartHBaseCluster</a>(int servers)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1186">restartHBaseCluster</a>(int servers)
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">Starts the hbase cluster up again after shutting it down previously in a
@@ -3451,7 +3450,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>getMiniHBaseCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1215">getMiniHBaseCluster</a>()</pre>
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1214">getMiniHBaseCluster</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Current mini hbase cluster. Only has something in it after a call
@@ -3467,7 +3466,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>shutdownMiniCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1228">shutdownMiniCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1227">shutdownMiniCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Stops mini hbase, zk, and hdfs clusters.</div>
<dl>
@@ -3485,7 +3484,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>shutdownMiniHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1242">shutdownMiniHBaseCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1241">shutdownMiniHBaseCluster</a>()
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">Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.</div>
<dl>
@@ -3500,7 +3499,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>getDefaultRootDirPath</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1274">getDefaultRootDirPath</a>(boolean create)
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1273">getDefaultRootDirPath</a>(boolean create)
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">Returns the path to the default root dir the minicluster uses. If <code>create</code>
is true, a new root directory path is fetched irrespective of whether it has been fetched
@@ -3520,7 +3519,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>getDefaultRootDirPath</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1289">getDefaultRootDirPath</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1288">getDefaultRootDirPath</a>()
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">Same as {<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getDefaultRootDirPath-boolean-"><code>getDefaultRootDirPath(boolean create)</code></a>
except that <code>create</code> flag is false.
@@ -3539,7 +3538,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createRootDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1305">createRootDir</a>(boolean create)
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1304">createRootDir</a>(boolean create)
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">Creates an hbase rootdir in user home directory. Also creates hbase
version file. Normally you won't make use of this method. Root hbasedir
@@ -3564,7 +3563,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createRootDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1320">createRootDir</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1319">createRootDir</a>()
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">Same as <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#createRootDir-boolean-"><code>createRootDir(boolean create)</code></a>
except that <code>create</code> flag is false.</div>
@@ -3582,7 +3581,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createWALRootDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1333">createWALRootDir</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1332">createWALRootDir</a>()
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">Creates a hbase walDir in the user's home directory.
Normally you won't make use of this method. Root hbaseWALDir
@@ -3602,7 +3601,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>setHBaseFsTmpDir</h4>
-<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1341">setHBaseFsTmpDir</a>()
+<pre>private void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1340">setHBaseFsTmpDir</a>()
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>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -3616,7 +3615,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>flush</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbas
<TRUNCATED>
[24/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
index 688bd4e..37bf508 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
@@ -589,1651 +589,1649 @@
<span class="sourceLineNo">581</span> LOG.debug("Loading {}", proc);<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span> Long rootProcId = getRootProcedureId(proc);<a name="line.583"></a>
-<span class="sourceLineNo">584</span> if (rootProcId == null) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> // The 'proc' was ready to run but the root procedure was rolledback?<a name="line.585"></a>
-<span class="sourceLineNo">586</span> scheduler.addBack(proc);<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (proc.hasParent()) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.591"></a>
-<span class="sourceLineNo">592</span> // corrupted procedures are handled later at step 3<a name="line.592"></a>
-<span class="sourceLineNo">593</span> if (parent != null && !proc.isFinished()) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> parent.incChildrenLatch();<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.598"></a>
-<span class="sourceLineNo">599</span> procStack.loadStack(proc);<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span> proc.setRootProcId(rootProcId);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> switch (proc.getState()) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> case RUNNABLE:<a name="line.603"></a>
-<span class="sourceLineNo">604</span> runnableList.add(proc);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> break;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> case WAITING:<a name="line.606"></a>
-<span class="sourceLineNo">607</span> waitingList.add(proc);<a name="line.607"></a>
-<span class="sourceLineNo">608</span> break;<a name="line.608"></a>
-<span class="sourceLineNo">609</span> case WAITING_TIMEOUT:<a name="line.609"></a>
-<span class="sourceLineNo">610</span> waitingTimeoutList.add(proc);<a name="line.610"></a>
-<span class="sourceLineNo">611</span> break;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> case FAILED:<a name="line.612"></a>
-<span class="sourceLineNo">613</span> failedList.add(proc);<a name="line.613"></a>
-<span class="sourceLineNo">614</span> break;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> case ROLLEDBACK:<a name="line.615"></a>
-<span class="sourceLineNo">616</span> case INITIALIZING:<a name="line.616"></a>
-<span class="sourceLineNo">617</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> LOG.error(msg);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throw new UnsupportedOperationException(msg);<a name="line.619"></a>
-<span class="sourceLineNo">620</span> default:<a name="line.620"></a>
-<span class="sourceLineNo">621</span> break;<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> // 4. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.625"></a>
-<span class="sourceLineNo">626</span> waitingList.forEach(proc -> {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> if (!proc.hasChildren()) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span> // Normally, WAITING procedures should be waken by its children.<a name="line.628"></a>
-<span class="sourceLineNo">629</span> // But, there is a case that, all the children are successful and before<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // they can wake up their parent procedure, the master was killed.<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // are not loaded because of their SUCCESS state.<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // So we need to continue to run this WAITING procedure. But before<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // will throw:<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.637"></a>
-<span class="sourceLineNo">638</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> runnableList.add(proc);<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span> });<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span> // 5. Push the procedures to the timeout executor<a name="line.643"></a>
-<span class="sourceLineNo">644</span> waitingTimeoutList.forEach(proc -> {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> proc.afterReplay(getEnvironment());<a name="line.645"></a>
-<span class="sourceLineNo">646</span> timeoutExecutor.add(proc);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> });<a name="line.647"></a>
-<span class="sourceLineNo">648</span> // 6. restore locks<a name="line.648"></a>
-<span class="sourceLineNo">649</span> restoreLocks();<a name="line.649"></a>
-<span class="sourceLineNo">650</span> // 7. Push the procedure to the scheduler<a name="line.650"></a>
-<span class="sourceLineNo">651</span> failedList.forEach(scheduler::addBack);<a name="line.651"></a>
-<span class="sourceLineNo">652</span> runnableList.forEach(p -> {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> p.afterReplay(getEnvironment());<a name="line.653"></a>
-<span class="sourceLineNo">654</span> if (!p.hasParent()) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.655"></a>
-<span class="sourceLineNo">656</span> }<a name="line.656"></a>
-<span class="sourceLineNo">657</span> scheduler.addBack(p);<a name="line.657"></a>
-<span class="sourceLineNo">658</span> });<a name="line.658"></a>
-<span class="sourceLineNo">659</span> }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span> /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.662"></a>
-<span class="sourceLineNo">663</span> * <p/><a name="line.663"></a>
-<span class="sourceLineNo">664</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.664"></a>
-<span class="sourceLineNo">665</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.665"></a>
-<span class="sourceLineNo">666</span> * pending and in-progress procedures.<a name="line.666"></a>
-<span class="sourceLineNo">667</span> * @param numThreads number of threads available for procedure execution.<a name="line.667"></a>
-<span class="sourceLineNo">668</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.668"></a>
-<span class="sourceLineNo">669</span> * is found on replay. otherwise false.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> */<a name="line.670"></a>
-<span class="sourceLineNo">671</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> // We have numThreads executor + one timer thread used for timing out<a name="line.672"></a>
-<span class="sourceLineNo">673</span> // procedures and triggering periodic procedures.<a name="line.673"></a>
-<span class="sourceLineNo">674</span> this.corePoolSize = numThreads;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> this.maxPoolSize = 10 * numThreads;<a name="line.675"></a>
-<span class="sourceLineNo">676</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.676"></a>
-<span class="sourceLineNo">677</span> corePoolSize, maxPoolSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.679"></a>
-<span class="sourceLineNo">680</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span> // Create the workers<a name="line.682"></a>
-<span class="sourceLineNo">683</span> workerId.set(0);<a name="line.683"></a>
-<span class="sourceLineNo">684</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.684"></a>
-<span class="sourceLineNo">685</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">584</span> // The orphan procedures will be passed to handleCorrupted, so add an assert here<a name="line.584"></a>
+<span class="sourceLineNo">585</span> assert rootProcId != null;<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (proc.hasParent()) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> Procedure<TEnvironment> parent = procedures.get(proc.getParentProcId());<a name="line.588"></a>
+<span class="sourceLineNo">589</span> if (parent != null && !proc.isFinished()) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> parent.incChildrenLatch();<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> RootProcedureState<TEnvironment> procStack = rollbackStack.get(rootProcId);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> procStack.loadStack(proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span> proc.setRootProcId(rootProcId);<a name="line.597"></a>
+<span class="sourceLineNo">598</span> switch (proc.getState()) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> case RUNNABLE:<a name="line.599"></a>
+<span class="sourceLineNo">600</span> runnableList.add(proc);<a name="line.600"></a>
+<span class="sourceLineNo">601</span> break;<a name="line.601"></a>
+<span class="sourceLineNo">602</span> case WAITING:<a name="line.602"></a>
+<span class="sourceLineNo">603</span> waitingList.add(proc);<a name="line.603"></a>
+<span class="sourceLineNo">604</span> break;<a name="line.604"></a>
+<span class="sourceLineNo">605</span> case WAITING_TIMEOUT:<a name="line.605"></a>
+<span class="sourceLineNo">606</span> waitingTimeoutList.add(proc);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> break;<a name="line.607"></a>
+<span class="sourceLineNo">608</span> case FAILED:<a name="line.608"></a>
+<span class="sourceLineNo">609</span> failedList.add(proc);<a name="line.609"></a>
+<span class="sourceLineNo">610</span> break;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> case ROLLEDBACK:<a name="line.611"></a>
+<span class="sourceLineNo">612</span> case INITIALIZING:<a name="line.612"></a>
+<span class="sourceLineNo">613</span> String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.613"></a>
+<span class="sourceLineNo">614</span> LOG.error(msg);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> throw new UnsupportedOperationException(msg);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> default:<a name="line.616"></a>
+<span class="sourceLineNo">617</span> break;<a name="line.617"></a>
+<span class="sourceLineNo">618</span> }<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span> // 3. Check the waiting procedures to see if some of them can be added to runnable.<a name="line.621"></a>
+<span class="sourceLineNo">622</span> waitingList.forEach(proc -> {<a name="line.622"></a>
+<span class="sourceLineNo">623</span> if (!proc.hasChildren()) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // Normally, WAITING procedures should be waken by its children.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // But, there is a case that, all the children are successful and before<a name="line.625"></a>
+<span class="sourceLineNo">626</span> // they can wake up their parent procedure, the master was killed.<a name="line.626"></a>
+<span class="sourceLineNo">627</span> // So, during recovering the procedures from ProcedureWal, its children<a name="line.627"></a>
+<span class="sourceLineNo">628</span> // are not loaded because of their SUCCESS state.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // So we need to continue to run this WAITING procedure. But before<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // executing, we need to set its state to RUNNABLE, otherwise, a exception<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // will throw:<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // Preconditions.checkArgument(procedure.getState() == ProcedureState.RUNNABLE,<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // "NOT RUNNABLE! " + procedure.toString());<a name="line.633"></a>
+<span class="sourceLineNo">634</span> proc.setState(ProcedureState.RUNNABLE);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> runnableList.add(proc);<a name="line.635"></a>
+<span class="sourceLineNo">636</span> } else {<a name="line.636"></a>
+<span class="sourceLineNo">637</span> proc.afterReplay(getEnvironment());<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span> });<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span> // 4. Push the procedures to the timeout executor<a name="line.641"></a>
+<span class="sourceLineNo">642</span> waitingTimeoutList.forEach(proc -> {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> proc.afterReplay(getEnvironment());<a name="line.643"></a>
+<span class="sourceLineNo">644</span> timeoutExecutor.add(proc);<a name="line.644"></a>
+<span class="sourceLineNo">645</span> });<a name="line.645"></a>
+<span class="sourceLineNo">646</span> // 5. restore locks<a name="line.646"></a>
+<span class="sourceLineNo">647</span> restoreLocks();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> // 6. Push the procedure to the scheduler<a name="line.648"></a>
+<span class="sourceLineNo">649</span> failedList.forEach(scheduler::addBack);<a name="line.649"></a>
+<span class="sourceLineNo">650</span> runnableList.forEach(p -> {<a name="line.650"></a>
+<span class="sourceLineNo">651</span> p.afterReplay(getEnvironment());<a name="line.651"></a>
+<span class="sourceLineNo">652</span> if (!p.hasParent()) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> sendProcedureLoadedNotification(p.getProcId());<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> scheduler.addBack(p);<a name="line.655"></a>
+<span class="sourceLineNo">656</span> });<a name="line.656"></a>
+<span class="sourceLineNo">657</span> }<a name="line.657"></a>
+<span class="sourceLineNo">658</span><a name="line.658"></a>
+<span class="sourceLineNo">659</span> /**<a name="line.659"></a>
+<span class="sourceLineNo">660</span> * Initialize the procedure executor, but do not start workers. We will start them later.<a name="line.660"></a>
+<span class="sourceLineNo">661</span> * <p/><a name="line.661"></a>
+<span class="sourceLineNo">662</span> * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to recover the lease, and<a name="line.662"></a>
+<span class="sourceLineNo">663</span> * ensure a single executor, and start the procedure replay to resume and recover the previous<a name="line.663"></a>
+<span class="sourceLineNo">664</span> * pending and in-progress procedures.<a name="line.664"></a>
+<span class="sourceLineNo">665</span> * @param numThreads number of threads available for procedure execution.<a name="line.665"></a>
+<span class="sourceLineNo">666</span> * @param abortOnCorruption true if you want to abort your service in case a corrupted procedure<a name="line.666"></a>
+<span class="sourceLineNo">667</span> * is found on replay. otherwise false.<a name="line.667"></a>
+<span class="sourceLineNo">668</span> */<a name="line.668"></a>
+<span class="sourceLineNo">669</span> public void init(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> // We have numThreads executor + one timer thread used for timing out<a name="line.670"></a>
+<span class="sourceLineNo">671</span> // procedures and triggering periodic procedures.<a name="line.671"></a>
+<span class="sourceLineNo">672</span> this.corePoolSize = numThreads;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> this.maxPoolSize = 10 * numThreads;<a name="line.673"></a>
+<span class="sourceLineNo">674</span> LOG.info("Starting {} core workers (bigger of cpus/4 or 16) with max (burst) worker count={}",<a name="line.674"></a>
+<span class="sourceLineNo">675</span> corePoolSize, maxPoolSize);<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> this.threadGroup = new ThreadGroup("PEWorkerGroup");<a name="line.677"></a>
+<span class="sourceLineNo">678</span> this.timeoutExecutor = new TimeoutExecutorThread<>(this, threadGroup);<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span> // Create the workers<a name="line.680"></a>
+<span class="sourceLineNo">681</span> workerId.set(0);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> workerThreads = new CopyOnWriteArrayList<>();<a name="line.682"></a>
+<span class="sourceLineNo">683</span> for (int i = 0; i < corePoolSize; ++i) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span> workerThreads.add(new WorkerThread(threadGroup));<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> long st, et;<a name="line.687"></a>
<span class="sourceLineNo">688</span><a name="line.688"></a>
-<span class="sourceLineNo">689</span> long st, et;<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span> // Acquire the store lease.<a name="line.691"></a>
-<span class="sourceLineNo">692</span> st = System.nanoTime();<a name="line.692"></a>
-<span class="sourceLineNo">693</span> store.recoverLease();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> et = System.nanoTime();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.695"></a>
-<span class="sourceLineNo">696</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span> // start the procedure scheduler<a name="line.698"></a>
-<span class="sourceLineNo">699</span> scheduler.start();<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> // TODO: Split in two steps.<a name="line.701"></a>
-<span class="sourceLineNo">702</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.702"></a>
-<span class="sourceLineNo">703</span> // The first one will make sure that we have the latest id,<a name="line.703"></a>
-<span class="sourceLineNo">704</span> // so we can start the threads and accept new procedures.<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // The second step will do the actual load of old procedures.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> st = System.nanoTime();<a name="line.706"></a>
-<span class="sourceLineNo">707</span> load(abortOnCorruption);<a name="line.707"></a>
-<span class="sourceLineNo">708</span> et = System.nanoTime();<a name="line.708"></a>
-<span class="sourceLineNo">709</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.709"></a>
-<span class="sourceLineNo">710</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.710"></a>
-<span class="sourceLineNo">711</span> }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></a>
-<span class="sourceLineNo">713</span> /**<a name="line.713"></a>
-<span class="sourceLineNo">714</span> * Start the workers.<a name="line.714"></a>
-<span class="sourceLineNo">715</span> */<a name="line.715"></a>
-<span class="sourceLineNo">716</span> public void startWorkers() throws IOException {<a name="line.716"></a>
-<span class="sourceLineNo">717</span> if (!running.compareAndSet(false, true)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Already running");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> return;<a name="line.719"></a>
-<span class="sourceLineNo">720</span> }<a name="line.720"></a>
-<span class="sourceLineNo">721</span> // Start the executors. Here we must have the lastProcId set.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.722"></a>
-<span class="sourceLineNo">723</span> timeoutExecutor.start();<a name="line.723"></a>
-<span class="sourceLineNo">724</span> for (WorkerThread worker: workerThreads) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span> worker.start();<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> // Internal chores<a name="line.728"></a>
-<span class="sourceLineNo">729</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span> // Add completed cleaner chore<a name="line.731"></a>
-<span class="sourceLineNo">732</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.732"></a>
-<span class="sourceLineNo">733</span> }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span> public void stop() {<a name="line.735"></a>
-<span class="sourceLineNo">736</span> if (!running.getAndSet(false)) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span> return;<a name="line.737"></a>
-<span class="sourceLineNo">738</span> }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span> LOG.info("Stopping");<a name="line.740"></a>
-<span class="sourceLineNo">741</span> scheduler.stop();<a name="line.741"></a>
-<span class="sourceLineNo">742</span> timeoutExecutor.sendStopSignal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> @VisibleForTesting<a name="line.745"></a>
-<span class="sourceLineNo">746</span> public void join() {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> assert !isRunning() : "expected not running";<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span> // stop the timeout executor<a name="line.749"></a>
-<span class="sourceLineNo">750</span> timeoutExecutor.awaitTermination();<a name="line.750"></a>
-<span class="sourceLineNo">751</span><a name="line.751"></a>
-<span class="sourceLineNo">752</span> // stop the worker threads<a name="line.752"></a>
-<span class="sourceLineNo">753</span> for (WorkerThread worker: workerThreads) {<a name="line.753"></a>
-<span class="sourceLineNo">754</span> worker.awaitTermination();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span> // Destroy the Thread Group for the executors<a name="line.757"></a>
-<span class="sourceLineNo">758</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.758"></a>
-<span class="sourceLineNo">759</span> try {<a name="line.759"></a>
-<span class="sourceLineNo">760</span> threadGroup.destroy();<a name="line.760"></a>
-<span class="sourceLineNo">761</span> } catch (IllegalThreadStateException e) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.threadGroup, e.getMessage());<a name="line.763"></a>
-<span class="sourceLineNo">764</span> // This dumps list of threads on STDOUT.<a name="line.764"></a>
-<span class="sourceLineNo">765</span> this.threadGroup.list();<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span> // reset the in-memory state for testing<a name="line.768"></a>
-<span class="sourceLineNo">769</span> completed.clear();<a name="line.769"></a>
-<span class="sourceLineNo">770</span> rollbackStack.clear();<a name="line.770"></a>
-<span class="sourceLineNo">771</span> procedures.clear();<a name="line.771"></a>
-<span class="sourceLineNo">772</span> nonceKeysToProcIdsMap.clear();<a name="line.772"></a>
-<span class="sourceLineNo">773</span> scheduler.clear();<a name="line.773"></a>
-<span class="sourceLineNo">774</span> lastProcId.set(-1);<a name="line.774"></a>
-<span class="sourceLineNo">775</span> }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span> public void refreshConfiguration(final Configuration conf) {<a name="line.777"></a>
-<span class="sourceLineNo">778</span> this.conf = conf;<a name="line.778"></a>
-<span class="sourceLineNo">779</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.779"></a>
-<span class="sourceLineNo">780</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.780"></a>
-<span class="sourceLineNo">781</span> }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">689</span> // Acquire the store lease.<a name="line.689"></a>
+<span class="sourceLineNo">690</span> st = System.nanoTime();<a name="line.690"></a>
+<span class="sourceLineNo">691</span> store.recoverLease();<a name="line.691"></a>
+<span class="sourceLineNo">692</span> et = System.nanoTime();<a name="line.692"></a>
+<span class="sourceLineNo">693</span> LOG.info("Recovered {} lease in {}", store.getClass().getSimpleName(),<a name="line.693"></a>
+<span class="sourceLineNo">694</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> // start the procedure scheduler<a name="line.696"></a>
+<span class="sourceLineNo">697</span> scheduler.start();<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> // TODO: Split in two steps.<a name="line.699"></a>
+<span class="sourceLineNo">700</span> // TODO: Handle corrupted procedures (currently just a warn)<a name="line.700"></a>
+<span class="sourceLineNo">701</span> // The first one will make sure that we have the latest id,<a name="line.701"></a>
+<span class="sourceLineNo">702</span> // so we can start the threads and accept new procedures.<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // The second step will do the actual load of old procedures.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> st = System.nanoTime();<a name="line.704"></a>
+<span class="sourceLineNo">705</span> load(abortOnCorruption);<a name="line.705"></a>
+<span class="sourceLineNo">706</span> et = System.nanoTime();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> LOG.info("Loaded {} in {}", store.getClass().getSimpleName(),<a name="line.707"></a>
+<span class="sourceLineNo">708</span> StringUtils.humanTimeDiff(TimeUnit.NANOSECONDS.toMillis(et - st)));<a name="line.708"></a>
+<span class="sourceLineNo">709</span> }<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span> /**<a name="line.711"></a>
+<span class="sourceLineNo">712</span> * Start the workers.<a name="line.712"></a>
+<span class="sourceLineNo">713</span> */<a name="line.713"></a>
+<span class="sourceLineNo">714</span> public void startWorkers() throws IOException {<a name="line.714"></a>
+<span class="sourceLineNo">715</span> if (!running.compareAndSet(false, true)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Already running");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> return;<a name="line.717"></a>
+<span class="sourceLineNo">718</span> }<a name="line.718"></a>
+<span class="sourceLineNo">719</span> // Start the executors. Here we must have the lastProcId set.<a name="line.719"></a>
+<span class="sourceLineNo">720</span> LOG.trace("Start workers {}", workerThreads.size());<a name="line.720"></a>
+<span class="sourceLineNo">721</span> timeoutExecutor.start();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (WorkerThread worker: workerThreads) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> worker.start();<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span> // Internal chores<a name="line.726"></a>
+<span class="sourceLineNo">727</span> timeoutExecutor.add(new WorkerMonitor());<a name="line.727"></a>
+<span class="sourceLineNo">728</span><a name="line.728"></a>
+<span class="sourceLineNo">729</span> // Add completed cleaner chore<a name="line.729"></a>
+<span class="sourceLineNo">730</span> addChore(new CompletedProcedureCleaner<>(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.730"></a>
+<span class="sourceLineNo">731</span> }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span> public void stop() {<a name="line.733"></a>
+<span class="sourceLineNo">734</span> if (!running.getAndSet(false)) {<a name="line.734"></a>
+<span class="sourceLineNo">735</span> return;<a name="line.735"></a>
+<span class="sourceLineNo">736</span> }<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span> LOG.info("Stopping");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> scheduler.stop();<a name="line.739"></a>
+<span class="sourceLineNo">740</span> timeoutExecutor.sendStopSignal();<a name="line.740"></a>
+<span class="sourceLineNo">741</span> }<a name="line.741"></a>
+<span class="sourceLineNo">742</span><a name="line.742"></a>
+<span class="sourceLineNo">743</span> @VisibleForTesting<a name="line.743"></a>
+<span class="sourceLineNo">744</span> public void join() {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> assert !isRunning() : "expected not running";<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span> // stop the timeout executor<a name="line.747"></a>
+<span class="sourceLineNo">748</span> timeoutExecutor.awaitTermination();<a name="line.748"></a>
+<span class="sourceLineNo">749</span><a name="line.749"></a>
+<span class="sourceLineNo">750</span> // stop the worker threads<a name="line.750"></a>
+<span class="sourceLineNo">751</span> for (WorkerThread worker: workerThreads) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span> worker.awaitTermination();<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> // Destroy the Thread Group for the executors<a name="line.755"></a>
+<span class="sourceLineNo">756</span> // TODO: Fix. #join is not place to destroy resources.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> try {<a name="line.757"></a>
+<span class="sourceLineNo">758</span> threadGroup.destroy();<a name="line.758"></a>
+<span class="sourceLineNo">759</span> } catch (IllegalThreadStateException e) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span> LOG.error("ThreadGroup {} contains running threads; {}: See STDOUT",<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.threadGroup, e.getMessage());<a name="line.761"></a>
+<span class="sourceLineNo">762</span> // This dumps list of threads on STDOUT.<a name="line.762"></a>
+<span class="sourceLineNo">763</span> this.threadGroup.list();<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span><a name="line.765"></a>
+<span class="sourceLineNo">766</span> // reset the in-memory state for testing<a name="line.766"></a>
+<span class="sourceLineNo">767</span> completed.clear();<a name="line.767"></a>
+<span class="sourceLineNo">768</span> rollbackStack.clear();<a name="line.768"></a>
+<span class="sourceLineNo">769</span> procedures.clear();<a name="line.769"></a>
+<span class="sourceLineNo">770</span> nonceKeysToProcIdsMap.clear();<a name="line.770"></a>
+<span class="sourceLineNo">771</span> scheduler.clear();<a name="line.771"></a>
+<span class="sourceLineNo">772</span> lastProcId.set(-1);<a name="line.772"></a>
+<span class="sourceLineNo">773</span> }<a name="line.773"></a>
+<span class="sourceLineNo">774</span><a name="line.774"></a>
+<span class="sourceLineNo">775</span> public void refreshConfiguration(final Configuration conf) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span> this.conf = conf;<a name="line.776"></a>
+<span class="sourceLineNo">777</span> setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.777"></a>
+<span class="sourceLineNo">778</span> DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.778"></a>
+<span class="sourceLineNo">779</span> }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span> // ==========================================================================<a name="line.781"></a>
+<span class="sourceLineNo">782</span> // Accessors<a name="line.782"></a>
<span class="sourceLineNo">783</span> // ==========================================================================<a name="line.783"></a>
-<span class="sourceLineNo">784</span> // Accessors<a name="line.784"></a>
-<span class="sourceLineNo">785</span> // ==========================================================================<a name="line.785"></a>
-<span class="sourceLineNo">786</span> public boolean isRunning() {<a name="line.786"></a>
-<span class="sourceLineNo">787</span> return running.get();<a name="line.787"></a>
-<span class="sourceLineNo">788</span> }<a name="line.788"></a>
-<span class="sourceLineNo">789</span><a name="line.789"></a>
-<span class="sourceLineNo">790</span> /**<a name="line.790"></a>
-<span class="sourceLineNo">791</span> * @return the current number of worker threads.<a name="line.791"></a>
-<span class="sourceLineNo">792</span> */<a name="line.792"></a>
-<span class="sourceLineNo">793</span> public int getWorkerThreadCount() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span> return workerThreads.size();<a name="line.794"></a>
-<span class="sourceLineNo">795</span> }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span> /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span> * @return the core pool size settings.<a name="line.798"></a>
-<span class="sourceLineNo">799</span> */<a name="line.799"></a>
-<span class="sourceLineNo">800</span> public int getCorePoolSize() {<a name="line.800"></a>
-<span class="sourceLineNo">801</span> return corePoolSize;<a name="line.801"></a>
-<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span> public int getActiveExecutorCount() {<a name="line.804"></a>
-<span class="sourceLineNo">805</span> return activeExecutorCount.get();<a name="line.805"></a>
-<span class="sourceLineNo">806</span> }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span> public TEnvironment getEnvironment() {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.environment;<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> public ProcedureStore getStore() {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> return this.store;<a name="line.813"></a>
-<span class="sourceLineNo">814</span> }<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span> ProcedureScheduler getScheduler() {<a name="line.816"></a>
-<span class="sourceLineNo">817</span> return scheduler;<a name="line.817"></a>
-<span class="sourceLineNo">818</span> }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.821"></a>
-<span class="sourceLineNo">822</span> this.scheduler.signalAll();<a name="line.822"></a>
-<span class="sourceLineNo">823</span> }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
+<span class="sourceLineNo">784</span> public boolean isRunning() {<a name="line.784"></a>
+<span class="sourceLineNo">785</span> return running.get();<a name="line.785"></a>
+<span class="sourceLineNo">786</span> }<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span> /**<a name="line.788"></a>
+<span class="sourceLineNo">789</span> * @return the current number of worker threads.<a name="line.789"></a>
+<span class="sourceLineNo">790</span> */<a name="line.790"></a>
+<span class="sourceLineNo">791</span> public int getWorkerThreadCount() {<a name="line.791"></a>
+<span class="sourceLineNo">792</span> return workerThreads.size();<a name="line.792"></a>
+<span class="sourceLineNo">793</span> }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span> * @return the core pool size settings.<a name="line.796"></a>
+<span class="sourceLineNo">797</span> */<a name="line.797"></a>
+<span class="sourceLineNo">798</span> public int getCorePoolSize() {<a name="line.798"></a>
+<span class="sourceLineNo">799</span> return corePoolSize;<a name="line.799"></a>
+<span class="sourceLineNo">800</span> }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span> public int getActiveExecutorCount() {<a name="line.802"></a>
+<span class="sourceLineNo">803</span> return activeExecutorCount.get();<a name="line.803"></a>
+<span class="sourceLineNo">804</span> }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span> public TEnvironment getEnvironment() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.environment;<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> public ProcedureStore getStore() {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> return this.store;<a name="line.811"></a>
+<span class="sourceLineNo">812</span> }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span> ProcedureScheduler getScheduler() {<a name="line.814"></a>
+<span class="sourceLineNo">815</span> return scheduler;<a name="line.815"></a>
+<span class="sourceLineNo">816</span> }<a name="line.816"></a>
+<span class="sourceLineNo">817</span><a name="line.817"></a>
+<span class="sourceLineNo">818</span> public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.819"></a>
+<span class="sourceLineNo">820</span> this.scheduler.signalAll();<a name="line.820"></a>
+<span class="sourceLineNo">821</span> }<a name="line.821"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span> public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span><a name="line.826"></a>
+<span class="sourceLineNo">827</span> // ==========================================================================<a name="line.827"></a>
+<span class="sourceLineNo">828</span> // Submit/Remove Chores<a name="line.828"></a>
<span class="sourceLineNo">829</span> // ==========================================================================<a name="line.829"></a>
-<span class="sourceLineNo">830</span> // Submit/Remove Chores<a name="line.830"></a>
-<span class="sourceLineNo">831</span> // ==========================================================================<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
-<span class="sourceLineNo">834</span> * Add a chore procedure to the executor<a name="line.834"></a>
-<span class="sourceLineNo">835</span> * @param chore the chore to add<a name="line.835"></a>
-<span class="sourceLineNo">836</span> */<a name="line.836"></a>
-<span class="sourceLineNo">837</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.837"></a>
-<span class="sourceLineNo">838</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.838"></a>
-<span class="sourceLineNo">839</span> timeoutExecutor.add(chore);<a name="line.839"></a>
-<span class="sourceLineNo">840</span> }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span> /**<a name="line.842"></a>
-<span class="sourceLineNo">843</span> * Remove a chore procedure from the executor<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * @param chore the chore to remove<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return whether the chore is removed, or it will be removed later<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> chore.setState(ProcedureState.SUCCESS);<a name="line.848"></a>
-<span class="sourceLineNo">849</span> return timeoutExecutor.remove(chore);<a name="line.849"></a>
-<span class="sourceLineNo">850</span> }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span> /**<a name="line.831"></a>
+<span class="sourceLineNo">832</span> * Add a chore procedure to the executor<a name="line.832"></a>
+<span class="sourceLineNo">833</span> * @param chore the chore to add<a name="line.833"></a>
+<span class="sourceLineNo">834</span> */<a name="line.834"></a>
+<span class="sourceLineNo">835</span> public void addChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.835"></a>
+<span class="sourceLineNo">836</span> chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.836"></a>
+<span class="sourceLineNo">837</span> timeoutExecutor.add(chore);<a name="line.837"></a>
+<span class="sourceLineNo">838</span> }<a name="line.838"></a>
+<span class="sourceLineNo">839</span><a name="line.839"></a>
+<span class="sourceLineNo">840</span> /**<a name="line.840"></a>
+<span class="sourceLineNo">841</span> * Remove a chore procedure from the executor<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * @param chore the chore to remove<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return whether the chore is removed, or it will be removed later<a name="line.843"></a>
+<span class="sourceLineNo">844</span> */<a name="line.844"></a>
+<span class="sourceLineNo">845</span> public boolean removeChore(ProcedureInMemoryChore<TEnvironment> chore) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span> chore.setState(ProcedureState.SUCCESS);<a name="line.846"></a>
+<span class="sourceLineNo">847</span> return timeoutExecutor.remove(chore);<a name="line.847"></a>
+<span class="sourceLineNo">848</span> }<a name="line.848"></a>
+<span class="sourceLineNo">849</span><a name="line.849"></a>
+<span class="sourceLineNo">850</span> // ==========================================================================<a name="line.850"></a>
+<span class="sourceLineNo">851</span> // Nonce Procedure helpers<a name="line.851"></a>
<span class="sourceLineNo">852</span> // ==========================================================================<a name="line.852"></a>
-<span class="sourceLineNo">853</span> // Nonce Procedure helpers<a name="line.853"></a>
-<span class="sourceLineNo">854</span> // ==========================================================================<a name="line.854"></a>
-<span class="sourceLineNo">855</span> /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.856"></a>
-<span class="sourceLineNo">857</span> * @param nonceGroup<a name="line.857"></a>
-<span class="sourceLineNo">858</span> * @param nonce<a name="line.858"></a>
-<span class="sourceLineNo">859</span> * @return the generated NonceKey<a name="line.859"></a>
-<span class="sourceLineNo">860</span> */<a name="line.860"></a>
-<span class="sourceLineNo">861</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.862"></a>
-<span class="sourceLineNo">863</span> }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span> /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.866"></a>
-<span class="sourceLineNo">867</span> * A procId will be reserved and on submitProcedure(),<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.868"></a>
-<span class="sourceLineNo">869</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.870"></a>
-<span class="sourceLineNo">871</span> * and submit the procedure.<a name="line.871"></a>
-<span class="sourceLineNo">872</span> *<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.873"></a>
-<span class="sourceLineNo">874</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.874"></a>
-<span class="sourceLineNo">875</span> */<a name="line.875"></a>
-<span class="sourceLineNo">876</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> if (nonceKey == null) return -1;<a name="line.877"></a>
-<span class="sourceLineNo">878</span><a name="line.878"></a>
-<span class="sourceLineNo">879</span> // check if we have already a Reserved ID for the nonce<a name="line.879"></a>
-<span class="sourceLineNo">880</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (oldProcId == null) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.882"></a>
-<span class="sourceLineNo">883</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.883"></a>
-<span class="sourceLineNo">884</span> final long newProcId = nextProcId();<a name="line.884"></a>
-<span class="sourceLineNo">885</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> if (oldProcId == null) return -1;<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span><a name="line.888"></a>
-<span class="sourceLineNo">889</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.889"></a>
-<span class="sourceLineNo">890</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.890"></a>
-<span class="sourceLineNo">891</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.891"></a>
-<span class="sourceLineNo">892</span> while (isRunning() &&<a name="line.892"></a>
-<span class="sourceLineNo">893</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.893"></a>
-<span class="sourceLineNo">894</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> if (traceEnabled) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.896"></a>
-<span class="sourceLineNo">897</span> }<a name="line.897"></a>
-<span class="sourceLineNo">898</span> Threads.sleep(100);<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span> return oldProcId.longValue();<a name="line.900"></a>
-<span class="sourceLineNo">901</span> }<a name="line.901"></a>
-<span class="sourceLineNo">902</span><a name="line.902"></a>
-<span class="sourceLineNo">903</span> /**<a name="line.903"></a>
-<span class="sourceLineNo">904</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.904"></a>
-<span class="sourceLineNo">905</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.905"></a>
-<span class="sourceLineNo">906</span> */<a name="line.906"></a>
-<span class="sourceLineNo">907</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.907"></a>
-<span class="sourceLineNo">908</span> if (nonceKey == null) return;<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.910"></a>
-<span class="sourceLineNo">911</span> if (procId == null) return;<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span> // if the procedure was not submitted, remove the nonce<a name="line.913"></a>
-<span class="sourceLineNo">914</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.915"></a>
-<span class="sourceLineNo">916</span> }<a name="line.916"></a>
-<span class="sourceLineNo">917</span> }<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.919"></a>
-<span class="sourceLineNo">920</span> private String procName;<a name="line.920"></a>
-<span class="sourceLineNo">921</span><a name="line.921"></a>
-<span class="sourceLineNo">922</span> public FailedProcedure() {<a name="line.922"></a>
-<span class="sourceLineNo">923</span> }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.925"></a>
-<span class="sourceLineNo">926</span> NonceKey nonceKey, IOException exception) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span> this.procName = procName;<a name="line.927"></a>
-<span class="sourceLineNo">928</span> setProcId(procId);<a name="line.928"></a>
-<span class="sourceLineNo">929</span> setState(ProcedureState.ROLLEDBACK);<a name="line.929"></a>
-<span class="sourceLineNo">930</span> setOwner(owner);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> setNonceKey(nonceKey);<a name="line.931"></a>
-<span class="sourceLineNo">932</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.932"></a>
-<span class="sourceLineNo">933</span> setSubmittedTime(currentTime);<a name="line.933"></a>
-<span class="sourceLineNo">934</span> setLastUpdate(currentTime);<a name="line.934"></a>
-<span class="sourceLineNo">935</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.935"></a>
-<span class="sourceLineNo">936</span> }<a name="line.936"></a>
-<span class="sourceLineNo">937</span><a name="line.937"></a>
-<span class="sourceLineNo">938</span> @Override<a name="line.938"></a>
-<span class="sourceLineNo">939</span> public String getProcName() {<a name="line.939"></a>
-<span class="sourceLineNo">940</span> return procName;<a name="line.940"></a>
-<span class="sourceLineNo">941</span> }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span> @Override<a name="line.943"></a>
-<span class="sourceLineNo">944</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.944"></a>
-<span class="sourceLineNo">945</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.945"></a>
-<span class="sourceLineNo">946</span> InterruptedException {<a name="line.946"></a>
-<span class="sourceLineNo">947</span> throw new UnsupportedOperationException();<a name="line.947"></a>
-<span class="sourceLineNo">948</span> }<a name="line.948"></a>
-<span class="sourceLineNo">949</span><a name="line.949"></a>
-<span class="sourceLineNo">950</span> @Override<a name="line.950"></a>
-<span class="sourceLineNo">951</span> protected void rollback(TEnvironment env)<a name="line.951"></a>
-<span class="sourceLineNo">952</span> throws IOException, InterruptedException {<a name="line.952"></a>
-<span class="sourceLineNo">953</span> throw new UnsupportedOperationException();<a name="line.953"></a>
-<span class="sourceLineNo">954</span> }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span> @Override<a name="line.956"></a>
-<span class="sourceLineNo">957</span> protected boolean abort(TEnvironment env) {<a name="line.957"></a>
-<span class="sourceLineNo">958</span> throw new UnsupportedOperationException();<a name="line.958"></a>
-<span class="sourceLineNo">959</span> }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span> @Override<a name="line.961"></a>
-<span class="sourceLineNo">962</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.962"></a>
-<span class="sourceLineNo">963</span> throws IOException {<a name="line.963"></a>
-<span class="sourceLineNo">964</span> }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span> @Override<a name="line.966"></a>
-<span class="sourceLineNo">967</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.967"></a>
-<span class="sourceLineNo">968</span> throws IOException {<a name="line.968"></a>
-<span class="sourceLineNo">969</span> }<a name="line.969"></a>
-<span class="sourceLineNo">970</span> }<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span> /**<a name="line.972"></a>
-<span class="sourceLineNo">973</span> * If the failure failed before submitting it, we may want to give back the<a name="line.973"></a>
-<span class="sourceLineNo">974</span> * same error to the requests with the same nonceKey.<a name="line.974"></a>
-<span class="sourceLineNo">975</span> *<a name="line.975"></a>
-<span class="sourceLineNo">976</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.976"></a>
-<span class="sourceLineNo">977</span> * @param procName name of the procedure, used to inform the user<a name="line.977"></a>
-<span class="sourceLineNo">978</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.978"></a>
-<span class="sourceLineNo">979</span> * @param exception the failure to report to the user<a name="line.979"></a>
-<span class="sourceLineNo">980</span> */<a name="line.980"></a>
-<span class="sourceLineNo">981</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.981"></a>
-<span class="sourceLineNo">982</span> IOException exception) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span> if (nonceKey == null) {<a name="line.983"></a>
-<span class="sourceLineNo">984</span> return;<a name="line.984"></a>
-<span class="sourceLineNo">985</span> }<a name="line.985"></a>
-<span class="sourceLineNo">986</span><a name="line.986"></a>
-<span class="sourceLineNo">987</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.987"></a>
-<span class="sourceLineNo">988</span> if (procId == null || completed.containsKey(procId)) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span> return;<a name="line.989"></a>
-<span class="sourceLineNo">990</span> }<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span> Procedure<TEnvironment> proc =<a name="line.992"></a>
-<span class="sourceLineNo">993</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.993"></a>
-<span class="sourceLineNo">994</span><a name="line.994"></a>
-<span class="sourceLineNo">995</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.995"></a>
-<span class="sourceLineNo">996</span> }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">853</span> /**<a name="line.853"></a>
+<span class="sourceLineNo">854</span> * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.854"></a>
+<span class="sourceLineNo">855</span> * @param nonceGroup<a name="line.855"></a>
+<span class="sourceLineNo">856</span> * @param nonce<a name="line.856"></a>
+<span class="sourceLineNo">857</span> * @return the generated NonceKey<a name="line.857"></a>
+<span class="sourceLineNo">858</span> */<a name="line.858"></a>
+<span class="sourceLineNo">859</span> public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.860"></a>
+<span class="sourceLineNo">861</span> }<a name="line.861"></a>
+<span class="sourceLineNo">862</span><a name="line.862"></a>
+<span class="sourceLineNo">863</span> /**<a name="line.863"></a>
+<span class="sourceLineNo">864</span> * Register a nonce for a procedure that is going to be submitted.<a name="line.864"></a>
+<span class="sourceLineNo">865</span> * A procId will be reserved and on submitProcedure(),<a name="line.865"></a>
+<span class="sourceLineNo">866</span> * the procedure with the specified nonce will take the reserved ProcId.<a name="line.866"></a>
+<span class="sourceLineNo">867</span> * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.867"></a>
+<span class="sourceLineNo">868</span> * otherwise an invalid procId will be returned. and the caller should procede<a name="line.868"></a>
+<span class="sourceLineNo">869</span> * and submit the procedure.<a name="line.869"></a>
+<span class="sourceLineNo">870</span> *<a name="line.870"></a>
+<span class="sourceLineNo">871</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.871"></a>
+<span class="sourceLineNo">872</span> * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.872"></a>
+<span class="sourceLineNo">873</span> */<a name="line.873"></a>
+<span class="sourceLineNo">874</span> public long registerNonce(final NonceKey nonceKey) {<a name="line.874"></a>
+<span class="sourceLineNo">875</span> if (nonceKey == null) return -1;<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span> // check if we have already a Reserved ID for the nonce<a name="line.877"></a>
+<span class="sourceLineNo">878</span> Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.878"></a>
+<span class="sourceLineNo">879</span> if (oldProcId == null) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span> // reserve a new Procedure ID, this will be associated with the nonce<a name="line.880"></a>
+<span class="sourceLineNo">881</span> // and the procedure submitted with the specified nonce will use this ID.<a name="line.881"></a>
+<span class="sourceLineNo">882</span> final long newProcId = nextProcId();<a name="line.882"></a>
+<span class="sourceLineNo">883</span> oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.883"></a>
+<span class="sourceLineNo">884</span> if (oldProcId == null) return -1;<a name="line.884"></a>
+<span class="sourceLineNo">885</span> }<a name="line.885"></a>
+<span class="sourceLineNo">886</span><a name="line.886"></a>
+<span class="sourceLineNo">887</span> // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.887"></a>
+<span class="sourceLineNo">888</span> // since the client expect the procedure to be submitted, spin here until it is.<a name="line.888"></a>
+<span class="sourceLineNo">889</span> final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.889"></a>
+<span class="sourceLineNo">890</span> while (isRunning() &&<a name="line.890"></a>
+<span class="sourceLineNo">891</span> !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &&<a name="line.891"></a>
+<span class="sourceLineNo">892</span> nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> if (traceEnabled) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span> LOG.trace("Waiting for pid=" + oldProcId.longValue() + " to be submitted");<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> Threads.sleep(100);<a name="line.896"></a>
+<span class="sourceLineNo">897</span> }<a name="line.897"></a>
+<span class="sourceLineNo">898</span> return oldProcId.longValue();<a name="line.898"></a>
+<span class="sourceLineNo">899</span> }<a name="line.899"></a>
+<span class="sourceLineNo">900</span><a name="line.900"></a>
+<span class="sourceLineNo">901</span> /**<a name="line.901"></a>
+<span class="sourceLineNo">902</span> * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.903"></a>
+<span class="sourceLineNo">904</span> */<a name="line.904"></a>
+<span class="sourceLineNo">905</span> public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span> if (nonceKey == null) return;<a name="line.906"></a>
+<span class="sourceLineNo">907</span><a name="line.907"></a>
+<span class="sourceLineNo">908</span> final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.908"></a>
+<span class="sourceLineNo">909</span> if (procId == null) return;<a name="line.909"></a>
+<span class="sourceLineNo">910</span><a name="line.910"></a>
+<span class="sourceLineNo">911</span> // if the procedure was not submitted, remove the nonce<a name="line.911"></a>
+<span class="sourceLineNo">912</span> if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.912"></a>
+<span class="sourceLineNo">913</span> nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.913"></a>
+<span class="sourceLineNo">914</span> }<a name="line.914"></a>
+<span class="sourceLineNo">915</span> }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span> public static class FailedProcedure<TEnvironment> extends Procedure<TEnvironment> {<a name="line.917"></a>
+<span class="sourceLineNo">918</span> private String procName;<a name="line.918"></a>
+<span class="sourceLineNo">919</span><a name="line.919"></a>
+<span class="sourceLineNo">920</span> public FailedProcedure() {<a name="line.920"></a>
+<span class="sourceLineNo">921</span> }<a name="line.921"></a>
+<span class="sourceLineNo">922</span><a name="line.922"></a>
+<span class="sourceLineNo">923</span> public FailedProcedure(long procId, String procName, User owner,<a name="line.923"></a>
+<span class="sourceLineNo">924</span> NonceKey nonceKey, IOException exception) {<a name="line.924"></a>
+<span class="sourceLineNo">925</span> this.procName = procName;<a name="line.925"></a>
+<span class="sourceLineNo">926</span> setProcId(procId);<a name="line.926"></a>
+<span class="sourceLineNo">927</span> setState(ProcedureState.ROLLEDBACK);<a name="line.927"></a>
+<span class="sourceLineNo">928</span> setOwner(owner);<a name="line.928"></a>
+<span class="sourceLineNo">929</span> setNonceKey(nonceKey);<a name="line.929"></a>
+<span class="sourceLineNo">930</span> long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.930"></a>
+<span class="sourceLineNo">931</span> setSubmittedTime(currentTime);<a name="line.931"></a>
+<span class="sourceLineNo">932</span> setLastUpdate(currentTime);<a name="line.932"></a>
+<span class="sourceLineNo">933</span> setFailure(Objects.toString(exception.getMessage(), ""), exception);<a name="line.933"></a>
+<span class="sourceLineNo">934</span> }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span> @Override<a name="line.936"></a>
+<span class="sourceLineNo">937</span> public String getProcName() {<a name="line.937"></a>
+<span class="sourceLineNo">938</span> return procName;<a name="line.938"></a>
+<span class="sourceLineNo">939</span> }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span> @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span> protected Procedure<TEnvironment>[] execute(TEnvironment env)<a name="line.942"></a>
+<span class="sourceLineNo">943</span> throws ProcedureYieldException, ProcedureSuspendedException,<a name="line.943"></a>
+<span class="sourceLineNo">944</span> InterruptedException {<a name="line.944"></a>
+<span class="sourceLineNo">945</span> throw new UnsupportedOperationException();<a name="line.945"></a>
+<span class="sourceLineNo">946</span> }<a name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span> @Override<a name="line.948"></a>
+<span class="sourceLineNo">949</span> protected void rollback(TEnvironment env)<a name="line.949"></a>
+<span class="sourceLineNo">950</span> throws IOException, InterruptedException {<a name="line.950"></a>
+<span class="sourceLineNo">951</span> throw new UnsupportedOperationException();<a name="line.951"></a>
+<span class="sourceLineNo">952</span> }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span> @Override<a name="line.954"></a>
+<span class="sourceLineNo">955</span> protected boolean abort(TEnvironment env) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span> throw new UnsupportedOperationException();<a name="line.956"></a>
+<span class="sourceLineNo">957</span> }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span> @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.960"></a>
+<span class="sourceLineNo">961</span> throws IOException {<a name="line.961"></a>
+<span class="sourceLineNo">962</span> }<a name="line.962"></a>
+<span class="sourceLineNo">963</span><a name="line.963"></a>
+<span class="sourceLineNo">964</span> @Override<a name="line.964"></a>
+<span class="sourceLineNo">965</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.965"></a>
+<span class="sourceLineNo">966</span> throws IOException {<a name="line.966"></a>
+<span class="sourceLineNo">967</span> }<a name="line.967"></a>
+<span class="sourceLineNo">968</span> }<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span> /**<a name="line.970"></a>
+<span class="sourceLineNo">971</span> * If the failure failed before submitting it, we may want to give back the<a name="line.971"></a>
+<span class="sourceLineNo">972</span> * same error to the requests with the same nonceKey.<a name="line.972"></a>
+<span class="sourceLineNo">973</span> *<a name="line.973"></a>
+<span class="sourceLineNo">974</span> * @param nonceKey A unique identifier for this operation from the client or process<a name="line.974"></a>
+<span class="sourceLineNo">975</span> * @param procName name of the procedure, used to inform the user<a name="line.975"></a>
+<span class="sourceLineNo">976</span> * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.976"></a>
+<span class="sourceLineNo">977</span> * @param exception the failure to report to the user<a name="line.977"></a>
+<span class="sourceLineNo">978</span> */<a name="line.978"></a>
+<span class="sourceLineNo">979</span> public void setFailureResultForNonce(NonceKey nonceKey, String procName, User procOwner,<a name="line.979"></a>
+<span class="sourceLineNo">980</span> IOException exception) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span> if (nonceKey == null) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span> return;<a name="line.982"></a>
+<span class="sourceLineNo">983</span> }<a name="line.983"></a>
+<span class="sourceLineNo">984</span><a name="line.984"></a>
+<span class="sourceLineNo">985</span> Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.985"></a>
+<span class="sourceLineNo">986</span> if (procId == null || completed.containsKey(procId)) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span> return;<a name="line.987"></a>
+<span class="sourceLineNo">988</span> }<a name="line.988"></a>
+<span class="sourceLineNo">989</span><a name="line.989"></a>
+<span class="sourceLineNo">990</span> Procedure<TEnvironment> proc =<a name="line.990"></a>
+<span class="sourceLineNo">991</span> new FailedProcedure<>(procId.longValue(), procName, procOwner, nonceKey, exception);<a name="line.991"></a>
+<span class="sourceLineNo">992</span><a name="line.992"></a>
+<span class="sourceLineNo">993</span> completed.putIfAbsent(procId, new CompletedProcedureRetainer<>(proc));<a name="line.993"></a>
+<span class="sourceLineNo">994</span> }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span> // ==========================================================================<a name="line.996"></a>
+<span class="sourceLineNo">997</span> // Submit/Abort Procedure<a name="line.997"></a>
<span class="sourceLineNo">998</span> // ==========================================================================<a name="line.998"></a>
-<span class="sourceLineNo">999</span> // Submit/Abort Procedure<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> // ==========================================================================<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> /**<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> * Add a new root-procedure to the executor.<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> * @param proc the new procedure to execute.<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> * @return the procedure id, that can be used to monitor the operation<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> */<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> public long submitProcedure(Procedure<TEnvironment> proc) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> return submitProcedure(proc, null);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span><a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> /**<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> * Bypass a procedure. If the procedure is set to bypass, all the logic in<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> * execute/rollback will be ignored and it will return success, whatever.<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> * It is used to recover buggy stuck procedures, releasing the lock resources<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> * and letting other procedures run. Bypassing one procedure (and its ancestors will<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> * be bypassed automatically) may leave the cluster in a middle state, e.g. region<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> * not assigned, or some hdfs files left behind. After getting rid of those stuck procedures,<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> * the operators may have to do some clean up on hdfs or schedule some assign procedures<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> * to let region online. DO AT YOUR OWN RISK.<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> * <p><a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> * A procedure can be bypassed only if<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span> * 1. The procedure is in state of RUNNABLE, WAITING, WAITING_TIMEOUT<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> * or it is a root procedure without any child.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * 2. No other worker thread is executing it<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> * 3. No child procedure has been submitted<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> *<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> * <p><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> * If all the requirements are meet, the procedure and its ancestors will be<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> * bypassed and persisted to WAL.<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> *<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span> * <p><a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> * If the procedure is in WAITING state, will set it to RUNNABLE add it to run queue.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> * TODO: What about WAITING_TIMEOUT?<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> * @param pids the procedure id<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> * @param lockWait time to wait lock<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> * @param force if force set to true, we will bypass the procedure even if it is executing.<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> * This is for procedures which can't break out during executing(due to bug, mostly)<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> * In this case, bypassing the procedure is not enough, since it is already stuck<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> * there. We need to restart the master after bypassing, and letting the problematic<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span> * procedure to execute wth bypass=true, so in that condition, the procedure can be<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> * successfully bypassed.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> * @param recursive We will do an expensive search for children of each pid. EXPENSIVE!<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> * @return true if bypass success<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> * @throws IOException IOException<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span> */<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> public List<Boolean> bypassProcedure(List<Long> pids, long lockWait, boolean force,<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span> boolean recursive)<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> throws IOException {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> List<Boolean> result = new ArrayList<Boolean>(pids.size());<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> for(long pid: pids) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span> result.add(bypassProcedure(pid, lockWait, force, recursive));<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> return result;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span> }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span><a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> boolean bypassProcedure(long pid, long lockWait, boolean override, boolean recursive)<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span> throws IOException {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> Preconditions.checkArgument(lockWait > 0, "lockWait should be positive");<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span> final Procedure<TEnvironment> procedure = getProcedure(pid);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span> if (procedure == null) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> LOG.debug("Procedure pid={} does not exist, skipping bypass", pid);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> return false;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span> }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span><a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> LOG.debug("Begin bypass {} with lockWait={}, override={}, recursive={}",<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span> procedure, lockWait, override, recursive);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> IdLock.Entry lockEntry = procExecutionLock.tryLockEntry(procedure.getProcId(), lockWait);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> if (lockEntry == null && !override) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> LOG.debug("Waited {} ms, but {} is still running, skipping bypass with force={}",<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> lockWait, procedure, override);<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> return false;<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> } else if (lockEntry == null) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> LOG.debug("Waited {} ms, but {} is still running, begin bypass with force={}",<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span> lockWait, procedure, override);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // check whether the procedure is already finished<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> if (procedure.isFinished()) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> LOG.debug("{} is already finished, skipping bypass", procedure);<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> return false;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> if (procedure.hasChildren()) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> if (recursive) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> // EXPENSIVE. Checks each live procedure of which there could be many!!!<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span> // Is there another way to get children of a procedure?<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> LOG.info("Recursive bypass on children of pid={}", procedure.getProcId());<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> this.procedures.forEachValue(1 /*Single-threaded*/,<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> // Transformer<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> v -> v.getParentProcId() == procedure.getProcId()? v: null,<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> // Consumer<a name="line.1090
<TRUNCATED>
[02/30] hbase-site git commit: Published site at
931156f66b1decc19d89f8bb3ce9e5f355fb4fb2.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/6b8b907f/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAdmin2.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAdmin2.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAdmin2.html
index 7c5f71e..02d694d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAdmin2.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAdmin2.html
@@ -56,713 +56,752 @@
<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.After;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.AfterClass;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Before;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.BeforeClass;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.junit.ClassRule;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.junit.Rule;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.junit.Test;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.junit.experimental.categories.Category;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.junit.rules.TestName;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.slf4j.Logger;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.slf4j.LoggerFactory;<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>/**<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * Class to test HBaseAdmin.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * Spins up the minicluster once at test start and then takes it down afterward.<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * Add any testing of HBaseAdmin functionality here.<a name="line.77"></a>
-<span class="sourceLineNo">078</span> */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>@Category({LargeTests.class, ClientTests.class})<a name="line.79"></a>
-<span class="sourceLineNo">080</span>public class TestAdmin2 {<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span> @ClassRule<a name="line.82"></a>
-<span class="sourceLineNo">083</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.83"></a>
-<span class="sourceLineNo">084</span> HBaseClassTestRule.forClass(TestAdmin2.class);<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span> private static final Logger LOG = LoggerFactory.getLogger(TestAdmin2.class);<a name="line.86"></a>
-<span class="sourceLineNo">087</span> private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.87"></a>
-<span class="sourceLineNo">088</span> private Admin admin;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span> @Rule<a name="line.90"></a>
-<span class="sourceLineNo">091</span> public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.AfterClass;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Assert;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.Before;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.BeforeClass;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.ClassRule;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.junit.Rule;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.junit.Test;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.experimental.categories.Category;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.junit.rules.TestName;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.slf4j.Logger;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.slf4j.LoggerFactory;<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>/**<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * Class to test HBaseAdmin.<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * Spins up the minicluster once at test start and then takes it down afterward.<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * Add any testing of HBaseAdmin functionality here.<a name="line.80"></a>
+<span class="sourceLineNo">081</span> */<a name="line.81"></a>
+<span class="sourceLineNo">082</span>@Category({LargeTests.class, ClientTests.class})<a name="line.82"></a>
+<span class="sourceLineNo">083</span>public class TestAdmin2 {<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span> @ClassRule<a name="line.85"></a>
+<span class="sourceLineNo">086</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.86"></a>
+<span class="sourceLineNo">087</span> HBaseClassTestRule.forClass(TestAdmin2.class);<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span> private static final Logger LOG = LoggerFactory.getLogger(TestAdmin2.class);<a name="line.89"></a>
+<span class="sourceLineNo">090</span> private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.90"></a>
+<span class="sourceLineNo">091</span> private Admin admin;<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span> @BeforeClass<a name="line.93"></a>
-<span class="sourceLineNo">094</span> public static void setUpBeforeClass() throws Exception {<a name="line.94"></a>
-<span class="sourceLineNo">095</span> TEST_UTIL.getConfiguration().setInt("hbase.regionserver.msginterval", 100);<a name="line.95"></a>
-<span class="sourceLineNo">096</span> TEST_UTIL.getConfiguration().setInt("hbase.client.pause", 250);<a name="line.96"></a>
-<span class="sourceLineNo">097</span> TEST_UTIL.getConfiguration().setInt("hbase.client.retries.number", 6);<a name="line.97"></a>
-<span class="sourceLineNo">098</span> TEST_UTIL.getConfiguration().setInt(HConstants.REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT, 30);<a name="line.98"></a>
-<span class="sourceLineNo">099</span> TEST_UTIL.getConfiguration().setInt(HConstants.REGION_SERVER_HANDLER_COUNT, 30);<a name="line.99"></a>
-<span class="sourceLineNo">100</span> TEST_UTIL.getConfiguration().setBoolean("hbase.master.enabletable.roundrobin", true);<a name="line.100"></a>
-<span class="sourceLineNo">101</span> TEST_UTIL.startMiniCluster(3);<a name="line.101"></a>
-<span class="sourceLineNo">102</span> }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span> @AfterClass<a name="line.104"></a>
-<span class="sourceLineNo">105</span> public static void tearDownAfterClass() throws Exception {<a name="line.105"></a>
-<span class="sourceLineNo">106</span> TEST_UTIL.shutdownMiniCluster();<a name="line.106"></a>
-<span class="sourceLineNo">107</span> }<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span> @Before<a name="line.109"></a>
-<span class="sourceLineNo">110</span> public void setUp() throws Exception {<a name="line.110"></a>
-<span class="sourceLineNo">111</span> this.admin = TEST_UTIL.getHBaseAdmin();<a name="line.111"></a>
-<span class="sourceLineNo">112</span> }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span> @After<a name="line.114"></a>
-<span class="sourceLineNo">115</span> public void tearDown() throws Exception {<a name="line.115"></a>
-<span class="sourceLineNo">116</span> for (HTableDescriptor htd : this.admin.listTables()) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span> TEST_UTIL.deleteTable(htd.getTableName());<a name="line.117"></a>
-<span class="sourceLineNo">118</span> }<a name="line.118"></a>
-<span class="sourceLineNo">119</span> }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span> @Test<a name="line.121"></a>
-<span class="sourceLineNo">122</span> public void testCreateBadTables() throws IOException {<a name="line.122"></a>
-<span class="sourceLineNo">123</span> String msg = null;<a name="line.123"></a>
-<span class="sourceLineNo">124</span> try {<a name="line.124"></a>
-<span class="sourceLineNo">125</span> this.admin.createTable(new HTableDescriptor(TableName.META_TABLE_NAME));<a name="line.125"></a>
-<span class="sourceLineNo">126</span> } catch(TableExistsException e) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span> msg = e.toString();<a name="line.127"></a>
-<span class="sourceLineNo">128</span> }<a name="line.128"></a>
-<span class="sourceLineNo">129</span> assertTrue("Unexcepted exception message " + msg, msg != null &&<a name="line.129"></a>
-<span class="sourceLineNo">130</span> msg.startsWith(TableExistsException.class.getName()) &&<a name="line.130"></a>
-<span class="sourceLineNo">131</span> msg.contains(TableName.META_TABLE_NAME.getNameAsString()));<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span> // Now try and do concurrent creation with a bunch of threads.<a name="line.133"></a>
-<span class="sourceLineNo">134</span> final HTableDescriptor threadDesc = new HTableDescriptor(TableName.valueOf(name.getMethodName()));<a name="line.134"></a>
-<span class="sourceLineNo">135</span> threadDesc.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.135"></a>
-<span class="sourceLineNo">136</span> int count = 10;<a name="line.136"></a>
-<span class="sourceLineNo">137</span> Thread [] threads = new Thread [count];<a name="line.137"></a>
-<span class="sourceLineNo">138</span> final AtomicInteger successes = new AtomicInteger(0);<a name="line.138"></a>
-<span class="sourceLineNo">139</span> final AtomicInteger failures = new AtomicInteger(0);<a name="line.139"></a>
-<span class="sourceLineNo">140</span> final Admin localAdmin = this.admin;<a name="line.140"></a>
-<span class="sourceLineNo">141</span> for (int i = 0; i < count; i++) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span> threads[i] = new Thread(Integer.toString(i)) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span> @Override<a name="line.143"></a>
-<span class="sourceLineNo">144</span> public void run() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> try {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> localAdmin.createTable(threadDesc);<a name="line.146"></a>
-<span class="sourceLineNo">147</span> successes.incrementAndGet();<a name="line.147"></a>
-<span class="sourceLineNo">148</span> } catch (TableExistsException e) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span> failures.incrementAndGet();<a name="line.149"></a>
-<span class="sourceLineNo">150</span> } catch (IOException e) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span> throw new RuntimeException("Failed threaded create" + getName(), e);<a name="line.151"></a>
-<span class="sourceLineNo">152</span> }<a name="line.152"></a>
-<span class="sourceLineNo">153</span> }<a name="line.153"></a>
-<span class="sourceLineNo">154</span> };<a name="line.154"></a>
-<span class="sourceLineNo">155</span> }<a name="line.155"></a>
-<span class="sourceLineNo">156</span> for (int i = 0; i < count; i++) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span> threads[i].start();<a name="line.157"></a>
+<span class="sourceLineNo">093</span> @Rule<a name="line.93"></a>
+<span class="sourceLineNo">094</span> public TestName name = new TestName();<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span> @BeforeClass<a name="line.96"></a>
+<span class="sourceLineNo">097</span> public static void setUpBeforeClass() throws Exception {<a name="line.97"></a>
+<span class="sourceLineNo">098</span> TEST_UTIL.getConfiguration().setInt("hbase.regionserver.msginterval", 100);<a name="line.98"></a>
+<span class="sourceLineNo">099</span> TEST_UTIL.getConfiguration().setInt("hbase.client.pause", 250);<a name="line.99"></a>
+<span class="sourceLineNo">100</span> TEST_UTIL.getConfiguration().setInt("hbase.client.retries.number", 6);<a name="line.100"></a>
+<span class="sourceLineNo">101</span> TEST_UTIL.getConfiguration().setInt(HConstants.REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT, 30);<a name="line.101"></a>
+<span class="sourceLineNo">102</span> TEST_UTIL.getConfiguration().setInt(HConstants.REGION_SERVER_HANDLER_COUNT, 30);<a name="line.102"></a>
+<span class="sourceLineNo">103</span> TEST_UTIL.getConfiguration().setBoolean("hbase.master.enabletable.roundrobin", true);<a name="line.103"></a>
+<span class="sourceLineNo">104</span> TEST_UTIL.startMiniCluster(3);<a name="line.104"></a>
+<span class="sourceLineNo">105</span> }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> @AfterClass<a name="line.107"></a>
+<span class="sourceLineNo">108</span> public static void tearDownAfterClass() throws Exception {<a name="line.108"></a>
+<span class="sourceLineNo">109</span> TEST_UTIL.shutdownMiniCluster();<a name="line.109"></a>
+<span class="sourceLineNo">110</span> }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> @Before<a name="line.112"></a>
+<span class="sourceLineNo">113</span> public void setUp() throws Exception {<a name="line.113"></a>
+<span class="sourceLineNo">114</span> this.admin = TEST_UTIL.getHBaseAdmin();<a name="line.114"></a>
+<span class="sourceLineNo">115</span> }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span> @After<a name="line.117"></a>
+<span class="sourceLineNo">118</span> public void tearDown() throws Exception {<a name="line.118"></a>
+<span class="sourceLineNo">119</span> for (HTableDescriptor htd : this.admin.listTables()) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> TEST_UTIL.deleteTable(htd.getTableName());<a name="line.120"></a>
+<span class="sourceLineNo">121</span> }<a name="line.121"></a>
+<span class="sourceLineNo">122</span> }<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span> @Test<a name="line.124"></a>
+<span class="sourceLineNo">125</span> public void testCreateBadTables() throws IOException {<a name="line.125"></a>
+<span class="sourceLineNo">126</span> String msg = null;<a name="line.126"></a>
+<span class="sourceLineNo">127</span> try {<a name="line.127"></a>
+<span class="sourceLineNo">128</span> this.admin.createTable(new HTableDescriptor(TableName.META_TABLE_NAME));<a name="line.128"></a>
+<span class="sourceLineNo">129</span> } catch(TableExistsException e) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> msg = e.toString();<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span> assertTrue("Unexcepted exception message " + msg, msg != null &&<a name="line.132"></a>
+<span class="sourceLineNo">133</span> msg.startsWith(TableExistsException.class.getName()) &&<a name="line.133"></a>
+<span class="sourceLineNo">134</span> msg.contains(TableName.META_TABLE_NAME.getNameAsString()));<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span> // Now try and do concurrent creation with a bunch of threads.<a name="line.136"></a>
+<span class="sourceLineNo">137</span> final HTableDescriptor threadDesc = new HTableDescriptor(TableName.valueOf(name.getMethodName()));<a name="line.137"></a>
+<span class="sourceLineNo">138</span> threadDesc.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.138"></a>
+<span class="sourceLineNo">139</span> int count = 10;<a name="line.139"></a>
+<span class="sourceLineNo">140</span> Thread [] threads = new Thread [count];<a name="line.140"></a>
+<span class="sourceLineNo">141</span> final AtomicInteger successes = new AtomicInteger(0);<a name="line.141"></a>
+<span class="sourceLineNo">142</span> final AtomicInteger failures = new AtomicInteger(0);<a name="line.142"></a>
+<span class="sourceLineNo">143</span> final Admin localAdmin = this.admin;<a name="line.143"></a>
+<span class="sourceLineNo">144</span> for (int i = 0; i < count; i++) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span> threads[i] = new Thread(Integer.toString(i)) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> @Override<a name="line.146"></a>
+<span class="sourceLineNo">147</span> public void run() {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> try {<a name="line.148"></a>
+<span class="sourceLineNo">149</span> localAdmin.createTable(threadDesc);<a name="line.149"></a>
+<span class="sourceLineNo">150</span> successes.incrementAndGet();<a name="line.150"></a>
+<span class="sourceLineNo">151</span> } catch (TableExistsException e) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span> failures.incrementAndGet();<a name="line.152"></a>
+<span class="sourceLineNo">153</span> } catch (IOException e) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span> throw new RuntimeException("Failed threaded create" + getName(), e);<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> }<a name="line.156"></a>
+<span class="sourceLineNo">157</span> };<a name="line.157"></a>
<span class="sourceLineNo">158</span> }<a name="line.158"></a>
<span class="sourceLineNo">159</span> for (int i = 0; i < count; i++) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span> while(threads[i].isAlive()) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> try {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> Thread.sleep(100);<a name="line.162"></a>
-<span class="sourceLineNo">163</span> } catch (InterruptedException e) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> // continue<a name="line.164"></a>
-<span class="sourceLineNo">165</span> }<a name="line.165"></a>
-<span class="sourceLineNo">166</span> }<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span> // All threads are now dead. Count up how many tables were created and<a name="line.168"></a>
-<span class="sourceLineNo">169</span> // how many failed w/ appropriate exception.<a name="line.169"></a>
-<span class="sourceLineNo">170</span> assertEquals(1, successes.get());<a name="line.170"></a>
-<span class="sourceLineNo">171</span> assertEquals(count - 1, failures.get());<a name="line.171"></a>
-<span class="sourceLineNo">172</span> }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span> /**<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * Test for hadoop-1581 'HBASE: Unopenable tablename bug'.<a name="line.175"></a>
-<span class="sourceLineNo">176</span> * @throws Exception<a name="line.176"></a>
-<span class="sourceLineNo">177</span> */<a name="line.177"></a>
-<span class="sourceLineNo">178</span> @Test<a name="line.178"></a>
-<span class="sourceLineNo">179</span> public void testTableNameClash() throws Exception {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> final String name = this.name.getMethodName();<a name="line.180"></a>
-<span class="sourceLineNo">181</span> HTableDescriptor htd1 = new HTableDescriptor(TableName.valueOf(name + "SOMEUPPERCASE"));<a name="line.181"></a>
-<span class="sourceLineNo">182</span> HTableDescriptor htd2 = new HTableDescriptor(TableName.valueOf(name));<a name="line.182"></a>
-<span class="sourceLineNo">183</span> htd1.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.183"></a>
-<span class="sourceLineNo">184</span> htd2.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.184"></a>
-<span class="sourceLineNo">185</span> admin.createTable(htd1);<a name="line.185"></a>
-<span class="sourceLineNo">186</span> admin.createTable(htd2);<a name="line.186"></a>
-<span class="sourceLineNo">187</span> // Before fix, below would fail throwing a NoServerForRegionException.<a name="line.187"></a>
-<span class="sourceLineNo">188</span> TEST_UTIL.getConnection().getTable(htd2.getTableName()).close();<a name="line.188"></a>
-<span class="sourceLineNo">189</span> }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span> /***<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * HMaster.createTable used to be kind of synchronous call<a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Thus creating of table with lots of regions can cause RPC timeout<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * After the fix to make createTable truly async, RPC timeout shouldn't be an<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * issue anymore<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * @throws Exception<a name="line.196"></a>
-<span class="sourceLineNo">197</span> */<a name="line.197"></a>
-<span class="sourceLineNo">198</span> @Test<a name="line.198"></a>
-<span class="sourceLineNo">199</span> public void testCreateTableRPCTimeOut() throws Exception {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> final String name = this.name.getMethodName();<a name="line.200"></a>
-<span class="sourceLineNo">201</span> int oldTimeout = TEST_UTIL.getConfiguration().<a name="line.201"></a>
-<span class="sourceLineNo">202</span> getInt(HConstants.HBASE_RPC_TIMEOUT_KEY, HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.202"></a>
-<span class="sourceLineNo">203</span> TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, 1500);<a name="line.203"></a>
-<span class="sourceLineNo">204</span> try {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> int expectedRegions = 100;<a name="line.205"></a>
-<span class="sourceLineNo">206</span> // Use 80 bit numbers to make sure we aren't limited<a name="line.206"></a>
-<span class="sourceLineNo">207</span> byte [] startKey = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };<a name="line.207"></a>
-<span class="sourceLineNo">208</span> byte [] endKey = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 };<a name="line.208"></a>
-<span class="sourceLineNo">209</span> Admin hbaseadmin = TEST_UTIL.getHBaseAdmin();<a name="line.209"></a>
-<span class="sourceLineNo">210</span> HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(name));<a name="line.210"></a>
-<span class="sourceLineNo">211</span> htd.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.211"></a>
-<span class="sourceLineNo">212</span> hbaseadmin.createTable(htd, startKey, endKey, expectedRegions);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> } finally {<a name="line.213"></a>
-<span class="sourceLineNo">214</span> TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, oldTimeout);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> }<a name="line.215"></a>
-<span class="sourceLineNo">216</span> }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> /**<a name="line.218"></a>
-<span class="sourceLineNo">219</span> * Test read only tables<a name="line.219"></a>
-<span class="sourceLineNo">220</span> * @throws Exception<a name="line.220"></a>
-<span class="sourceLineNo">221</span> */<a name="line.221"></a>
-<span class="sourceLineNo">222</span> @Test<a name="line.222"></a>
-<span class="sourceLineNo">223</span> public void testReadOnlyTable() throws Exception {<a name="line.223"></a>
-<span class="sourceLineNo">224</span> final TableName name = TableName.valueOf(this.name.getMethodName());<a name="line.224"></a>
-<span class="sourceLineNo">225</span> Table table = TEST_UTIL.createTable(name, HConstants.CATALOG_FAMILY);<a name="line.225"></a>
-<span class="sourceLineNo">226</span> byte[] value = Bytes.toBytes("somedata");<a name="line.226"></a>
-<span class="sourceLineNo">227</span> // This used to use an empty row... That must have been a bug<a name="line.227"></a>
-<span class="sourceLineNo">228</span> Put put = new Put(value);<a name="line.228"></a>
-<span class="sourceLineNo">229</span> put.addColumn(HConstants.CATALOG_FAMILY, HConstants.CATALOG_FAMILY, value);<a name="line.229"></a>
-<span class="sourceLineNo">230</span> table.put(put);<a name="line.230"></a>
-<span class="sourceLineNo">231</span> table.close();<a name="line.231"></a>
-<span class="sourceLineNo">232</span> }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span> /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span> * Test that user table names can contain '-' and '.' so long as they do not<a name="line.235"></a>
-<span class="sourceLineNo">236</span> * start with same. HBASE-771<a name="line.236"></a>
-<span class="sourceLineNo">237</span> * @throws IOException<a name="line.237"></a>
-<span class="sourceLineNo">238</span> */<a name="line.238"></a>
-<span class="sourceLineNo">239</span> @Test<a name="line.239"></a>
-<span class="sourceLineNo">240</span> public void testTableNames() throws IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> byte[][] illegalNames = new byte[][] {<a name="line.241"></a>
-<span class="sourceLineNo">242</span> Bytes.toBytes("-bad"),<a name="line.242"></a>
-<span class="sourceLineNo">243</span> Bytes.toBytes(".bad")<a name="line.243"></a>
-<span class="sourceLineNo">244</span> };<a name="line.244"></a>
-<span class="sourceLineNo">245</span> for (byte[] illegalName : illegalNames) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span> try {<a name="line.246"></a>
-<span class="sourceLineNo">247</span> new HTableDescriptor(TableName.valueOf(illegalName));<a name="line.247"></a>
-<span class="sourceLineNo">248</span> throw new IOException("Did not detect '" +<a name="line.248"></a>
-<span class="sourceLineNo">249</span> Bytes.toString(illegalName) + "' as an illegal user table name");<a name="line.249"></a>
-<span class="sourceLineNo">250</span> } catch (IllegalArgumentException e) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> // expected<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span> }<a name="line.253"></a>
-<span class="sourceLineNo">254</span> byte[] legalName = Bytes.toBytes("g-oo.d");<a name="line.254"></a>
-<span class="sourceLineNo">255</span> try {<a name="line.255"></a>
-<span class="sourceLineNo">256</span> new HTableDescriptor(TableName.valueOf(legalName));<a name="line.256"></a>
-<span class="sourceLineNo">257</span> } catch (IllegalArgumentException e) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span> throw new IOException("Legal user table name: '" +<a name="line.258"></a>
-<span class="sourceLineNo">259</span> Bytes.toString(legalName) + "' caused IllegalArgumentException: " +<a name="line.259"></a>
-<span class="sourceLineNo">260</span> e.getMessage());<a name="line.260"></a>
-<span class="sourceLineNo">261</span> }<a name="line.261"></a>
-<span class="sourceLineNo">262</span> }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span> /**<a name="line.264"></a>
-<span class="sourceLineNo">265</span> * For HADOOP-2579<a name="line.265"></a>
-<span class="sourceLineNo">266</span> * @throws IOException<a name="line.266"></a>
-<span class="sourceLineNo">267</span> */<a name="line.267"></a>
-<span class="sourceLineNo">268</span> @Test (expected=TableExistsException.class)<a name="line.268"></a>
-<span class="sourceLineNo">269</span> public void testTableExistsExceptionWithATable() throws IOException {<a name="line.269"></a>
-<span class="sourceLineNo">270</span> final TableName name = TableName.valueOf(this.name.getMethodName());<a name="line.270"></a>
-<span class="sourceLineNo">271</span> TEST_UTIL.createTable(name, HConstants.CATALOG_FAMILY).close();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> TEST_UTIL.createTable(name, HConstants.CATALOG_FAMILY);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span> /**<a name="line.275"></a>
-<span class="sourceLineNo">276</span> * Can't disable a table if the table isn't in enabled state<a name="line.276"></a>
-<span class="sourceLineNo">277</span> * @throws IOException<a name="line.277"></a>
-<span class="sourceLineNo">278</span> */<a name="line.278"></a>
-<span class="sourceLineNo">279</span> @Test (expected=TableNotEnabledException.class)<a name="line.279"></a>
-<span class="sourceLineNo">280</span> public void testTableNotEnabledExceptionWithATable() throws IOException {<a name="line.280"></a>
-<span class="sourceLineNo">281</span> final TableName name = TableName.valueOf(this.name.getMethodName());<a name="line.281"></a>
-<span class="sourceLineNo">282</span> TEST_UTIL.createTable(name, HConstants.CATALOG_FAMILY).close();<a name="line.282"></a>
-<span class="sourceLineNo">283</span> this.admin.disableTable(name);<a name="line.283"></a>
-<span class="sourceLineNo">284</span> this.admin.disableTable(name);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span> /**<a name="line.287"></a>
-<span class="sourceLineNo">288</span> * Can't enable a table if the table isn't in disabled state<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * @throws IOException<a name="line.289"></a>
-<span class="sourceLineNo">290</span> */<a name="line.290"></a>
-<span class="sourceLineNo">291</span> @Test (expected=TableNotDisabledException.class)<a name="line.291"></a>
-<span class="sourceLineNo">292</span> public void testTableNotDisabledExceptionWithATable() throws IOException {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> final TableName name = TableName.valueOf(this.name.getMethodName());<a name="line.293"></a>
-<span class="sourceLineNo">294</span> Table t = TEST_UTIL.createTable(name, HConstants.CATALOG_FAMILY);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> try {<a name="line.295"></a>
-<span class="sourceLineNo">296</span> this.admin.enableTable(name);<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }finally {<a name="line.297"></a>
-<span class="sourceLineNo">298</span> t.close();<a name="line.298"></a>
-<span class="sourceLineNo">299</span> }<a name="line.299"></a>
-<span class="sourceLineNo">300</span> }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span> /**<a name="line.302"></a>
-<span class="sourceLineNo">303</span> * For HADOOP-2579<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * @throws IOException<a name="line.304"></a>
-<span class="sourceLineNo">305</span> */<a name="line.305"></a>
-<span class="sourceLineNo">306</span> @Test (expected=TableNotFoundException.class)<a name="line.306"></a>
-<span class="sourceLineNo">307</span> public void testTableNotFoundExceptionWithoutAnyTables() throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span> TableName tableName = TableName<a name="line.308"></a>
-<span class="sourceLineNo">309</span> .valueOf("testTableNotFoundExceptionWithoutAnyTables");<a name="line.309"></a>
-<span class="sourceLineNo">310</span> Table ht = TEST_UTIL.getConnection().getTable(tableName);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> ht.get(new Get(Bytes.toBytes("e")));<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span> @Test<a name="line.314"></a>
-<span class="sourceLineNo">315</span> public void testShouldUnassignTheRegion() throws Exception {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.316"></a>
-<span class="sourceLineNo">317</span> createTableWithDefaultConf(tableName);<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> RegionInfo info = null;<a name="line.319"></a>
-<span class="sourceLineNo">320</span> HRegionServer rs = TEST_UTIL.getRSForFirstRegionInTable(tableName);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> List<RegionInfo> onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices());<a name="line.321"></a>
-<span class="sourceLineNo">322</span> for (RegionInfo regionInfo : onlineRegions) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> if (!regionInfo.getTable().isSystemTable()) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> info = regionInfo;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> admin.unassign(regionInfo.getRegionName(), true);<a name="line.325"></a>
-<span class="sourceLineNo">326</span> }<a name="line.326"></a>
-<span class="sourceLineNo">327</span> }<a name="line.327"></a>
-<span class="sourceLineNo">328</span> boolean isInList = ProtobufUtil.getOnlineRegions(<a name="line.328"></a>
-<span class="sourceLineNo">329</span> rs.getRSRpcServices()).contains(info);<a name="line.329"></a>
-<span class="sourceLineNo">330</span> long timeout = System.currentTimeMillis() + 10000;<a name="line.330"></a>
-<span class="sourceLineNo">331</span> while ((System.currentTimeMillis() < timeout) && (isInList)) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> Thread.sleep(100);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> isInList = ProtobufUtil.getOnlineRegions(<a name="line.333"></a>
-<span class="sourceLineNo">334</span> rs.getRSRpcServices()).contains(info);<a name="line.334"></a>
-<span class="sourceLineNo">335</span> }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span> assertFalse("The region should not be present in online regions list.",<a name="line.337"></a>
-<span class="sourceLineNo">338</span> isInList);<a name="line.338"></a>
-<span class="sourceLineNo">339</span> }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span> @Test<a name="line.341"></a>
-<span class="sourceLineNo">342</span> public void testCloseRegionIfInvalidRegionNameIsPassed() throws Exception {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> final String name = this.name.getMethodName();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> byte[] tableName = Bytes.toBytes(name);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> createTableWithDefaultConf(tableName);<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> RegionInfo info = null;<a name="line.347"></a>
-<span class="sourceLineNo">348</span> HRegionServer rs = TEST_UTIL.getRSForFirstRegionInTable(TableName.valueOf(tableName));<a name="line.348"></a>
-<span class="sourceLineNo">349</span> List<RegionInfo> onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices());<a name="line.349"></a>
-<span class="sourceLineNo">350</span> for (RegionInfo regionInfo : onlineRegions) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span> if (!regionInfo.isMetaRegion()) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> if (regionInfo.getRegionNameAsString().contains(name)) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> info = regionInfo;<a name="line.353"></a>
-<span class="sourceLineNo">354</span> try {<a name="line.354"></a>
-<span class="sourceLineNo">355</span> admin.unassign(Bytes.toBytes("sample"), true);<a name="line.355"></a>
-<span class="sourceLineNo">356</span> } catch (UnknownRegionException nsre) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> // expected, ignore it<a name="line.357"></a>
-<span class="sourceLineNo">358</span> }<a name="line.358"></a>
-<span class="sourceLineNo">359</span> }<a name="line.359"></a>
-<span class="sourceLineNo">360</span> }<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span> onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices());<a name="line.362"></a>
-<span class="sourceLineNo">363</span> assertTrue("The region should be present in online regions list.",<a name="line.363"></a>
-<span class="sourceLineNo">364</span> onlineRegions.contains(info));<a name="line.364"></a>
-<span class="sourceLineNo">365</span> }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span> @Test<a name="line.367"></a>
-<span class="sourceLineNo">368</span> public void testCloseRegionThatFetchesTheHRIFromMeta() throws Exception {<a name="line.368"></a>
-<span class="sourceLineNo">369</span> final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.369"></a>
-<span class="sourceLineNo">370</span> createTableWithDefaultConf(tableName);<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span> RegionInfo info = null;<a name="line.372"></a>
-<span class="sourceLineNo">373</span> HRegionServer rs = TEST_UTIL.getRSForFirstRegionInTable(tableName);<a name="line.373"></a>
-<span class="sourceLineNo">374</span> List<RegionInfo> onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices());<a name="line.374"></a>
-<span class="sourceLineNo">375</span> for (RegionInfo regionInfo : onlineRegions) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> if (!regionInfo.isMetaRegion()) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span> if (regionInfo.getRegionNameAsString().contains("TestHBACloseRegion2")) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> info = regionInfo;<a name="line.378"></a>
-<span class="sourceLineNo">379</span> admin.unassign(regionInfo.getRegionName(), true);<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span> }<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> boolean isInList = ProtobufUtil.getOnlineRegions(<a name="line.384"></a>
-<span class="sourceLineNo">385</span> rs.getRSRpcServices()).contains(info);<a name="line.385"></a>
-<span class="sourceLineNo">386</span> long timeout = System.currentTimeMillis() + 10000;<a name="line.386"></a>
-<span class="sourceLineNo">387</span> while ((System.currentTimeMillis() < timeout) && (isInList)) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> Thread.sleep(100);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> isInList = ProtobufUtil.getOnlineRegions(<a name="line.389"></a>
-<span class="sourceLineNo">390</span> rs.getRSRpcServices()).contains(info);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span> assertFalse("The region should not be present in online regions list.",<a name="line.393"></a>
-<span class="sourceLineNo">394</span> isInList);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span> private HBaseAdmin createTable(TableName tableName) throws IOException {<a name="line.397"></a>
-<span class="sourceLineNo">398</span> HBaseAdmin admin = TEST_UTIL.getHBaseAdmin();<a name="line.398"></a>
+<span class="sourceLineNo">160</span> threads[i].start();<a name="line.160"></a>
+<span class="sourceLineNo">161</span> }<a name="line.161"></a>
+<span class="sourceLineNo">162</span> for (int i = 0; i < count; i++) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span> while(threads[i].isAlive()) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> try {<a name="line.164"></a>
+<span class="sourceLineNo">165</span> Thread.sleep(100);<a name="line.165"></a>
+<span class="sourceLineNo">166</span> } catch (InterruptedException e) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> // continue<a name="line.167"></a>
+<span class="sourceLineNo">168</span> }<a name="line.168"></a>
+<span class="sourceLineNo">169</span> }<a name="line.169"></a>
+<span class="sourceLineNo">170</span> }<a name="line.170"></a>
+<span class="sourceLineNo">171</span> // All threads are now dead. Count up how many tables were created and<a name="line.171"></a>
+<span class="sourceLineNo">172</span> // how many failed w/ appropriate exception.<a name="line.172"></a>
+<span class="sourceLineNo">173</span> assertEquals(1, successes.get());<a name="line.173"></a>
+<span class="sourceLineNo">174</span> assertEquals(count - 1, failures.get());<a name="line.174"></a>
+<span class="sourceLineNo">175</span> }<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span> /**<a name="line.177"></a>
+<span class="sourceLineNo">178</span> * Test for hadoop-1581 'HBASE: Unopenable tablename bug'.<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * @throws Exception<a name="line.179"></a>
+<span class="sourceLineNo">180</span> */<a name="line.180"></a>
+<span class="sourceLineNo">181</span> @Test<a name="line.181"></a>
+<span class="sourceLineNo">182</span> public void testTableNameClash() throws Exception {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> final String name = this.name.getMethodName();<a name="line.183"></a>
+<span class="sourceLineNo">184</span> HTableDescriptor htd1 = new HTableDescriptor(TableName.valueOf(name + "SOMEUPPERCASE"));<a name="line.184"></a>
+<span class="sourceLineNo">185</span> HTableDescriptor htd2 = new HTableDescriptor(TableName.valueOf(name));<a name="line.185"></a>
+<span class="sourceLineNo">186</span> htd1.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.186"></a>
+<span class="sourceLineNo">187</span> htd2.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.187"></a>
+<span class="sourceLineNo">188</span> admin.createTable(htd1);<a name="line.188"></a>
+<span class="sourceLineNo">189</span> admin.createTable(htd2);<a name="line.189"></a>
+<span class="sourceLineNo">190</span> // Before fix, below would fail throwing a NoServerForRegionException.<a name="line.190"></a>
+<span class="sourceLineNo">191</span> TEST_UTIL.getConnection().getTable(htd2.getTableName()).close();<a name="line.191"></a>
+<span class="sourceLineNo">192</span> }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span> /***<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * HMaster.createTable used to be kind of synchronous call<a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Thus creating of table with lots of regions can cause RPC timeout<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * After the fix to make createTable truly async, RPC timeout shouldn't be an<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * issue anymore<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * @throws Exception<a name="line.199"></a>
+<span class="sourceLineNo">200</span> */<a name="line.200"></a>
+<span class="sourceLineNo">201</span> @Test<a name="line.201"></a>
+<span class="sourceLineNo">202</span> public void testCreateTableRPCTimeOut() throws Exception {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> final String name = this.name.getMethodName();<a name="line.203"></a>
+<span class="sourceLineNo">204</span> int oldTimeout = TEST_UTIL.getConfiguration().<a name="line.204"></a>
+<span class="sourceLineNo">205</span> getInt(HConstants.HBASE_RPC_TIMEOUT_KEY, HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.205"></a>
+<span class="sourceLineNo">206</span> TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, 1500);<a name="line.206"></a>
+<span class="sourceLineNo">207</span> try {<a name="line.207"></a>
+<span class="sourceLineNo">208</span> int expectedRegions = 100;<a name="line.208"></a>
+<span class="sourceLineNo">209</span> // Use 80 bit numbers to make sure we aren't limited<a name="line.209"></a>
+<span class="sourceLineNo">210</span> byte [] startKey = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };<a name="line.210"></a>
+<span class="sourceLineNo">211</span> byte [] endKey = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 };<a name="line.211"></a>
+<span class="sourceLineNo">212</span> Admin hbaseadmin = TEST_UTIL.getHBaseAdmin();<a name="line.212"></a>
+<span class="sourceLineNo">213</span> HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(name));<a name="line.213"></a>
+<span class="sourceLineNo">214</span> htd.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.214"></a>
+<span class="sourceLineNo">215</span> hbaseadmin.createTable(htd, startKey, endKey, expectedRegions);<a name="line.215"></a>
+<span class="sourceLineNo">216</span> } finally {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, oldTimeout);<a name="line.217"></a>
+<span class="sourceLineNo">218</span> }<a name="line.218"></a>
+<span class="sourceLineNo">219</span> }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span> /**<a name="line.221"></a>
+<span class="sourceLineNo">222</span> * Test read only tables<a name="line.222"></a>
+<span class="sourceLineNo">223</span> * @throws Exception<a name="line.223"></a>
+<span class="sourceLineNo">224</span> */<a name="line.224"></a>
+<span class="sourceLineNo">225</span> @Test<a name="line.225"></a>
+<span class="sourceLineNo">226</span> public void testReadOnlyTable() throws Exception {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> final TableName name = TableName.valueOf(this.name.getMethodName());<a name="line.227"></a>
+<span class="sourceLineNo">228</span> Table table = TEST_UTIL.createTable(name, HConstants.CATALOG_FAMILY);<a name="line.228"></a>
+<span class="sourceLineNo">229</span> byte[] value = Bytes.toBytes("somedata");<a name="line.229"></a>
+<span class="sourceLineNo">230</span> // This used to use an empty row... That must have been a bug<a name="line.230"></a>
+<span class="sourceLineNo">231</span> Put put = new Put(value);<a name="line.231"></a>
+<span class="sourceLineNo">232</span> put.addColumn(HConstants.CATALOG_FAMILY, HConstants.CATALOG_FAMILY, value);<a name="line.232"></a>
+<span class="sourceLineNo">233</span> table.put(put);<a name="line.233"></a>
+<span class="sourceLineNo">234</span> table.close();<a name="line.234"></a>
+<span class="sourceLineNo">235</span> }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span> /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * Test that user table names can contain '-' and '.' so long as they do not<a name="line.238"></a>
+<span class="sourceLineNo">239</span> * start with same. HBASE-771<a name="line.239"></a>
+<span class="sourceLineNo">240</span> * @throws IOException<a name="line.240"></a>
+<span class="sourceLineNo">241</span> */<a name="line.241"></a>
+<span class="sourceLineNo">242</span> @Test<a name="line.242"></a>
+<span class="sourceLineNo">243</span> public void testTableNames() throws IOException {<a name="line.243"></a>
+<span class="sourceLineNo">244</span> byte[][] illegalNames = new byte[][] {<a name="line.244"></a>
+<span class="sourceLineNo">245</span> Bytes.toBytes("-bad"),<a name="line.245"></a>
+<span class="sourceLineNo">246</span> Bytes.toBytes(".bad")<a name="line.246"></a>
+<span class="sourceLineNo">247</span> };<a name="line.247"></a>
+<span class="sourceLineNo">248</span> for (byte[] illegalName : illegalNames) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span> try {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> new HTableDescriptor(TableName.valueOf(illegalName));<a name="line.250"></a>
+<span class="sourceLineNo">251</span> throw new IOException("Did not detect '" +<a name="line.251"></a>
+<span class="sourceLineNo">252</span> Bytes.toString(illegalName) + "' as an illegal user table name");<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } catch (IllegalArgumentException e) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> // expected<a name="line.254"></a>
+<span class="sourceLineNo">255</span> }<a name="line.255"></a>
+<span class="sourceLineNo">256</span> }<a name="line.256"></a>
+<span class="sourceLineNo">257</span> byte[] legalName = Bytes.toBytes("g-oo.d");<a name="line.257"></a>
+<span class="sourceLineNo">258</span> try {<a name="line.258"></a>
+<span class="sourceLineNo">259</span> new HTableDescriptor(TableName.valueOf(legalName));<a name="line.259"></a>
+<span class="sourceLineNo">260</span> } catch (IllegalArgumentException e) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span> throw new IOException("Legal user table name: '" +<a name="line.261"></a>
+<span class="sourceLineNo">262</span> Bytes.toString(legalName) + "' caused IllegalArgumentException: " +<a name="line.262"></a>
+<span class="sourceLineNo">263</span> e.getMessage());<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span> }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span> /**<a name="line.267"></a>
+<span class="sourceLineNo">268</span> * For HADOOP-2579<a name="line.268"></a>
+<span class="sourceLineNo">269</span> * @throws IOException<a name="line.269"></a>
+<span class="sourceLineNo">270</span> */<a name="line.270"></a>
+<span class="sourceLineNo">271</span> @Test (expected=TableExistsException.class)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> public void testTableExistsExceptionWithATable() throws IOException {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> final TableName name = TableName.valueOf(this.name.getMethodName());<a name="line.273"></a>
+<span class="sourceLineNo">274</span> TEST_UTIL.createTable(name, HConstants.CATALOG_FAMILY).close();<a name="line.274"></a>
+<span class="sourceLineNo">275</span> TEST_UTIL.createTable(name, HConstants.CATALOG_FAMILY);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span> /**<a name="line.278"></a>
+<span class="sourceLineNo">279</span> * Can't disable a table if the table isn't in enabled state<a name="line.279"></a>
+<span class="sourceLineNo">280</span> * @throws IOException<a name="line.280"></a>
+<span class="sourceLineNo">281</span> */<a name="line.281"></a>
+<span class="sourceLineNo">282</span> @Test (expected=TableNotEnabledException.class)<a name="line.282"></a>
+<span class="sourceLineNo">283</span> public void testTableNotEnabledExceptionWithATable() throws IOException {<a name="line.283"></a>
+<span class="sourceLineNo">284</span> final TableName name = TableName.valueOf(this.name.getMethodName());<a name="line.284"></a>
+<span class="sourceLineNo">285</span> TEST_UTIL.createTable(name, HConstants.CATALOG_FAMILY).close();<a name="line.285"></a>
+<span class="sourceLineNo">286</span> this.admin.disableTable(name);<a name="line.286"></a>
+<span class="sourceLineNo">287</span> this.admin.disableTable(name);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span> /**<a name="line.290"></a>
+<span class="sourceLineNo">291</span> * Can't enable a table if the table isn't in disabled state<a name="line.291"></a>
+<span class="sourceLineNo">292</span> * @throws IOException<a name="line.292"></a>
+<span class="sourceLineNo">293</span> */<a name="line.293"></a>
+<span class="sourceLineNo">294</span> @Test (expected=TableNotDisabledException.class)<a name="line.294"></a>
+<span class="sourceLineNo">295</span> public void testTableNotDisabledExceptionWithATable() throws IOException {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> final TableName name = TableName.valueOf(this.name.getMethodName());<a name="line.296"></a>
+<span class="sourceLineNo">297</span> Table t = TEST_UTIL.createTable(name, HConstants.CATALOG_FAMILY);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> try {<a name="line.298"></a>
+<span class="sourceLineNo">299</span> this.admin.enableTable(name);<a name="line.299"></a>
+<span class="sourceLineNo">300</span> }finally {<a name="line.300"></a>
+<span class="sourceLineNo">301</span> t.close();<a name="line.301"></a>
+<span class="sourceLineNo">302</span> }<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span> /**<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * For HADOOP-2579<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * @throws IOException<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> @Test (expected=TableNotFoundException.class)<a name="line.309"></a>
+<span class="sourceLineNo">310</span> public void testTableNotFoundExceptionWithoutAnyTables() throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span> TableName tableName = TableName<a name="line.311"></a>
+<span class="sourceLineNo">312</span> .valueOf("testTableNotFoundExceptionWithoutAnyTables");<a name="line.312"></a>
+<span class="sourceLineNo">313</span> Table ht = TEST_UTIL.getConnection().getTable(tableName);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> ht.get(new Get(Bytes.toBytes("e")));<a name="line.314"></a>
+<span class="sourceLineNo">315</span> }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span> @Test<a name="line.317"></a>
+<span class="sourceLineNo">318</span> public void testShouldUnassignTheRegion() throws Exception {<a name="line.318"></a>
+<span class="sourceLineNo">319</span> final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.319"></a>
+<span class="sourceLineNo">320</span> createTableWithDefaultConf(tableName);<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span> RegionInfo info = null;<a name="line.322"></a>
+<span class="sourceLineNo">323</span> HRegionServer rs = TEST_UTIL.getRSForFirstRegionInTable(tableName);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> List<RegionInfo> onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices());<a name="line.324"></a>
+<span class="sourceLineNo">325</span> for (RegionInfo regionInfo : onlineRegions) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span> if (!regionInfo.getTable().isSystemTable()) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> info = regionInfo;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> admin.unassign(regionInfo.getRegionName(), true);<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> }<a name="line.330"></a>
+<span class="sourceLineNo">331</span> boolean isInList = ProtobufUtil.getOnlineRegions(<a name="line.331"></a>
+<span class="sourceLineNo">332</span> rs.getRSRpcServices()).contains(info);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> long timeout = System.currentTimeMillis() + 10000;<a name="line.333"></a>
+<span class="sourceLineNo">334</span> while ((System.currentTimeMillis() < timeout) && (isInList)) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span> Thread.sleep(100);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> isInList = ProtobufUtil.getOnlineRegions(<a name="line.336"></a>
+<span class="sourceLineNo">337</span> rs.getRSRpcServices()).contains(info);<a name="line.337"></a>
+<span class="sourceLineNo">338</span> }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> assertFalse("The region should not be present in online regions list.",<a name="line.340"></a>
+<span class="sourceLineNo">341</span> isInList);<a name="line.341"></a>
+<span class="sourceLineNo">342</span> }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span> @Test<a name="line.344"></a>
+<span class="sourceLineNo">345</span> public void testCloseRegionIfInvalidRegionNameIsPassed() throws Exception {<a name="line.345"></a>
+<span class="sourceLineNo">346</span> final String name = this.name.getMethodName();<a name="line.346"></a>
+<span class="sourceLineNo">347</span> byte[] tableName = Bytes.toBytes(name);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> createTableWithDefaultConf(tableName);<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span> RegionInfo info = null;<a name="line.350"></a>
+<span class="sourceLineNo">351</span> HRegionServer rs = TEST_UTIL.getRSForFirstRegionInTable(TableName.valueOf(tableName));<a name="line.351"></a>
+<span class="sourceLineNo">352</span> List<RegionInfo> onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices());<a name="line.352"></a>
+<span class="sourceLineNo">353</span> for (RegionInfo regionInfo : onlineRegions) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> if (!regionInfo.isMetaRegion()) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span> if (regionInfo.getRegionNameAsString().contains(name)) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span> info = regionInfo;<a name="line.356"></a>
+<span class="sourceLineNo">357</span> try {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> admin.unassign(Bytes.toBytes("sample"), true);<a name="line.358"></a>
+<span class="sourceLineNo">359</span> } catch (UnknownRegionException nsre) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span> // expected, ignore it<a name="line.360"></a>
+<span class="sourceLineNo">361</span> }<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span> }<a name="line.363"></a>
+<span class="sourceLineNo">364</span> }<a name="line.364"></a>
+<span class="sourceLineNo">365</span> onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices());<a name="line.365"></a>
+<span class="sourceLineNo">366</span> assertTrue("The region should be present in online regions list.",<a name="line.366"></a>
+<span class="sourceLineNo">367</span> onlineRegions.contains(info));<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> @Test<a name="line.370"></a>
+<span class="sourceLineNo">371</span> public void testCloseRegionThatFetchesTheHRIFromMeta() throws Exception {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.372"></a>
+<span class="sourceLineNo">373</span> createTableWithDefaultConf(tableName);<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span> RegionInfo info = null;<a name="line.375"></a>
+<span class="sourceLineNo">376</span> HRegionServer rs = TEST_UTIL.getRSForFirstRegionInTable(tableName);<a name="line.376"></a>
+<span class="sourceLineNo">377</span> List<RegionInfo> onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices());<a name="line.377"></a>
+<span class="sourceLineNo">378</span> for (RegionInfo regionInfo : onlineRegions) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (!regionInfo.isMetaRegion()) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> if (regionInfo.getRegionNameAsString().contains("TestHBACloseRegion2")) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> info = regionInfo;<a name="line.381"></a>
+<span class="sourceLineNo">382</span> admin.unassign(regionInfo.getRegionName(), true);<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span> }<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> boolean isInList = ProtobufUtil.getOnlineRegions(<a name="line.387"></a>
+<span class="sourceLineNo">388</span> rs.getRSRpcServices()).contains(info);<a name="line.388"></a>
+<span class="sourceLineNo">389</span> long timeout = System.currentTimeMillis() + 10000;<a name="line.389"></a>
+<span class="sourceLineNo">390</span> while ((System.currentTimeMillis() < timeout) && (isInList)) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> Thread.sleep(100);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> isInList = ProtobufUtil.getOnlineRegions(<a name="line.392"></a>
+<span class="sourceLineNo">393</span> rs.getRSRpcServices()).contains(info);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span> assertFalse("The region should not be present in online regions list.",<a name="line.396"></a>
+<span class="sourceLineNo">397</span> isInList);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> }<a name="line.398"></a>
<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span> HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.400"></a>
-<span class="sourceLineNo">401</span> HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.401"></a>
+<span class="sourceLineNo">400</span> private HBaseAdmin createTable(TableName tableName) throws IOException {<a name="line.400"></a>
+<span class="sourceLineNo">401</span> HBaseAdmin admin = TEST_UTIL.getHBaseAdmin();<a name="line.401"></a>
<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span> htd.addFamily(hcd);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> admin.createTable(htd, null);<a name="line.404"></a>
-<span class="sourceLineNo">405</span> return admin;<a name="line.405"></a>
-<span class="sourceLineNo">406</span> }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> private void createTableWithDefaultConf(byte[] TABLENAME) throws IOException {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> createTableWithDefaultConf(TableName.valueOf(TABLENAME));<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> private void createTableWithDefaultConf(TableName TABLENAME) throws IOException {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> HTableDescriptor htd = new HTableDescriptor(TABLENAME);<a name="line.413"></a>
-<span class="sourceLineNo">414</span> HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.414"></a>
-<span class="sourceLineNo">415</span> htd.addFamily(hcd);<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span> admin.createTable(htd, null);<a name="line.417"></a>
-<span class="sourceLineNo">418</span> }<a name="line.418"></a>
+<span class="sourceLineNo">403</span> HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.404"></a>
+<span class="sourceLineNo">405</span><a name="line.405"></a>
+<span class="sourceLineNo">406</span> htd.addFamily(hcd);<a name="line.406"></a>
+<span class="sourceLineNo">407</span> admin.createTable(htd, null);<a name="line.407"></a>
+<span class="sourceLineNo">408</span> return admin;<a name="line.408"></a>
+<span class="sourceLineNo">409</span> }<a name="line.409"></a>
+<span class="sourceLineNo">410</span><a name="line.410"></a>
+<span class="sourceLineNo">411</span> private void createTableWithDefaultConf(byte[] TABLENAME) throws IOException {<a name="line.411"></a>
+<span class="sourceLineNo">412</span> createTableWithDefaultConf(TableName.valueOf(TABLENAME));<a name="line.412"></a>
+<span class="sourceLineNo">413</span> }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> private void createTableWithDefaultConf(TableName TABLENAME) throws IOException {<a name="line.415"></a>
+<span class="sourceLineNo">416</span> HTableDescriptor htd = new HTableDescriptor(TABLENAME);<a name="line.416"></a>
+<span class="sourceLineNo">417</span> HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.417"></a>
+<span class="sourceLineNo">418</span> htd.addFamily(hcd);<a name="line.418"></a>
<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span> /**<a name="line.420"></a>
-<span class="sourceLineNo">421</span> * For HBASE-2556<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * @throws IOException<a name="line.422"></a>
-<span class="sourceLineNo">423</span> */<a name="line.423"></a>
-<span class="sourceLineNo">424</span> @Test<a name="line.424"></a>
-<span class="sourceLineNo">425</span> public void testGetTableRegions() throws IOException {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> int expectedRegions = 10;<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span> // Use 80 bit numbers to make sure we aren't limited<a name="line.430"></a>
-<span class="sourceLineNo">431</span> byte [] startKey = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };<a name="line.431"></a>
-<span class="sourceLineNo">432</span> byte [] endKey = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 };<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span> HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.435"></a>
-<span class="sourceLineNo">436</span> desc.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.436"></a>
-<span class="sourceLineNo">437</span> admin.createTable(desc, startKey, endKey, expectedRegions);<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span> List<RegionInfo> RegionInfos = admin.getRegions(tableName);<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> assertEquals("Tried to create " + expectedRegions + " regions " +<a name="line.441"></a>
-<span class="sourceLineNo">442</span> "but only found " + RegionInfos.size(),<a name="line.442"></a>
-<span class="sourceLineNo">443</span> expectedRegions, RegionInfos.size());<a name="line.443"></a>
-<span class="sourceLineNo">444</span> }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span> @Test<a name="line.446"></a>
-<span class="sourceLineNo">447</span> public void testMoveToPreviouslyAssignedRS() throws IOException, InterruptedException {<a name="line.447"></a>
-<span class="sourceLineNo">448</span> MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.448"></a>
-<span class="sourceLineNo">449</span> HMaster master = cluster.getMaster();<a name="line.449"></a>
-<span class="sourceLineNo">450</span> final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span> Admin localAdmin = createTable(tableName);<a name="line.451"></a>
-<span class="sourceLineNo">452</span> List<RegionInfo> tableRegions = localAdmin.getRegions(tableName);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> RegionInfo hri = tableRegions.get(0);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> AssignmentManager am = master.getAssignmentManager();<a name="line.454"></a>
-<span class="sourceLineNo">455</span> ServerName server = am.getRegionStates().getRegionServerOfRegion(hri);<a name="line.455"></a>
-<span class="sourceLineNo">456</span> localAdmin.move(hri.getEncodedNameAsBytes(), Bytes.toBytes(server.getServerName()));<a name="line.456"></a>
-<span class="sourceLineNo">457</span> assertEquals("Current region server and region server before move should be same.", server,<a name="line.457"></a>
-<span class="sourceLineNo">458</span> am.getRegionStates().getRegionServerOfRegion(hri));<a name="line.458"></a>
-<span class="sourceLineNo">459</span> }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span> @Test<a name="line.461"></a>
-<span class="sourceLineNo">462</span> public void testWALRollWriting() throws Exception {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> setUpforLogRolling();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> String className = this.getClass().getName();<a name="line.464"></a>
-<span class="sourceLineNo">465</span> StringBuilder v = new StringBuilder(className);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> while (v.length() < 1000) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span> v.append(className);<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span> byte[] value = Bytes.toBytes(v.toString());<a name="line.469"></a>
-<span class="sourceLineNo">470</span> HRegionServer regionServer = startAndWriteData(TableName.valueOf(name.getMethodName()), value);<a name="line.470"></a>
-<span class="sourceLineNo">471</span> LOG.info("after writing there are "<a name="line.471"></a>
-<span class="sourceLineNo">472</span> + AbstractFSWALProvider.getNumRolledLogFiles(regionServer.getWAL(null)) + " log files");<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span> // flush all regions<a name="line.474"></a>
-<span class="sourceLineNo">475</span> for (HRegion r : regionServer.getOnlineRegionsLocalContext()) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span> r.flush(true);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span> admin.rollWALWriter(regionServer.getServerName());<a name="line.478"></a>
-<span class="sourceLineNo">479</span> int count = AbstractFSWALProvider.getNumRolledLogFiles(regionServer.getWAL(null));<a name="line.479"></a>
-<span class="sourceLineNo">480</span> LOG.info("after flushing all regions and rolling logs there are " +<a name="line.480"></a>
-<span class="sourceLineNo">481</span> count + " log files");<a name="line.481"></a>
-<span class="sourceLineNo">482</span> assertTrue(("actual count: " + count), count <= 2);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span> private void setUpforLogRolling() {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> // Force a region split after every 768KB<a name="line.486"></a>
-<span class="sourceLineNo">487</span> TEST_UTIL.getConfiguration().setLong(HConstants.HREGION_MAX_FILESIZE,<a name="line.487"></a>
-<span class="sourceLineNo">488</span> 768L * 1024L);<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span> // We roll the log after every 32 writes<a name="line.490"></a>
-<span class="sourceLineNo">491</span> TEST_UTIL.getConfiguration().setInt("hbase.regionserver.maxlogentries", 32);<a name="line.491"></a>
+<span class="sourceLineNo">420</span> admin.createTable(htd, null);<a name="line.420"></a>
+<span class="sourceLineNo">421</span> }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span> /**<a name="line.423"></a>
+<span class="sourceLineNo">424</span> * For HBASE-2556<a name="line.424"></a>
+<span class="sourceLineNo">425</span> * @throws IOException<a name="line.425"></a>
+<span class="sourceLineNo">426</span> */<a name="line.426"></a>
+<span class="sourceLineNo">427</span> @Test<a name="line.427"></a>
+<span class="sourceLineNo">428</span> public void testGetTableRegions() throws IOException {<a name="line.428"></a>
+<span class="sourceLineNo">429</span> final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span> int expectedRegions = 10;<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span> // Use 80 bit numbers to make sure we aren't limited<a name="line.433"></a>
+<span class="sourceLineNo">434</span> byte [] startKey = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };<a name="line.434"></a>
+<span class="sourceLineNo">435</span> byte [] endKey = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 };<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span><a name="line.437"></a>
+<span class="sourceLineNo">438</span> HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.438"></a>
+<span class="sourceLineNo">439</span> desc.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.439"></a>
+<span class="sourceLineNo">440</span> admin.createTable(desc, startKey, endKey, expectedRegions);<a name="line.440"></a>
+<span class="sourceLineNo">441</span><a name="line.441"></a>
+<span class="sourceLineNo">442</span> List<RegionInfo> RegionInfos = admin.getRegions(tableName);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> assertEquals("Tried to create " + expectedRegions + " regions " +<a name="line.444"></a>
+<span class="sourceLineNo">445</span> "but only found " + RegionInfos.size(),<a name="line.445"></a>
+<span class="sourceLineNo">446</span> expectedRegions, RegionInfos.size());<a name="line.446"></a>
+<span class="sourceLineNo">447</span> }<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span> @Test<a name="line.449"></a>
+<span class="sourceLineNo">450</span> public void testMoveToPreviouslyAssignedRS() throws IOException, InterruptedException {<a name="line.450"></a>
+<span class="sourceLineNo">451</span> MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.451"></a>
+<span class="sourceLineNo">452</span> HMaster master = cluster.getMaster();<a name="line.452"></a>
+<span class="sourceLineNo">453</span> final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.453"></a>
+<span class="sourceLineNo">454</span> Admin localAdmin = createTable(tableName);<a name="line.454"></a>
+<span class="sourceLineNo">455</span> List<RegionInfo> tableRegions = localAdmin.getRegions(tableName);<a name="line.455"></a>
+<span class="sourceLineNo">456</span> RegionInfo hri = tableRegions.get(0);<a name="line.456"></a>
+<span class="sourceLineNo">457</span> AssignmentManager am = master.getAssignmentManager();<a name="line.457"></a>
+<span class="sourceLineNo">458</span> ServerName server = am.getRegionStates().getRegionServerOfRegion(hri);<a name="line.458"></a>
+<span class="sourceLineNo">459</span> localAdmin.move(hri.getEncodedNameAsBytes(), Bytes.toBytes(server.getServerName()));<a name="line.459"></a>
+<span class="sourceLineNo">460</span> assertEquals("Current region server and region server before move should be same.", server,<a name="line.460"></a>
+<span class="sourceLineNo">461</span> am.getRegionStates().getRegionServerOfRegion(hri));<a name="line.461"></a>
+<span class="sourceLineNo">462</span> }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span> @Test<a name="line.464"></a>
+<span class="sourceLineNo">465</span> public void testWALRollWriting() throws Exception {<a name="line.465"></a>
+<span class="sourceLineNo">466</span> setUpforLogRolling();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> String className = this.getClass().getName();<a name="line.467"></a>
+<span class="sourceLineNo">468</span> StringBuilder v = new StringBuilder(className);<a name="line.468"></a>
+<span class="sourceLineNo">469</span> while (v.length() < 1000) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span> v.append(className);<a name="line.470"></a>
+<span class="sourceLineNo">471</span> }<a name="line.471"></a>
+<span class="sourceLineNo">472</span> byte[] value = Bytes.toBytes(v.toString());<a name="line.472"></a>
+<span class="sourceLineNo">473</span> HRegionServer regionServer = startAndWriteData(TableName.valueOf(name.getMethodName()), value);<a name="line.473"></a>
+<span class="sourceLineNo">474</span> LOG.info("after writing there are "<a name="line.474"></a>
+<span class="sourceLineNo">475</span> + AbstractFSWALProvider.getNumRolledLogFiles(regionServer.getWAL(null)) + " log files");<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span> // flush all regions<a name="line.477"></a>
+<span class="sourceLineNo">478</span> for (HRegion r : regionServer.getOnlineRegionsLocalContext()) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span> r.flush(true);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> }<a name="line.480"></a>
+<span class="sourceLineNo">481</span> admin.rollWALWriter(regionServer.getServerName());<a name="line.481"></a>
+<span class="sourceLineNo">482</span> int count = AbstractFSWALProvider.getNumRolledLogFiles(regionServer.getWAL(null));<a name="line.482"></a>
+<span class="sourceLineNo">483</span> LOG.info("after flushing all regions and rolling logs there are " +<a name="line.483"></a>
+<span class="sourceLineNo">484</span> count + " log files");<a name="line.484"></a>
+<span class="sourceLineNo">485</span> assertTrue(("actual count: " + count), count <= 2);<a name="line.485"></a>
+<span class="sourceLineNo">486</span> }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span> private void setUpforLogRolling() {<a name="line.488"></a>
+<span class="sourceLineNo">489</span> // Force a region split after every 768KB<a name="line.489"></a>
+<span class="sourceLineNo">490</span> TEST_UTIL.getConfiguration().setLong(HConstants.HREGION_MAX_FILESIZE,<a name="line.490"></a>
+<span class="sourceLineNo">491</span> 768L * 1024L);<a name="line.491"></a>
<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span> TEST_UTIL.getConfiguration().setInt(<a name="line.493"></a>
-<span class="sourceLineNo">494</span> "hbase.regionserver.logroll.errors.tolerated", 2);<a name="line.494"></a>
-<span class="sourceLineNo">495</span> TEST_UTIL.getConfiguration().setInt("hbase.rpc.timeout", 10 * 1000);<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span> // For less frequently updated regions flush after every 2 flushes<a name="line.497"></a>
-<span class="sourceLineNo">498</span> TEST_UTIL.getConfiguration().setInt(<a name="line.498"></a>
-<span class="sourceLineNo">499</span> "hbase.hregion.memstore.optionalflushcount", 2);<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> // We flush the cache after every 8192 bytes<a name="line.501"></a>
-<span class="sourceLineNo">502</span> TEST_UTIL.getConfiguration().setInt(HConstants.HREGION_MEMSTORE_FLUSH_SIZE,<a name="line.502"></a>
-<span class="sourceLineNo">503</span> 8192);<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span> // Increase the amount of time between client retries<a name="line.505"></a>
-<span class="sourceLineNo">506</span> TEST_UTIL.getConfiguration().setLong("hbase.client.pause", 10 * 1000);<a name="line.506"></a>
+<span class="sourceLineNo">493</span> // We roll the log after every 32 writes<a name="line.493"></a>
+<span class="sourceLineNo">494</span> TEST_UTIL.getConfiguration().setInt("hbase.regionserver.maxlogentries", 32);<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span> TEST_UTIL.getConfiguration().setInt(<a name="line.496"></a>
+<span class="sourceLineNo">497</span> "hbase.regionserver.logroll.errors.tolerated", 2);<a name="line.497"></a>
+<span class="sourceLineNo">498</span> TEST_UTIL.getConfiguration().setInt("hbase.rpc.timeout", 10 * 1000);<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span> // For less frequently updated regions flush after every 2 flushes<a name="line.500"></a>
+<span class="sourceLineNo">501</span> TEST_UTIL.getConfiguration().setInt(<a name="line.501"></
<TRUNCATED>