Search in sources :

Example 1 with ProduceRequestResult

use of org.apache.kafka.clients.producer.internals.ProduceRequestResult in project kafka by apache.

the class MockProducer method send.

/**
     * Adds the record to the list of sent records.
     *
     * @see #history()
     */
@Override
public synchronized Future<RecordMetadata> send(ProducerRecord<K, V> record, Callback callback) {
    int partition = 0;
    if (!this.cluster.partitionsForTopic(record.topic()).isEmpty())
        partition = partition(record, this.cluster);
    TopicPartition topicPartition = new TopicPartition(record.topic(), partition);
    ProduceRequestResult result = new ProduceRequestResult(topicPartition);
    FutureRecordMetadata future = new FutureRecordMetadata(result, 0, Record.NO_TIMESTAMP, 0, 0, 0);
    long offset = nextOffset(topicPartition);
    Completion completion = new Completion(offset, new RecordMetadata(topicPartition, 0, offset, Record.NO_TIMESTAMP, 0, 0, 0), result, callback);
    this.sent.add(record);
    if (autoComplete)
        completion.complete(null);
    else
        this.completions.addLast(completion);
    return future;
}
Also used : FutureRecordMetadata(org.apache.kafka.clients.producer.internals.FutureRecordMetadata) FutureRecordMetadata(org.apache.kafka.clients.producer.internals.FutureRecordMetadata) TopicPartition(org.apache.kafka.common.TopicPartition) ProduceRequestResult(org.apache.kafka.clients.producer.internals.ProduceRequestResult)

Example 2 with ProduceRequestResult

use of org.apache.kafka.clients.producer.internals.ProduceRequestResult in project kafka by apache.

the class RecordSendTest method testTimeout.

/**
     * 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, Record.NO_TIMESTAMP, 0, 0, 0);
    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, Record.NO_TIMESTAMP, null);
    request.done();
    assertTrue(future.isDone());
    assertEquals(baseOffset + relOffset, future.get().offset());
}
Also used : FutureRecordMetadata(org.apache.kafka.clients.producer.internals.FutureRecordMetadata) ProduceRequestResult(org.apache.kafka.clients.producer.internals.ProduceRequestResult) TimeoutException(java.util.concurrent.TimeoutException) Test(org.junit.Test)

Example 3 with ProduceRequestResult

use of org.apache.kafka.clients.producer.internals.ProduceRequestResult in project kafka by apache.

the class RecordSendTest method asyncRequest.

/* create a new request result that will be completed after the given timeout */
public ProduceRequestResult asyncRequest(final long baseOffset, final RuntimeException error, final long timeout) {
    final ProduceRequestResult request = new ProduceRequestResult(topicPartition);
    Thread thread = new Thread() {

        public void run() {
            try {
                sleep(timeout);
                request.set(baseOffset, Record.NO_TIMESTAMP, error);
                request.done();
            } catch (InterruptedException e) {
            }
        }
    };
    thread.start();
    return request;
}
Also used : ProduceRequestResult(org.apache.kafka.clients.producer.internals.ProduceRequestResult)

Aggregations

ProduceRequestResult (org.apache.kafka.clients.producer.internals.ProduceRequestResult)3 FutureRecordMetadata (org.apache.kafka.clients.producer.internals.FutureRecordMetadata)2 TimeoutException (java.util.concurrent.TimeoutException)1 TopicPartition (org.apache.kafka.common.TopicPartition)1 Test (org.junit.Test)1