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);
}
}
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));
}
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();
}
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));
}
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);
}
Aggregations