public static <TEnv> void waitProcedures(ProcedureExecutor<TEnv> procExecutor, long... procIds) { for (int i = 0; i < procIds.length; ++i) { waitProcedure(procExecutor, procIds[i]); } }
public static <TEnv> long submitAndWait(ProcedureExecutor<TEnv> procExecutor, Procedure proc, final long nonceGroup, final long nonce) { long procId = submitProcedure(procExecutor, proc, nonceGroup, nonce); waitProcedure(procExecutor, procId); return procId; }
public static <TEnv> void waitAllProcedures(ProcedureExecutor<TEnv> procExecutor) { for (long procId : procExecutor.getActiveProcIds()) { waitProcedure(procExecutor, procId); } }
public static <TEnv> void waitProcedure(ProcedureExecutor<TEnv> procExecutor, Procedure proc) { while (proc.getState() == ProcedureState.INITIALIZING) { Threads.sleepWithoutInterrupt(250); } waitProcedure(procExecutor, proc.getProcId()); }
@Test public void testChildOnLastStep() { long procId = procExecutor.submitProcedure(new TestSMProcedure()); ProcedureTestingUtility.waitProcedure(procExecutor, procId); assertEquals(3, procExecutor.getEnvironment().execCount.get()); assertEquals(0, procExecutor.getEnvironment().rollbackCount.get()); ProcedureTestingUtility.assertProcNotFailed(procExecutor, procId); }
private void requestSplitRegion( final HRegionServer rsServer, final Region region, final byte[] midKey) throws IOException { long procId = cluster.getMaster().splitRegion(region.getRegionInfo(), midKey, 0, 0); // wait for the split to complete or get interrupted. If the split completes successfully, // the procedure will return true; if the split fails, the procedure would throw exception. ProcedureTestingUtility.waitProcedure(cluster.getMaster().getMasterProcedureExecutor(), procId); }
@Test public void testChildNormalRollbackStateCount() { procExecutor.getEnvironment().triggerChildRollback = true; TestSMProcedureBadRollback testNormalRollback = new TestSMProcedureBadRollback(); long procId = procExecutor.submitProcedure(testNormalRollback); ProcedureTestingUtility.waitProcedure(procExecutor, procId); assertEquals(0, testNormalRollback.stateCount); }
private void createNamespaceForTesting(NamespaceDescriptor nsDescriptor) throws Exception { final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); long procId = procExec.submitProcedure( new CreateNamespaceProcedure(procExec.getEnvironment(), nsDescriptor)); // Wait the completion ProcedureTestingUtility.waitProcedure(procExec, procId); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); } }
@Test public void testChildRollbackLoad() throws Exception { procEnv.toggleKillBeforeStoreUpdate = false; procEnv.triggerRollbackOnChild = true; TestRootProcedure proc = new TestRootProcedure(); long procId = ProcedureTestingUtility.submitAndWait(procExecutor, proc); ProcedureTestingUtility.restart(procExecutor); ProcedureTestingUtility.waitProcedure(procExecutor, proc); assertProcFailed(procId); }
@Test public void testChildBadRollbackStateCount() { procExecutor.getEnvironment().triggerChildRollback = true; TestSMProcedureBadRollback testBadRollback = new TestSMProcedureBadRollback(); long procId = procExecutor.submitProcedure(testBadRollback); ProcedureTestingUtility.waitProcedure(procExecutor, procId); assertEquals(0, testBadRollback.stateCount); }
@Test public void testChildOnLastStepWithRollback() { procExecutor.getEnvironment().triggerChildRollback = true; long procId = procExecutor.submitProcedure(new TestSMProcedure()); ProcedureTestingUtility.waitProcedure(procExecutor, procId); assertEquals(3, procExecutor.getEnvironment().execCount.get()); assertEquals(3, procExecutor.getEnvironment().rollbackCount.get()); Throwable cause = ProcedureTestingUtility.assertProcFailed(procExecutor, procId); assertEquals(TEST_FAILURE_EXCEPTION, cause); }
private void createNamespaceForTesting(final String namespaceName) throws Exception { final NamespaceDescriptor nsd = NamespaceDescriptor.create(namespaceName).build(); final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); long procId = procExec.submitProcedure( new CreateNamespaceProcedure(procExec.getEnvironment(), nsd)); // Wait the completion ProcedureTestingUtility.waitProcedure(procExec, procId); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); }
@Test public void testChildLoad() throws Exception { procEnv.toggleKillBeforeStoreUpdate = false; TestRootProcedure proc = new TestRootProcedure(); long procId = ProcedureTestingUtility.submitAndWait(procExecutor, proc); ProcedureTestingUtility.restart(procExecutor); ProcedureTestingUtility.waitProcedure(procExecutor, proc); assertTrue("expected completed proc", procExecutor.isFinished(procId)); ProcedureTestingUtility.assertProcNotFailed(procExecutor, procId); }
@Test public void testMetricForFailedYiledProcedure() { // procedure that yields and fails ProcedureMetrics proc = new ProcedureMetrics(false, true); long id = ProcedureTestingUtility.submitAndWait(procExecutor, proc); assertNotEquals("ProcId zero!", 0, id); beginCount++; failedCount++; ProcedureTestingUtility.waitProcedure(procExecutor, proc); assertEquals("beginCount doesn't match!", beginCount, proc.beginCount); assertEquals("successCount doesn't match!", successCount, proc.successCount); assertEquals("failedCont doesn't match!", failedCount, proc.failedCount); }
@Test public void testDeleteNamespace() throws Exception { final String namespaceName = "testDeleteNamespace"; final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); createNamespaceForTesting(namespaceName); long procId = procExec.submitProcedure( new DeleteNamespaceProcedure(procExec.getEnvironment(), namespaceName)); // Wait the completion ProcedureTestingUtility.waitProcedure(procExec, procId); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); validateNamespaceNotExist(namespaceName); }
@After public void tearDown() throws Exception { ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false); // Kill all running procedures. for (Procedure<?> proc : procExec.getProcedures()) { procExec.abort(proc.getProcId()); ProcedureTestingUtility.waitProcedure(procExec, proc); } assertEquals(0, procExec.getEnvironment().getProcedureScheduler().size()); }
@Test public void testAbort() throws Exception { LockRequest lock = getTableExclusiveLock(tableName1, testMethodName); final long procId = queueLock(lock); assertTrue(awaitForLocked(procId, 2000)); assertTrue(procExec.abort(procId)); sendHeartbeatAndCheckLocked(procId, false); ProcedureTestingUtility.waitProcedure(procExec, procId); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); }
@Test public void testCreateNamespace() throws Exception { final NamespaceDescriptor nsd = NamespaceDescriptor.create("testCreateNamespace").build(); final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); long procId = procExec.submitProcedure( new CreateNamespaceProcedure(procExec.getEnvironment(), nsd)); // Wait the completion ProcedureTestingUtility.waitProcedure(procExec, procId); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); validateNamespaceCreated(nsd); }
@Test public void testStateMachineMultipleLevel() throws Exception { long procId = procExecutor.submitProcedure(new TestStateMachineProcedure(true)); // Wait the completion ProcedureTestingUtility.waitProcedure(procExecutor, procId); Procedure<?> result = procExecutor.getResult(procId); ProcedureTestingUtility.assertProcNotFailed(result); assertEquals(19, Bytes.toInt(result.getResult())); assertEquals(4, procExecutor.getLastProcId()); }
@After public void tearDown() throws Exception { for (Procedure<?> proc : getMasterProcedureExecutor().getProcedures()) { if (proc instanceof LockProcedure) { ((LockProcedure) proc).unlock(getMasterProcedureExecutor().getEnvironment()); ProcedureTestingUtility.waitProcedure(getMasterProcedureExecutor(), proc); } } assertEquals(0, getMasterProcedureExecutor().getEnvironment().getProcedureScheduler().size()); }