### Question:
AsyncProcess { protected HConnectionManager.ServerErrorTracker createServerErrorTracker() { return new HConnectionManager.ServerErrorTracker(this.serverTrackerTimeout, this.numTries); } AsyncProcess(HConnection hc, TableName tableName, ExecutorService pool,
      AsyncProcessCallback<CResult> callback, Configuration conf,
      RpcRetryingCallerFactory rpcCaller); void submit(List<? extends Row> rows, boolean atLeastOne); void submitAll(List<? extends Row> rows); void sendMultiAction(final List<Action<Row>> initialActions,
                              Map<HRegionLocation, MultiAction<Row>> actionsByServer,
                              final int numAttempt,
                              final HConnectionManager.ServerErrorTracker errorsByServer); void waitUntilDone(); boolean hasError(); List<? extends Row> getFailedOperations(); void clearErrors(); RetriesExhaustedWithDetailsException getErrors();  }### Answer:
@Test public void testErrorsServers() throws IOException { HTable ht = new HTable(); Configuration configuration = new Configuration(conf); configuration.setBoolean(HConnectionManager.RETRIES_BY_SERVER_KEY, true); configuration.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 3); ht.setWriteBufferSize(configuration.getLong("hbase.client.write.buffer", 2097152)); MyConnectionImpl mci = new MyConnectionImpl(configuration); ht.connection = mci; ht.ap = new MyAsyncProcess<Object>(mci, null, configuration); Assert.assertNotNull(ht.ap.createServerErrorTracker()); Assert.assertTrue(ht.ap.serverTrackerTimeout > 200); ht.ap.serverTrackerTimeout = 1; Put p = createPut(1, false); ht.setAutoFlush(false, false); ht.put(p); try { ht.flushCommits(); Assert.fail(); } catch (RetriesExhaustedWithDetailsException expected) { } Assert.assertEquals(ht.ap.tasksSent.get(), 3); }