Search in sources :

Example 81 with Time

use of org.apache.kafka.common.utils.Time in project kafka by apache.

the class SensorTest method testStrictQuotaEnforcementWithRate.

@Test
public void testStrictQuotaEnforcementWithRate() {
    final Time time = new MockTime(0, System.currentTimeMillis(), 0);
    final Metrics metrics = new Metrics(time);
    final Sensor sensor = metrics.sensor("sensor", new MetricConfig().quota(Quota.upperBound(2)).timeWindow(1, TimeUnit.SECONDS).samples(11));
    final MetricName metricName = metrics.metricName("rate", "test-group");
    assertTrue(sensor.add(metricName, new Rate()));
    final KafkaMetric rateMetric = metrics.metric(metricName);
    // Recording a first value at T+0 to bring the avg rate to 3 which is already
    // above the quota.
    strictRecord(sensor, 30, time.milliseconds());
    assertEquals(3, rateMetric.measurableValue(time.milliseconds()), 0.1);
    // Theoretically, we should wait 5s to bring back the avg rate to the define quota:
    // ((30 / 10) - 2) / 2 * 10 = 5s
    time.sleep(5000);
    // But, recording a second value is rejected because the avg rate is still equal
    // to 3 after 5s.
    assertEquals(3, rateMetric.measurableValue(time.milliseconds()), 0.1);
    assertThrows(QuotaViolationException.class, () -> strictRecord(sensor, 30, time.milliseconds()));
    metrics.close();
}
Also used : MetricName(org.apache.kafka.common.MetricName) Rate(org.apache.kafka.common.metrics.stats.Rate) MockTime(org.apache.kafka.common.utils.MockTime) Time(org.apache.kafka.common.utils.Time) SystemTime(org.apache.kafka.common.utils.SystemTime) MockTime(org.apache.kafka.common.utils.MockTime) Test(org.junit.jupiter.api.Test)

Example 82 with Time

use of org.apache.kafka.common.utils.Time in project kafka by apache.

the class SensorTest method testUpdatingMetricConfigIsReflectedInTheSensor.

@Test
public void testUpdatingMetricConfigIsReflectedInTheSensor() {
    final Time time = new MockTime(0, System.currentTimeMillis(), 0);
    final Metrics metrics = new Metrics(time);
    final Sensor sensor = metrics.sensor("sensor");
    final MeasurableStat stat = Mockito.mock(MeasurableStat.class);
    final MetricName statName = metrics.metricName("stat", "test-group");
    final MetricConfig statConfig = new MetricConfig().quota(Quota.upperBound(5));
    sensor.add(statName, stat, statConfig);
    sensor.record(10, 1);
    Mockito.verify(stat).record(statConfig, 10, 1);
    sensor.checkQuotas(2);
    Mockito.verify(stat).measure(statConfig, 2);
    // Update the config of the KafkaMetric
    final MetricConfig newConfig = new MetricConfig().quota(Quota.upperBound(10));
    metrics.metric(statName).config(newConfig);
    sensor.record(10, 3);
    Mockito.verify(stat).record(newConfig, 10, 3);
    sensor.checkQuotas(4);
    Mockito.verify(stat).measure(newConfig, 4);
    metrics.close();
}
Also used : MetricName(org.apache.kafka.common.MetricName) MockTime(org.apache.kafka.common.utils.MockTime) Time(org.apache.kafka.common.utils.Time) SystemTime(org.apache.kafka.common.utils.SystemTime) MockTime(org.apache.kafka.common.utils.MockTime) Test(org.junit.jupiter.api.Test)

Example 83 with Time

use of org.apache.kafka.common.utils.Time in project kafka by apache.

the class KafkaAdminClientTest method testDescribeConsumerGroupNumRetries.

@Test
public void testDescribeConsumerGroupNumRetries() throws Exception {
    final Cluster cluster = mockCluster(3, 0);
    final Time time = new MockTime();
    try (AdminClientUnitTestEnv env = new AdminClientUnitTestEnv(time, cluster, AdminClientConfig.RETRIES_CONFIG, "0")) {
        env.kafkaClient().setNodeApiVersions(NodeApiVersions.create());
        env.kafkaClient().prepareResponse(prepareFindCoordinatorResponse(Errors.NONE, env.cluster().controller()));
        DescribeGroupsResponseData data = new DescribeGroupsResponseData();
        data.groups().add(DescribeGroupsResponse.groupMetadata(GROUP_ID, Errors.NOT_COORDINATOR, "", "", "", Collections.emptyList(), Collections.emptySet()));
        env.kafkaClient().prepareResponse(new DescribeGroupsResponse(data));
        env.kafkaClient().prepareResponse(prepareFindCoordinatorResponse(Errors.NONE, env.cluster().controller()));
        final DescribeConsumerGroupsResult result = env.adminClient().describeConsumerGroups(singletonList(GROUP_ID));
        TestUtils.assertFutureError(result.all(), TimeoutException.class);
    }
}
Also used : DescribeGroupsResponseData(org.apache.kafka.common.message.DescribeGroupsResponseData) Cluster(org.apache.kafka.common.Cluster) DescribeGroupsResponse(org.apache.kafka.common.requests.DescribeGroupsResponse) Time(org.apache.kafka.common.utils.Time) MockTime(org.apache.kafka.common.utils.MockTime) MockTime(org.apache.kafka.common.utils.MockTime) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Test(org.junit.jupiter.api.Test)

