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