Search in sources :

Example 6 with Time

use of org.apache.kafka.common.utils.Time in project apache-kafka-on-k8s by banzaicloud.

the class KafkaProducerTest method testOnlyCanExecuteCloseAfterInitTransactionsTimeout.

@Test(expected = KafkaException.class)
public void testOnlyCanExecuteCloseAfterInitTransactionsTimeout() {
    Properties props = new Properties();
    props.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, "bad-transaction");
    props.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, 5);
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9000");
    Time time = new MockTime();
    Cluster cluster = TestUtils.singletonCluster("topic", 1);
    Node node = cluster.nodes().get(0);
    Metadata metadata = new Metadata(0, Long.MAX_VALUE, true);
    metadata.update(cluster, Collections.<String>emptySet(), time.milliseconds());
    MockClient client = new MockClient(time, metadata);
    client.setNode(node);
    Producer<String, String> producer = new KafkaProducer<>(new ProducerConfig(ProducerConfig.addSerializerToConfig(props, new StringSerializer(), new StringSerializer())), new StringSerializer(), new StringSerializer(), metadata, client);
    try {
        producer.initTransactions();
    } catch (TimeoutException e) {
    // expected
    }
    // other transactional operations should not be allowed if we catch the error after initTransactions failed
    try {
        producer.beginTransaction();
    } finally {
        producer.close(0, TimeUnit.MILLISECONDS);
    }
}
Also used : Node(org.apache.kafka.common.Node) Metadata(org.apache.kafka.clients.Metadata) Cluster(org.apache.kafka.common.Cluster) MockTime(org.apache.kafka.common.utils.MockTime) Time(org.apache.kafka.common.utils.Time) Properties(java.util.Properties) StringSerializer(org.apache.kafka.common.serialization.StringSerializer) MockTime(org.apache.kafka.common.utils.MockTime) MockClient(org.apache.kafka.clients.MockClient) TimeoutException(org.apache.kafka.common.errors.TimeoutException) PrepareOnlyThisForTest(org.powermock.core.classloader.annotations.PrepareOnlyThisForTest) Test(org.junit.Test)

Example 7 with Time

use of org.apache.kafka.common.utils.Time in project apache-kafka-on-k8s by banzaicloud.

the class KafkaProducerTest method testTopicRefreshInMetadata.

@Test
public void testTopicRefreshInMetadata() throws Exception {
    Properties props = new Properties();
    props.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9999");
    props.setProperty(ProducerConfig.MAX_BLOCK_MS_CONFIG, "600000");
    KafkaProducer<String, String> producer = new KafkaProducer<>(props, new StringSerializer(), new StringSerializer());
    long refreshBackoffMs = 500L;
    long metadataExpireMs = 60000L;
    final Metadata metadata = new Metadata(refreshBackoffMs, metadataExpireMs, true, true, new ClusterResourceListeners());
    final Time time = new MockTime();
    MemberModifier.field(KafkaProducer.class, "metadata").set(producer, metadata);
    MemberModifier.field(KafkaProducer.class, "time").set(producer, time);
    final String topic = "topic";
    Thread t = new Thread() {

        @Override
        public void run() {
            long startTimeMs = System.currentTimeMillis();
            for (int i = 0; i < 10; i++) {
                while (!metadata.updateRequested() && System.currentTimeMillis() - startTimeMs < 1000) yield();
                metadata.update(Cluster.empty(), Collections.singleton(topic), time.milliseconds());
                time.sleep(60 * 1000L);
            }
        }
    };
    t.start();
    try {
        producer.partitionsFor(topic);
        fail("Expect TimeoutException");
    } catch (TimeoutException e) {
    // skip
    }
    Assert.assertTrue("Topic should still exist in metadata", metadata.containsTopic(topic));
}
Also used : ClusterResourceListeners(org.apache.kafka.common.internals.ClusterResourceListeners) Metadata(org.apache.kafka.clients.Metadata) MockTime(org.apache.kafka.common.utils.MockTime) Time(org.apache.kafka.common.utils.Time) Properties(java.util.Properties) StringSerializer(org.apache.kafka.common.serialization.StringSerializer) MockTime(org.apache.kafka.common.utils.MockTime) TimeoutException(org.apache.kafka.common.errors.TimeoutException) PrepareOnlyThisForTest(org.powermock.core.classloader.annotations.PrepareOnlyThisForTest) Test(org.junit.Test)

Example 8 with Time

