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>
