public void onCompletion(RecordMetadata metadata, Exception exception) { if (exception != null) { logger.debug("Error sending message to Kafka {} ", exception.getMessage()); } if (logger.isDebugEnabled()) { long eventElapsedTime = System.currentTimeMillis() - startTime; if (metadata != null) { logger.debug("Acked message partition:{} ofset:{}", metadata.partition(), metadata.offset()); } logger.debug("Elapsed time for send: {}", eventElapsedTime); } } }
@Override public void onCompletion(RecordMetadata metadata, Exception exception) { if (exception != null) { exception.printStackTrace(); return; } logger.info("topic:" + metadata.topic() + "; partition: " + metadata.partition() + "; offset: " + metadata.offset()); } };
public void onCompletion(RecordMetadata metadata, Exception exception) { if (exception != null) { log.trace("Error sending message to Kafka due to " + exception.getMessage()); } if (log.isDebugEnabled()) { long batchElapsedTime = System.currentTimeMillis() - startTime; if (metadata != null) { log.debug("Acked message_no " + index + ": " + metadata.topic() + "-" + metadata.partition() + "-" + metadata.offset() + "-" + batchElapsedTime); } } } }
@Test public void shouldIncludeCommandSequenceNumberInSuccessfulQueuedCommandStatus() { // When: final QueuedCommandStatus commandStatus = commandStore.enqueueCommand(statementText, statement, KSQL_CONFIG, OVERRIDE_PROPERTIES); // Then: assertThat(commandStatus.getCommandSequenceNumber(), equalTo(recordMetadata.offset())); }
@Test public void testAutoCompleteMock() throws Exception { buildMockProducer(true); Future<RecordMetadata> metadata = producer.send(record1); assertTrue("Send should be immediately complete", metadata.isDone()); assertFalse("Send should be successful", isError(metadata)); assertEquals("Offset should be 0", 0L, metadata.get().offset()); assertEquals(topic, metadata.get().topic()); assertEquals("We should have the record in our history", singletonList(record1), producer.history()); producer.clear(); assertEquals("Clear should erase our history", 0, producer.history().size()); }
/** * Test that an asynchronous request will eventually return the right offset */ @Test public void testBlocking() throws Exception { FutureRecordMetadata future = new FutureRecordMetadata(asyncRequest(baseOffset, null, 50L), relOffset, RecordBatch.NO_TIMESTAMP, 0L, 0, 0, Time.SYSTEM); assertEquals(baseOffset + relOffset, future.get().offset()); }
@Test public void testMessageFormatDownConversion() throws Exception { // this test case verifies the behavior when the version of the produce request supported by the // broker changes after the record set is created long offset = 0; // start off support produce request v3 apiVersions.update("0", NodeApiVersions.create()); Future<RecordMetadata> future = accumulator.append(tp0, 0L, "key".getBytes(), "value".getBytes(), null, null, MAX_BLOCK_TIMEOUT).future; // now the partition leader supports only v2 apiVersions.update("0", NodeApiVersions.create(Collections.singleton( new ApiVersionsResponse.ApiVersion(ApiKeys.PRODUCE.id, (short) 0, (short) 2)))); client.prepareResponse(new MockClient.RequestMatcher() { @Override public boolean matches(AbstractRequest body) { ProduceRequest request = (ProduceRequest) body; if (request.version() != 2) return false; MemoryRecords records = request.partitionRecordsOrFail().get(tp0); return records != null && records.sizeInBytes() > 0 && records.hasMatchingMagic(RecordBatch.MAGIC_VALUE_V1); } }, produceResponse(tp0, offset, Errors.NONE, 0)); sender.run(time.milliseconds()); // connect sender.run(time.milliseconds()); // send produce request assertTrue("Request should be completed", future.isDone()); assertEquals(offset, future.get().offset()); }
@Test public void testSimple() throws Exception { long offset = 0; Future<RecordMetadata> future = accumulator.append(tp0, 0L, "key".getBytes(), "value".getBytes(), null, null, MAX_BLOCK_TIMEOUT).future; sender.run(time.milliseconds()); // connect sender.run(time.milliseconds()); // send produce request assertEquals("We should have a single produce request in flight.", 1, client.inFlightRequestCount()); assertEquals(1, sender.inFlightBatches(tp0).size()); assertTrue(client.hasInFlightRequests()); client.respond(produceResponse(tp0, offset, Errors.NONE, 0)); sender.run(time.milliseconds()); assertEquals("All requests completed.", 0, client.inFlightRequestCount()); assertEquals(0, sender.inFlightBatches(tp0).size()); assertFalse(client.hasInFlightRequests()); sender.run(time.milliseconds()); assertTrue("Request should be completed", future.isDone()); assertEquals(offset, future.get().offset()); }
@Test public void testBatchCannotCompleteTwice() throws Exception { ProducerBatch batch = new ProducerBatch(new TopicPartition("topic", 1), memoryRecordsBuilder, now); MockCallback callback = new MockCallback(); FutureRecordMetadata future = batch.tryAppend(now, null, new byte[10], Record.EMPTY_HEADERS, callback, now); batch.done(500L, 10L, null); assertEquals(1, callback.invocations); assertNull(callback.exception); assertNotNull(callback.metadata); try { batch.done(1000L, 20L, null); fail("Expected exception from done"); } catch (IllegalStateException e) { // expected } RecordMetadata recordMetadata = future.get(); assertEquals(500L, recordMetadata.offset()); assertEquals(10L, recordMetadata.timestamp()); }
assertEquals(1, transactionManager.lastAckedSequence(tp0)); assertTrue(request1.isDone()); assertEquals(0, request1.get().offset()); assertFalse(request2.isDone()); assertTrue(client.isReady(node, time.milliseconds()));
assertEquals(1000L, request1.get().offset()); assertEquals(0L, transactionManager.lastAckedSequence(tp0)); assertEquals(1000L, transactionManager.lastAckedOffset(tp0));
assertEquals(10, successfulResponse.get().offset());
assertEquals(1000L, request1.get().offset()); assertEquals(0L, transactionManager.lastAckedSequence(tp0)); assertEquals(1000L, transactionManager.lastAckedOffset(tp0)); assertFalse(client.hasInFlightRequests()); assertTrue(request2.isDone()); assertEquals(1012L, request2.get().offset()); assertEquals(1012L, transactionManager.lastAckedOffset(tp0));
@Test @SuppressWarnings("deprecation") public void testConstructionWithRelativeOffset() { TopicPartition tp = new TopicPartition("foo", 0); long timestamp = 2340234L; int keySize = 3; int valueSize = 5; long baseOffset = 15L; long relativeOffset = 3L; Long checksum = 908923L; RecordMetadata metadata = new RecordMetadata(tp, baseOffset, relativeOffset, timestamp, checksum, keySize, valueSize); assertEquals(tp.topic(), metadata.topic()); assertEquals(tp.partition(), metadata.partition()); assertEquals(timestamp, metadata.timestamp()); assertEquals(baseOffset + relativeOffset, metadata.offset()); assertEquals(checksum.longValue(), metadata.checksum()); assertEquals(keySize, metadata.serializedKeySize()); assertEquals(valueSize, metadata.serializedValueSize()); }
assertEquals(1000L, request1.get().offset()); assertEquals(0L, transactionManager.lastAckedSequence(tp0)); assertEquals(1000L, transactionManager.lastAckedOffset(tp0)); assertFalse(client.hasInFlightRequests()); assertTrue(request2.isDone()); assertEquals(1011L, request2.get().offset()); assertEquals(1011L, transactionManager.lastAckedOffset(tp0));
@Test @SuppressWarnings("deprecation") public void testConstructionWithMissingRelativeOffset() { TopicPartition tp = new TopicPartition("foo", 0); long timestamp = 2340234L; int keySize = 3; int valueSize = 5; Long checksum = 908923L; RecordMetadata metadata = new RecordMetadata(tp, -1L, -1L, timestamp, checksum, keySize, valueSize); assertEquals(tp.topic(), metadata.topic()); assertEquals(tp.partition(), metadata.partition()); assertEquals(timestamp, metadata.timestamp()); assertFalse(metadata.hasOffset()); assertEquals(-1L, metadata.offset()); assertEquals(checksum.longValue(), metadata.checksum()); assertEquals(keySize, metadata.serializedKeySize()); assertEquals(valueSize, metadata.serializedValueSize()); }
assertEquals(-1L, unknownMetadata.offset());
/** * Test that waiting on a request that never completes times out */ @Test public void testTimeout() throws Exception { ProduceRequestResult request = new ProduceRequestResult(topicPartition); FutureRecordMetadata future = new FutureRecordMetadata(request, relOffset, RecordBatch.NO_TIMESTAMP, 0L, 0, 0, Time.SYSTEM); assertFalse("Request is not completed", future.isDone()); try { future.get(5, TimeUnit.MILLISECONDS); fail("Should have thrown exception."); } catch (TimeoutException e) { /* this is good */ } request.set(baseOffset, RecordBatch.NO_TIMESTAMP, null); request.done(); assertTrue(future.isDone()); assertEquals(baseOffset + relOffset, future.get().offset()); }
assertEquals(0, request2.get().offset());