use of org.apache.kafka.common.utils.Time in project apache-kafka-on-k8s by banzaicloud.

the class SensorTest method testExpiredSensor.

@Test
public void testExpiredSensor() {
    MetricConfig config = new MetricConfig();
    Time mockTime = new MockTime();
    Metrics metrics = new Metrics(config, Arrays.asList((MetricsReporter) new JmxReporter()), mockTime, true);
    long inactiveSensorExpirationTimeSeconds = 60L;
    Sensor sensor = new Sensor(metrics, "sensor", null, config, mockTime, inactiveSensorExpirationTimeSeconds, Sensor.RecordingLevel.INFO);
    assertTrue(sensor.add(metrics.metricName("test1", "grp1"), new Avg()));
    Map<String, String> emptyTags = Collections.emptyMap();
    MetricName rateMetricName = new MetricName("rate", "test", "", emptyTags);
    MetricName totalMetricName = new MetricName("total", "test", "", emptyTags);
    Meter meter = new Meter(rateMetricName, totalMetricName);
    assertTrue(sensor.add(meter));
    mockTime.sleep(TimeUnit.SECONDS.toMillis(inactiveSensorExpirationTimeSeconds + 1));
    assertFalse(sensor.add(metrics.metricName("test3", "grp1"), new Avg()));
    assertFalse(sensor.add(meter));
    metrics.close();
}
Also used : Meter(org.apache.kafka.common.metrics.stats.Meter) MockTime(org.apache.kafka.common.utils.MockTime) Time(org.apache.kafka.common.utils.Time) SystemTime(org.apache.kafka.common.utils.SystemTime) MetricName(org.apache.kafka.common.MetricName) Avg(org.apache.kafka.common.metrics.stats.Avg) MockTime(org.apache.kafka.common.utils.MockTime) Test(org.junit.Test)

Example 9 with Time

use of org.apache.kafka.common.utils.Time in project apache-kafka-on-k8s by banzaicloud.

the class Microbenchmarks method main.

public static void main(String[] args) throws Exception {
    final int iters = Integer.parseInt(args[0]);
    double x = 0.0;
    long start = System.nanoTime();
    for (int i = 0; i < iters; i++) x += Math.sqrt(x);
    System.out.println(x);
    System.out.println("sqrt: " + (System.nanoTime() - start) / (double) iters);
    // test clocks
    systemMillis(iters);
    systemNanos(iters);
    long total = 0;
    start = System.nanoTime();
    total += systemMillis(iters);
    System.out.println("System.currentTimeMillis(): " + (System.nanoTime() - start) / iters);
    start = System.nanoTime();
    total += systemNanos(iters);
    System.out.println("System.nanoTime(): " + (System.nanoTime() - start) / iters);
    System.out.println(total);
    // test random
    int n = 0;
    Random random = new Random();
    start = System.nanoTime();
    for (int i = 0; i < iters; i++) {
        n += random.nextInt();
    }
    System.out.println(n);
    System.out.println("random: " + (System.nanoTime() - start) / iters);
    float[] floats = new float[1024];
    for (int i = 0; i < floats.length; i++) floats[i] = random.nextFloat();
    Arrays.sort(floats);
    int loc = 0;
    start = System.nanoTime();
    for (int i = 0; i < iters; i++) loc += Arrays.binarySearch(floats, floats[i % floats.length]);
    System.out.println(loc);
    System.out.println("binary search: " + (System.nanoTime() - start) / iters);
    final Time time = Time.SYSTEM;
    final AtomicBoolean done = new AtomicBoolean(false);
    final Object lock = new Object();
    Thread t1 = new Thread() {

        public void run() {
            time.sleep(1);
            int counter = 0;
            long start = time.nanoseconds();
            for (int i = 0; i < iters; i++) {
                synchronized (lock) {
                    counter++;
                }
            }
            System.out.println("synchronized: " + ((time.nanoseconds() - start) / iters));
            System.out.println(counter);
            done.set(true);
        }
    };
    Thread t2 = new Thread() {

        public void run() {
            int counter = 0;
            while (!done.get()) {
                time.sleep(1);
                synchronized (lock) {
                    counter += 1;
                }
            }
            System.out.println("Counter: " + counter);
        }
    };
    t1.start();
    t2.start();
    t1.join();
    t2.join();
    System.out.println("Testing locks");
    done.set(false);
    final ReentrantLock lock2 = new ReentrantLock();
    Thread t3 = new Thread() {

        public void run() {
            time.sleep(1);
            int counter = 0;
            long start = time.nanoseconds();
            for (int i = 0; i < iters; i++) {
                lock2.lock();
                counter++;
                lock2.unlock();
            }
            System.out.println("lock: " + ((time.nanoseconds() - start) / iters));
            System.out.println(counter);
            done.set(true);
        }
    };
    Thread t4 = new Thread() {

        public void run() {
            int counter = 0;
            while (!done.get()) {
                time.sleep(1);
                lock2.lock();
                counter++;
                lock2.unlock();
            }
            System.out.println("Counter: " + counter);
        }
    };
    t3.start();
    t4.start();
    t3.join();
    t4.join();
    Map<String, Integer> values = new HashMap<String, Integer>();
    for (int i = 0; i < 100; i++) values.put(Integer.toString(i), i);
    System.out.println("HashMap:");
    benchMap(2, 1000000, values);
    System.out.println("ConcurentHashMap:");
    benchMap(2, 1000000, new ConcurrentHashMap<String, Integer>(values));
    System.out.println("CopyOnWriteMap:");
    benchMap(2, 1000000, new CopyOnWriteMap<String, Integer>(values));
}
Also used : ReentrantLock(java.util.concurrent.locks.ReentrantLock) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) Time(org.apache.kafka.common.utils.Time) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Random(java.util.Random)

