errors.add(asf.getErrors());
@Test public void testFail() throws Exception { MyAsyncProcess ap = new MyAsyncProcess(createHConnection(), CONF); List<Put> puts = new ArrayList<>(1); Put p = createPut(1, false); puts.add(p); AsyncRequestFuture ars = ap.submit(null, DUMMY_TABLE, puts, false, null, true); Assert.assertEquals(0, puts.size()); ars.waitUntilDone(); verifyResult(ars, false); Assert.assertEquals(NB_RETRIES + 1, ap.callsCt.get()); Assert.assertEquals(1, ars.getErrors().exceptions.size()); Assert.assertTrue("was: " + ars.getErrors().exceptions.get(0), failure.equals(ars.getErrors().exceptions.get(0))); Assert.assertTrue("was: " + ars.getErrors().exceptions.get(0), failure.equals(ars.getErrors().exceptions.get(0))); Assert.assertEquals(1, ars.getFailedOperations().size()); Assert.assertTrue("was: " + ars.getFailedOperations().get(0), p.equals(ars.getFailedOperations().get(0))); }
private static void assertError(AsyncRequestFuture arf, int expectedCountOfFailure) { assertTrue(arf.hasError()); RetriesExhaustedWithDetailsException e = arf.getErrors(); List<Throwable> errors = e.getCauses(); assertEquals(expectedCountOfFailure, errors.size()); for (Throwable t : errors) { assertTrue(t instanceof IOException); } }
throw future.getErrors(); } else if (!callbackErrorExceptions.isEmpty()) { throw new RetriesExhaustedWithDetailsException(callbackErrorExceptions, callbackErrorActions,
public static <R> void doBatchWithCallback(List<? extends Row> actions, Object[] results, Callback<R> callback, ClusterConnection connection, ExecutorService pool, TableName tableName) throws InterruptedIOException, RetriesExhaustedWithDetailsException { int operationTimeout = connection.getConnectionConfiguration().getOperationTimeout(); int writeTimeout = connection.getConfiguration().getInt(HConstants.HBASE_RPC_WRITE_TIMEOUT_KEY, connection.getConfiguration().getInt(HConstants.HBASE_RPC_TIMEOUT_KEY, HConstants.DEFAULT_HBASE_RPC_TIMEOUT)); AsyncProcessTask<R> task = AsyncProcessTask.newBuilder(callback) .setPool(pool) .setTableName(tableName) .setRowAccess(actions) .setResults(results) .setOperationTimeout(operationTimeout) .setRpcTimeout(writeTimeout) .setSubmittedRows(AsyncProcessTask.SubmittedRows.ALL) .build(); AsyncRequestFuture ars = connection.getAsyncProcess().submit(task); ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors(); } }
@Test public void testFailAndSuccess() throws Exception { MyAsyncProcess ap = new MyAsyncProcess(createHConnection(), CONF); List<Put> puts = new ArrayList<>(3); puts.add(createPut(1, false)); puts.add(createPut(1, true)); puts.add(createPut(1, true)); AsyncRequestFuture ars = ap.submit(null, DUMMY_TABLE, puts, false, null, true); Assert.assertTrue(puts.isEmpty()); ars.waitUntilDone(); verifyResult(ars, false, true, true); Assert.assertEquals(NB_RETRIES + 1, ap.callsCt.get()); ap.callsCt.set(0); Assert.assertEquals(1, ars.getErrors().actions.size()); puts.add(createPut(1, true)); // Wait for AP to be free. While ars might have the result, ap counters are decreased later. ap.waitForMaximumCurrentTasks(0, null); ars = ap.submit(null, DUMMY_TABLE, puts, false, null, true); Assert.assertEquals(0, puts.size()); ars.waitUntilDone(); Assert.assertEquals(1, ap.callsCt.get()); verifyResult(ars, true); }
public void batch(final List<? extends Row> actions, final Object[] results, int rpcTimeout) throws InterruptedException, IOException { AsyncProcessTask task = AsyncProcessTask.newBuilder() .setPool(pool) .setTableName(tableName) .setRowAccess(actions) .setResults(results) .setRpcTimeout(rpcTimeout) .setOperationTimeout(operationTimeoutMs) .setSubmittedRows(AsyncProcessTask.SubmittedRows.ALL) .build(); AsyncRequestFuture ars = multiAp.submit(task); ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors(); } }
ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors();
ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors();
@Test public void testReplicaAllCallsFailForOneRegion() throws Exception { // For one of the region, all 3, main and replica, calls fail. For the other, replica // call fails but its exception should not be visible as it did succeed. MyAsyncProcessWithReplicas ap = createReplicaAp(500, 1000, 0, 0); ap.addFailures(hri1, hri1r1, hri1r2, hri2r1); List<Get> rows = makeTimelineGets(DUMMY_BYTES_1, DUMMY_BYTES_2); AsyncProcessTask task = AsyncProcessTask.newBuilder() .setPool(ap.service) .setRpcTimeout(RPC_TIMEOUT) .setOperationTimeout(OPERATION_TIMEOUT) .setTableName(DUMMY_TABLE) .setRowAccess(rows) .setResults(new Object[2]) .setSubmittedRows(SubmittedRows.ALL) .build(); AsyncRequestFuture ars = ap.submit(task); verifyReplicaResult(ars, RR.FAILED, RR.FALSE); // We should get 3 exceptions, for main + 2 replicas for DUMMY_BYTES_1 Assert.assertEquals(3, ars.getErrors().getNumExceptions()); for (int i = 0; i < ars.getErrors().getNumExceptions(); ++i) { Assert.assertArrayEquals(DUMMY_BYTES_1, ars.getErrors().getRow(i).getRow()); } }
ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors();
@Test public void testFail() throws Exception { MyAsyncProcess ap = new MyAsyncProcess(createHConnection(), CONF); List<Put> puts = new ArrayList<>(1); Put p = createPut(1, false); puts.add(p); AsyncRequestFuture ars = ap.submit(null, DUMMY_TABLE, puts, false, null, true); Assert.assertEquals(0, puts.size()); ars.waitUntilDone(); verifyResult(ars, false); Assert.assertEquals(NB_RETRIES + 1, ap.callsCt.get()); Assert.assertEquals(1, ars.getErrors().exceptions.size()); Assert.assertTrue("was: " + ars.getErrors().exceptions.get(0), failure.equals(ars.getErrors().exceptions.get(0))); Assert.assertTrue("was: " + ars.getErrors().exceptions.get(0), failure.equals(ars.getErrors().exceptions.get(0))); Assert.assertEquals(1, ars.getFailedOperations().size()); Assert.assertTrue("was: " + ars.getFailedOperations().get(0), p.equals(ars.getFailedOperations().get(0))); }
errors.add(asf.getErrors());
private static void assertError(AsyncRequestFuture arf, int expectedCountOfFailure) { assertTrue(arf.hasError()); RetriesExhaustedWithDetailsException e = arf.getErrors(); List<Throwable> errors = e.getCauses(); assertEquals(expectedCountOfFailure, errors.size()); for (Throwable t : errors) { assertTrue(t instanceof IOException); } }
@Test public void testFailAndSuccess() throws Exception { MyAsyncProcess ap = new MyAsyncProcess(createHConnection(), CONF); List<Put> puts = new ArrayList<>(3); puts.add(createPut(1, false)); puts.add(createPut(1, true)); puts.add(createPut(1, true)); AsyncRequestFuture ars = ap.submit(null, DUMMY_TABLE, puts, false, null, true); Assert.assertTrue(puts.isEmpty()); ars.waitUntilDone(); verifyResult(ars, false, true, true); Assert.assertEquals(NB_RETRIES + 1, ap.callsCt.get()); ap.callsCt.set(0); Assert.assertEquals(1, ars.getErrors().actions.size()); puts.add(createPut(1, true)); // Wait for AP to be free. While ars might have the result, ap counters are decreased later. ap.waitForMaximumCurrentTasks(0, null); ars = ap.submit(null, DUMMY_TABLE, puts, false, null, true); Assert.assertEquals(0, puts.size()); ars.waitUntilDone(); Assert.assertEquals(1, ap.callsCt.get()); verifyResult(ars, true); }
public static <R> void doBatchWithCallback(List<? extends Row> actions, Object[] results, Callback<R> callback, ClusterConnection connection, ExecutorService pool, TableName tableName) throws InterruptedIOException, RetriesExhaustedWithDetailsException { int operationTimeout = connection.getConnectionConfiguration().getOperationTimeout(); int writeTimeout = connection.getConfiguration().getInt(HConstants.HBASE_RPC_WRITE_TIMEOUT_KEY, connection.getConfiguration().getInt(HConstants.HBASE_RPC_TIMEOUT_KEY, HConstants.DEFAULT_HBASE_RPC_TIMEOUT)); AsyncProcessTask<R> task = AsyncProcessTask.newBuilder(callback) .setPool(pool) .setTableName(tableName) .setRowAccess(actions) .setResults(results) .setOperationTimeout(operationTimeout) .setRpcTimeout(writeTimeout) .setSubmittedRows(AsyncProcessTask.SubmittedRows.ALL) .build(); AsyncRequestFuture ars = connection.getAsyncProcess().submit(task); ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors(); } }
public void batch(final List<? extends Row> actions, final Object[] results, int rpcTimeout) throws InterruptedException, IOException { AsyncProcessTask task = AsyncProcessTask.newBuilder() .setPool(pool) .setTableName(tableName) .setRowAccess(actions) .setResults(results) .setRpcTimeout(rpcTimeout) .setOperationTimeout(operationTimeoutMs) .setSubmittedRows(AsyncProcessTask.SubmittedRows.ALL) .build(); AsyncRequestFuture ars = multiAp.submit(task); ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors(); } }
ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors();
@Test public void testReplicaAllCallsFailForOneRegion() throws Exception { // For one of the region, all 3, main and replica, calls fail. For the other, replica // call fails but its exception should not be visible as it did succeed. MyAsyncProcessWithReplicas ap = createReplicaAp(500, 1000, 0, 0); ap.addFailures(hri1, hri1r1, hri1r2, hri2r1); List<Get> rows = makeTimelineGets(DUMMY_BYTES_1, DUMMY_BYTES_2); AsyncProcessTask task = AsyncProcessTask.newBuilder() .setPool(ap.service) .setRpcTimeout(RPC_TIMEOUT) .setOperationTimeout(OPERATION_TIMEOUT) .setTableName(DUMMY_TABLE) .setRowAccess(rows) .setResults(new Object[2]) .setSubmittedRows(SubmittedRows.ALL) .build(); AsyncRequestFuture ars = ap.submit(task); verifyReplicaResult(ars, RR.FAILED, RR.FALSE); // We should get 3 exceptions, for main + 2 replicas for DUMMY_BYTES_1 Assert.assertEquals(3, ars.getErrors().getNumExceptions()); for (int i = 0; i < ars.getErrors().getNumExceptions(); ++i) { Assert.assertArrayEquals(DUMMY_BYTES_1, ars.getErrors().getRow(i).getRow()); } }
ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors();