/** * Mark all partitions as ready to send and block until the send is complete */ public void awaitFlushCompletion() throws InterruptedException { try { for (ProducerBatch batch : this.incomplete.copyAll()) batch.produceFuture.await(); } finally { this.flushesInProgress.decrementAndGet(); } }
@Override public RecordMetadata get() throws InterruptedException, ExecutionException { this.result.await(); if (nextRecordMetadata != null) return nextRecordMetadata.get(); return valueOrError(); }
@Override public RecordMetadata get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { // Handle overflow. long now = time.milliseconds(); long timeoutMillis = unit.toMillis(timeout); long deadline = Long.MAX_VALUE - timeoutMillis < now ? Long.MAX_VALUE : now + timeoutMillis; boolean occurred = this.result.await(timeout, unit); if (!occurred) throw new TimeoutException("Timeout after waiting for " + timeoutMillis + " ms."); if (nextRecordMetadata != null) return nextRecordMetadata.get(deadline - time.milliseconds(), TimeUnit.MILLISECONDS); return valueOrError(); }
private ProduceRequestResult mockProduceRequestResult() throws InterruptedException { ProduceRequestResult mockProduceRequestResult = mock(ProduceRequestResult.class); when(mockProduceRequestResult.await(anyLong(), any(TimeUnit.class))).thenReturn(true); return mockProduceRequestResult; } }
@Test public void testFutureGetWithSeconds() throws ExecutionException, InterruptedException, TimeoutException { ProduceRequestResult produceRequestResult = mockProduceRequestResult(); FutureRecordMetadata future = futureRecordMetadata(produceRequestResult); ProduceRequestResult chainedProduceRequestResult = mockProduceRequestResult(); future.chain(futureRecordMetadata(chainedProduceRequestResult)); future.get(1L, TimeUnit.SECONDS); verify(produceRequestResult).await(1L, TimeUnit.SECONDS); verify(chainedProduceRequestResult).await(1000L, TimeUnit.MILLISECONDS); }
@Test public void testFutureGetWithMilliSeconds() throws ExecutionException, InterruptedException, TimeoutException { ProduceRequestResult produceRequestResult = mockProduceRequestResult(); FutureRecordMetadata future = futureRecordMetadata(produceRequestResult); ProduceRequestResult chainedProduceRequestResult = mockProduceRequestResult(); future.chain(futureRecordMetadata(chainedProduceRequestResult)); future.get(1000L, TimeUnit.MILLISECONDS); verify(produceRequestResult).await(1000L, TimeUnit.MILLISECONDS); verify(chainedProduceRequestResult).await(1000L, TimeUnit.MILLISECONDS); }
@Override public RecordMetadata get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { boolean occurred = this.result.await(timeout, unit); if (!occurred) throw new TimeoutException("Timeout after waiting for " + TimeUnit.MILLISECONDS.convert(timeout, unit) + " ms."); return valueOrError(); }
@Override public RecordMetadata get() throws InterruptedException, ExecutionException { this.result.await(); return valueOrError(); }