Example 84 with Time

use of org.apache.kafka.common.utils.Time in project kafka by apache.

the class KafkaAdminClientTest method testRemoveMembersFromGroup.

private void testRemoveMembersFromGroup(String reason, String expectedReason) throws Exception {
    final Cluster cluster = mockCluster(3, 0);
    final Time time = new MockTime();
    try (AdminClientUnitTestEnv env = new AdminClientUnitTestEnv(time, cluster)) {
        env.kafkaClient().setNodeApiVersions(NodeApiVersions.create());
        env.kafkaClient().prepareResponse(prepareFindCoordinatorResponse(Errors.NONE, env.cluster().controller()));
        env.kafkaClient().prepareResponse(body -> {
            if (!(body instanceof LeaveGroupRequest)) {
                return false;
            }
            LeaveGroupRequestData leaveGroupRequest = ((LeaveGroupRequest) body).data();
            return leaveGroupRequest.members().stream().allMatch(member -> member.reason().equals(expectedReason));
        }, new LeaveGroupResponse(new LeaveGroupResponseData().setErrorCode(Errors.NONE.code()).setMembers(Arrays.asList(new MemberResponse().setGroupInstanceId("instance-1"), new MemberResponse().setGroupInstanceId("instance-2")))));
        Collection<MemberToRemove> membersToRemove = Arrays.asList(new MemberToRemove("instance-1"), new MemberToRemove("instance-2"));
        RemoveMembersFromConsumerGroupOptions options = new RemoveMembersFromConsumerGroupOptions(membersToRemove);
        options.reason(reason);
        final RemoveMembersFromConsumerGroupResult result = env.adminClient().removeMembersFromConsumerGroup(GROUP_ID, options);
        assertNull(result.all().get());
    }
}
Also used : MemberResponse(org.apache.kafka.common.message.LeaveGroupResponseData.MemberResponse) LeaveGroupRequestData(org.apache.kafka.common.message.LeaveGroupRequestData) LeaveGroupResponse(org.apache.kafka.common.requests.LeaveGroupResponse) Cluster(org.apache.kafka.common.Cluster) Time(org.apache.kafka.common.utils.Time) MockTime(org.apache.kafka.common.utils.MockTime) LeaveGroupResponseData(org.apache.kafka.common.message.LeaveGroupResponseData) LeaveGroupRequest(org.apache.kafka.common.requests.LeaveGroupRequest) MockTime(org.apache.kafka.common.utils.MockTime)

Example 85 with Time

use of org.apache.kafka.common.utils.Time in project kafka by apache.

the class KafkaAdminClientTest method testRemoveMembersFromGroupNumRetries.

@Test
public void testRemoveMembersFromGroupNumRetries() throws Exception {
    final Cluster cluster = mockCluster(3, 0);
    final Time time = new MockTime();
    try (AdminClientUnitTestEnv env = new AdminClientUnitTestEnv(time, cluster, AdminClientConfig.RETRIES_CONFIG, "0")) {
        env.kafkaClient().setNodeApiVersions(NodeApiVersions.create());
        env.kafkaClient().prepareResponse(prepareFindCoordinatorResponse(Errors.NONE, env.cluster().controller()));
        env.kafkaClient().prepareResponse(new LeaveGroupResponse(new LeaveGroupResponseData().setErrorCode(Errors.NOT_COORDINATOR.code())));
        env.kafkaClient().prepareResponse(prepareFindCoordinatorResponse(Errors.NONE, env.cluster().controller()));
        Collection<MemberToRemove> membersToRemove = Arrays.asList(new MemberToRemove("instance-1"), new MemberToRemove("instance-2"));
        final RemoveMembersFromConsumerGroupResult result = env.adminClient().removeMembersFromConsumerGroup(GROUP_ID, new RemoveMembersFromConsumerGroupOptions(membersToRemove));
        TestUtils.assertFutureError(result.all(), TimeoutException.class);
    }
}
Also used : LeaveGroupResponse(org.apache.kafka.common.requests.LeaveGroupResponse) LeaveGroupResponseData(org.apache.kafka.common.message.LeaveGroupResponseData) Cluster(org.apache.kafka.common.Cluster) Time(org.apache.kafka.common.utils.Time) MockTime(org.apache.kafka.common.utils.MockTime) MockTime(org.apache.kafka.common.utils.MockTime) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Test(org.junit.jupiter.api.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