asf.waitUntilDone(); if (asf.hasError()) { errors.add(asf.getErrors());
@Test public void testSubmitWithCB() throws Exception { ClusterConnection hc = createHConnection(); final AtomicInteger updateCalled = new AtomicInteger(0); Batch.Callback<Object> cb = new Batch.Callback<Object>() { @Override public void update(byte[] region, byte[] row, Object result) { updateCalled.incrementAndGet(); } }; MyAsyncProcess ap = new MyAsyncProcess(hc, CONF); List<Put> puts = new ArrayList<>(1); puts.add(createPut(1, true)); final AsyncRequestFuture ars = ap.submit(null, DUMMY_TABLE, puts, false, cb, false); Assert.assertTrue(puts.isEmpty()); ars.waitUntilDone(); Assert.assertEquals(1, updateCalled.get()); }
@Test public void testFlush() 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); ars.waitUntilDone(); verifyResult(ars, false, true, true); Assert.assertEquals(NB_RETRIES + 1, ap.callsCt.get()); Assert.assertEquals(1, ars.getFailedOperations().size()); }
.build(); AsyncRequestFuture future = asyncProcess.submit(task); future.waitUntilDone();
@Test public void testSuccessivePut() throws Exception { MyAsyncProcess ap = new MyAsyncProcess(createHConnection(), CONF); List<Put> puts = new ArrayList<>(1); puts.add(new Put(GOOD_ROW).addColumn(FAMILY, FAMILY, FAMILY)); final int expectedSize = puts.size(); AsyncRequestFuture arf = ap.submit(DUMMY_TABLE, puts); arf.waitUntilDone(); Object[] result = arf.getResults(); assertEquals(expectedSize, result.length); for (Object r : result) { assertEquals(Result.class, r.getClass()); } assertTrue(puts.isEmpty()); assertActionsInProgress(arf); }
@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))); }
@Test public void testFailedPut() throws Exception { MyAsyncProcess ap = new MyAsyncProcess(createHConnection(), CONF); List<Put> puts = new ArrayList<>(2); puts.add(new Put(GOOD_ROW).addColumn(FAMILY, FAMILY, FAMILY)); // this put should fail puts.add(new Put(BAD_ROW).addColumn(FAMILY, FAMILY, FAMILY)); final int expectedSize = puts.size(); AsyncRequestFuture arf = ap.submit(DUMMY_TABLE, puts); arf.waitUntilDone(); // There is a failed puts assertError(arf, 1); Object[] result = arf.getResults(); assertEquals(expectedSize, result.length); assertEquals(Result.class, result[0].getClass()); assertTrue(result[1] instanceof IOException); assertTrue(puts.isEmpty()); assertActionsInProgress(arf); }
@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); }
@Test public void testFailedPutWithoutActionException() throws Exception { MyAsyncProcess ap = new MyAsyncProcess(createHConnection(), CONF); List<Put> puts = new ArrayList<>(3); puts.add(new Put(GOOD_ROW).addColumn(FAMILY, FAMILY, FAMILY)); // this put should fail puts.add(new Put(BAD_ROW).addColumn(FAMILY, FAMILY, FAMILY)); // this put should fail, and it won't have action exception puts.add(new Put(BAD_ROW_WITHOUT_ACTION_EXCEPTION).addColumn(FAMILY, FAMILY, FAMILY)); final int expectedSize = puts.size(); AsyncRequestFuture arf = ap.submit(DUMMY_TABLE, puts); arf.waitUntilDone(); // There are two failed puts assertError(arf, 2); Object[] result = arf.getResults(); assertEquals(expectedSize, result.length); assertEquals(Result.class, result[0].getClass()); assertTrue(result[1] instanceof IOException); assertTrue(result[2] instanceof IOException); assertTrue(puts.isEmpty()); assertActionsInProgress(arf); }
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(); } }
.setSubmittedRows(AsyncProcessTask.SubmittedRows.ALL).setResults(results).build(); AsyncRequestFuture ars = multiAp.submit(task); ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors();
.build(); AsyncRequestFuture ars = multiAp.submit(task); ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors();
.build(); AsyncRequestFuture reqs = ap.submit(task); reqs.waitUntilDone();
.build(); AsyncRequestFuture ars = multiAp.submit(task); ars.waitUntilDone(); if (ars.hasError()) { throw ars.getErrors();
@Test public void testSubmitWithCB() throws Exception { ClusterConnection hc = createHConnection(); final AtomicInteger updateCalled = new AtomicInteger(0); Batch.Callback<Object> cb = new Batch.Callback<Object>() { @Override public void update(byte[] region, byte[] row, Object result) { updateCalled.incrementAndGet(); } }; MyAsyncProcess ap = new MyAsyncProcess(hc, CONF); List<Put> puts = new ArrayList<>(1); puts.add(createPut(1, true)); final AsyncRequestFuture ars = ap.submit(null, DUMMY_TABLE, puts, false, cb, false); Assert.assertTrue(puts.isEmpty()); ars.waitUntilDone(); Assert.assertEquals(1, updateCalled.get()); }
@Test public void testFlush() 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); ars.waitUntilDone(); verifyResult(ars, false, true, true); Assert.assertEquals(NB_RETRIES + 1, ap.callsCt.get()); Assert.assertEquals(1, ars.getFailedOperations().size()); }
@Test public void testSuccessivePut() throws Exception { MyAsyncProcess ap = new MyAsyncProcess(createHConnection(), CONF); List<Put> puts = new ArrayList<>(1); puts.add(new Put(GOOD_ROW).addColumn(FAMILY, FAMILY, FAMILY)); final int expectedSize = puts.size(); AsyncRequestFuture arf = ap.submit(DUMMY_TABLE, puts); arf.waitUntilDone(); Object[] result = arf.getResults(); assertEquals(expectedSize, result.length); for (Object r : result) { assertEquals(Result.class, r.getClass()); } assertTrue(puts.isEmpty()); assertActionsInProgress(arf); }
@Test public void testFailedPut() throws Exception { MyAsyncProcess ap = new MyAsyncProcess(createHConnection(), CONF); List<Put> puts = new ArrayList<>(2); puts.add(new Put(GOOD_ROW).addColumn(FAMILY, FAMILY, FAMILY)); // this put should fail puts.add(new Put(BAD_ROW).addColumn(FAMILY, FAMILY, FAMILY)); final int expectedSize = puts.size(); AsyncRequestFuture arf = ap.submit(DUMMY_TABLE, puts); arf.waitUntilDone(); // There is a failed puts assertError(arf, 1); Object[] result = arf.getResults(); assertEquals(expectedSize, result.length); assertEquals(Result.class, result[0].getClass()); assertTrue(result[1] instanceof IOException); assertTrue(puts.isEmpty()); assertActionsInProgress(arf); }
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(); } }