RetryingMutateRowsOperation extends AbstractRetryingOperation<
        MutateRowsRequest, MutateRowsResponse, List<MutateRowsResponse>> { @Override protected MutateRowsRequest getRetryRequest() { return requestManager.getRetryRequest(); } RetryingMutateRowsOperation(
      RetryOptions retryOptions,
      MutateRowsRequest originalRequest,
      BigtableAsyncRpc<MutateRowsRequest, MutateRowsResponse> retryableRpc,
      CallOptions callOptions,
      ScheduledExecutorService retryExecutorService,
      Metadata originalMetadata,
      ApiClock clock); @Override void onMessage(MutateRowsResponse message);  }
@Test public void testRetry() throws Exception { MutateRowsRequest request = createRequest(2); RetryingMutateRowsOperation underTest = createOperation(request); ListenableFuture<?> future = underTest.getAsyncResult(); MutateRowsRequest retryRequest = createRequest(request.getEntries(1)); send(underTest, OK, DEADLINE_EXCEEDED); checkExecutor(1); Assert.assertEquals(retryRequest, underTest.getRetryRequest()); for (int i = 1; i < 6; i++) { send(underTest, DEADLINE_EXCEEDED); checkExecutor(i + 1); Assert.assertEquals(retryRequest, underTest.getRetryRequest()); } send(underTest, OK); checkResponse(future, createResponse(OK, OK)); }
@Test public void testRetryExhausted() throws Exception { MutateRowsRequest request = createRequest(2); RetryingMutateRowsOperation underTest = createOperation(request); ListenableFuture<?> future = underTest.getAsyncResult(); MutateRowsRequest retryRequest = createRequest(request.getEntries(1)); send(underTest, OK, DEADLINE_EXCEEDED); checkExecutor(1); Assert.assertEquals(retryRequest, underTest.getRetryRequest()); clock.setTime( clock.millisTime() + RETRY_OPTIONS.getMaxElapsedBackoffMillis() + 1, TimeUnit.MILLISECONDS); send(underTest, DEADLINE_EXCEEDED); checkExecutor(1); Assert.assertEquals(retryRequest, underTest.getRetryRequest()); checkResponse(future, createResponse(OK, DEADLINE_EXCEEDED)); }
@Test public void testResponseOutOfOrder() throws Exception { MutateRowsRequest request = createRequest(2); RetryingMutateRowsOperation underTest = createOperation(request); ListenableFuture<?> future = underTest.getAsyncResult(); send(underTest, createResponse(toEntry(1, DEADLINE_EXCEEDED), toEntry(0, OK))); checkExecutor(1); Assert.assertEquals(createRequest(request.getEntries(1)), underTest.getRetryRequest()); send(underTest, OK); checkResponse(future, createResponse(OK, OK)); }