public static <TEnv> long submitAndWait(ProcedureExecutor<TEnv> procExecutor, Procedure proc) { return submitAndWait(procExecutor, proc, HConstants.NO_NONCE, HConstants.NO_NONCE); }
@Test public void testSingleSequentialProc() { List<String> state = new ArrayList<>(); Procedure<Void> subProc2 = new TestSequentialProcedure("subProc2", state); Procedure<Void> subProc1 = new TestSequentialProcedure("subProc1", state, subProc2); Procedure<Void> rootProc = new TestSequentialProcedure("rootProc", state, subProc1); long rootId = ProcedureTestingUtility.submitAndWait(procExecutor, rootProc); // successful state, with 3 execute LOG.info(Objects.toString(state)); Procedure<?> result = procExecutor.getResult(rootId); ProcedureTestingUtility.assertProcNotFailed(result); assertEquals(state.toString(), 3, state.size()); }
@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(expected=TableNotFoundException.class) public void testDeleteNotExistentTable() throws Exception { final TableName tableName = TableName.valueOf(name.getMethodName()); final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); ProcedurePrepareLatch latch = new ProcedurePrepareLatch.CompatibilityLatch(); long procId = ProcedureTestingUtility.submitAndWait(procExec, new DeleteTableProcedure(procExec.getEnvironment(), tableName, latch)); latch.await(); }
@Test(expected=TableNotDisabledException.class) public void testDeleteNotDisabledTable() throws Exception { final TableName tableName = TableName.valueOf(name.getMethodName()); final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f"); ProcedurePrepareLatch latch = new ProcedurePrepareLatch.CompatibilityLatch(); long procId = ProcedureTestingUtility.submitAndWait(procExec, new DeleteTableProcedure(procExec.getEnvironment(), tableName, latch)); latch.await(); }
public static RegionInfo[] createTable(final ProcedureExecutor<MasterProcedureEnv> procExec, final TableName tableName, final byte[][] splitKeys, String... family) throws IOException { TableDescriptor htd = createHTD(tableName, family); RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, splitKeys); long procId = ProcedureTestingUtility.submitAndWait(procExec, new CreateTableProcedure(procExec.getEnvironment(), htd, regions)); ProcedureTestingUtility.assertProcNotFailed(procExec.getResult(procId)); return regions; }
public static <TEnv> long submitAndWait(Configuration conf, TEnv env, Procedure<TEnv> proc) throws IOException { NoopProcedureStore procStore = new NoopProcedureStore(); ProcedureExecutor<TEnv> procExecutor = new ProcedureExecutor<>(conf, env, procStore); procStore.start(1); initAndStartWorkers(procExecutor, 1, false, true); try { return submitAndWait(procExecutor, proc, HConstants.NO_NONCE, HConstants.NO_NONCE); } finally { procStore.stop(false); procExecutor.stop(); } }
@Test public void testRollbackRetriableFailure() { long procId = ProcedureTestingUtility.submitAndWait(procExecutor, new TestFaultyRollback()); Procedure<?> result = procExecutor.getResult(procId); assertTrue("expected a failure", result.isFailed()); LOG.info(result.getException().getMessage()); Throwable cause = ProcedureTestingUtility.getExceptionCause(result); assertTrue("expected TestProcedureException, got " + cause, cause instanceof TestProcedureException); }
@Test public void testRestoreSnapshotToDifferentTable() throws Exception { final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); final TableName restoredTableName = TableName.valueOf(name.getMethodName()); final HTableDescriptor newHTD = createHTableDescriptor(restoredTableName, CF1, CF2); long procId = ProcedureTestingUtility.submitAndWait( procExec, new RestoreSnapshotProcedure(procExec.getEnvironment(), newHTD, snapshot)); Procedure<?> result = procExec.getResult(procId); assertTrue(result.isFailed()); LOG.debug("Restore snapshot failed with exception: " + result.getException()); assertTrue( ProcedureTestingUtility.getExceptionCause(result) instanceof TableNotFoundException); }
@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 testMetricForYieldProcedure() throws Exception { // procedure that yields ProcedureMetrics proc = new ProcedureMetrics(true, true); long id = ProcedureTestingUtility.submitAndWait(procExecutor, proc); assertNotEquals("ProcId zero!", 0, id); beginCount++; successCount++; 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 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 testRestoreSnapshot() throws Exception { final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); long procId = ProcedureTestingUtility.submitAndWait( procExec, new RestoreSnapshotProcedure(procExec.getEnvironment(), snapshotHTD, snapshot)); ProcedureTestingUtility.assertProcNotFailed(procExec.getResult(procId)); validateSnapshotRestore(); }
@Test public void testMetricsForFailedProcedure() throws Exception { // procedure that fails ProcedureMetrics proc = new ProcedureMetrics(false); 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 testMetricForSimpleProcedure() throws Exception { // procedure that executes successfully ProcedureMetrics proc = new ProcedureMetrics(true); long id = ProcedureTestingUtility.submitAndWait(procExecutor, proc); assertNotEquals("ProcId zero!", 0, id); beginCount++; successCount++; 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 testChildRollbackLoadWithSteppedRestart() throws Exception { procEnv.toggleKillBeforeStoreUpdate = true; procEnv.triggerRollbackOnChild = true; TestRootProcedure proc = new TestRootProcedure(); long procId = ProcedureTestingUtility.submitAndWait(procExecutor, proc); int restartCount = 0; while (!procExecutor.isFinished(procId)) { ProcedureTestingUtility.restart(procExecutor); ProcedureTestingUtility.waitProcedure(procExecutor, proc); restartCount++; } assertEquals(2, restartCount); assertProcFailed(procId); }
@Test public void testCloneSnapshot() throws Exception { final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); final TableName clonedTableName = TableName.valueOf("testCloneSnapshot2"); final TableDescriptor htd = createTableDescriptor(clonedTableName, CF); // take the snapshot SnapshotProtos.SnapshotDescription snapshotDesc = getSnapshot(); long procId = ProcedureTestingUtility.submitAndWait( procExec, new CloneSnapshotProcedure(procExec.getEnvironment(), htd, snapshotDesc)); ProcedureTestingUtility.assertProcNotFailed(procExec.getResult(procId)); MasterProcedureTestingUtility.validateTableIsEnabled( UTIL.getHBaseCluster().getMaster(), clonedTableName); }
@Test public void testYieldException() { TestYieldProcedure proc = new TestYieldProcedure(); ProcedureTestingUtility.submitAndWait(procExecutor, proc); assertEquals(6, proc.step); // check runnable queue stats assertEquals(0, procRunnables.size()); assertEquals(0, procRunnables.addFrontCalls); assertEquals(6, procRunnables.addBackCalls); assertEquals(5, procRunnables.yieldCalls); assertEquals(7, procRunnables.pollCalls); assertEquals(1, procRunnables.completionCalls); }
@Test public void testCrashProcedureReplay() { HMaster master = TEST_UTIL.getHBaseCluster().getMaster(); final ProcedureExecutor<MasterProcedureEnv> pExecutor = master.getMasterProcedureExecutor(); ServerCrashProcedure proc = new ServerCrashProcedure( pExecutor.getEnvironment(), hostname123, false, false); ProcedureTestingUtility.submitAndWait(pExecutor, proc); assertFalse(master.getServerManager().getDeadServers().areDeadServersInProgress()); }
private void testSimpleDelete(final TableName tableName, byte[][] splitKeys) throws Exception { RegionInfo[] regions = MasterProcedureTestingUtility.createTable( getMasterProcedureExecutor(), tableName, splitKeys, "f1", "f2"); UTIL.getAdmin().disableTable(tableName); // delete the table final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor(); long procId = ProcedureTestingUtility.submitAndWait(procExec, new DeleteTableProcedure(procExec.getEnvironment(), tableName)); ProcedureTestingUtility.assertProcNotFailed(procExec, procId); MasterProcedureTestingUtility.validateTableDeletion(getMaster(), tableName); }