Example 10 with Time

use of org.apache.kafka.common.utils.Time in project apache-kafka-on-k8s by banzaicloud.

the class KafkaConsumerTest method verifyNoCoordinatorLookupForManualAssignmentWithSeek.

@Test
public void verifyNoCoordinatorLookupForManualAssignmentWithSeek() {
    Time time = new MockTime();
    Cluster cluster = TestUtils.singletonCluster(topic, 1);
    Node node = cluster.nodes().get(0);
    Metadata metadata = createMetadata();
    metadata.update(cluster, Collections.<String>emptySet(), time.milliseconds());
    MockClient client = new MockClient(time, metadata);
    client.setNode(node);
    PartitionAssignor assignor = new RoundRobinAssignor();
    KafkaConsumer<String, String> consumer = newConsumer(time, client, metadata, assignor, true);
    consumer.assign(singleton(tp0));
    consumer.seekToBeginning(singleton(tp0));
    // there shouldn't be any need to lookup the coordinator or fetch committed offsets.
    // we just lookup the starting position and send the record fetch.
    client.prepareResponse(listOffsetsResponse(Collections.singletonMap(tp0, 50L)));
    client.prepareResponse(fetchResponse(tp0, 50L, 5));
    ConsumerRecords<String, String> records = consumer.poll(5);
    assertEquals(5, records.count());
    assertEquals(55L, consumer.position(tp0));
    consumer.close(0, TimeUnit.MILLISECONDS);
}
Also used : Node(org.apache.kafka.common.Node) Metadata(org.apache.kafka.clients.Metadata) Cluster(org.apache.kafka.common.Cluster) MockTime(org.apache.kafka.common.utils.MockTime) Time(org.apache.kafka.common.utils.Time) PartitionAssignor(org.apache.kafka.clients.consumer.internals.PartitionAssignor) MockTime(org.apache.kafka.common.utils.MockTime) MockClient(org.apache.kafka.clients.MockClient) Test(org.junit.Test)

Aggregations

Time (org.apache.kafka.common.utils.Time)125 MockTime (org.apache.kafka.common.utils.MockTime)107 Test (org.junit.jupiter.api.Test)63 MockClient (org.apache.kafka.clients.MockClient)55 HashMap (java.util.HashMap)53 Cluster (org.apache.kafka.common.Cluster)41 Test (org.junit.Test)40 Node (org.apache.kafka.common.Node)39 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)32 MetadataResponse (org.apache.kafka.common.requests.MetadataResponse)31 StringSerializer (org.apache.kafka.common.serialization.StringSerializer)30 Metadata (org.apache.kafka.clients.Metadata)28 ProducerMetadata (org.apache.kafka.clients.producer.internals.ProducerMetadata)25 TopicPartition (org.apache.kafka.common.TopicPartition)22 PartitionAssignor (org.apache.kafka.clients.consumer.internals.PartitionAssignor)21 LogContext (org.apache.kafka.common.utils.LogContext)17 Map (java.util.Map)14 Properties (java.util.Properties)14 MetricName (org.apache.kafka.common.MetricName)14 ExecutionException (java.util.concurrent.ExecutionException)13