use of org.apache.kafka.connect.util.clusters.EmbeddedConnectClusterAssertions.CONNECTOR_SETUP_DURATION_MS in project kafka by apache.
the class ConnectorRestartApiIntegrationTest method runningConnectorAndTasksRestart.
private void runningConnectorAndTasksRestart(boolean onlyFailed, boolean includeTasks, int expectedConnectorRestarts, Map<String, Integer> expectedTasksRestarts, boolean noopRequest, int numWorkers) throws Exception {
startOrReuseConnectWithNumWorkers(numWorkers);
// setup up props for the source connector
Map<String, String> props = defaultSourceConnectorProps(TOPIC_NAME);
// Try to start the connector and its single task.
connect.configureConnector(connectorName, props);
connect.assertions().assertConnectorAndAtLeastNumTasksAreRunning(connectorName, NUM_TASKS, "Connector tasks are not all in running state.");
StartsAndStops beforeSnapshot = connectorHandle.startAndStopCounter().countsSnapshot();
Map<String, StartsAndStops> beforeTasksSnapshot = connectorHandle.tasks().stream().collect(Collectors.toMap(TaskHandle::taskId, task -> task.startAndStopCounter().countsSnapshot()));
StartAndStopLatch stopLatch = connectorHandle.expectedStops(expectedConnectorRestarts, expectedTasksRestarts, includeTasks);
StartAndStopLatch startLatch = connectorHandle.expectedStarts(expectedConnectorRestarts, expectedTasksRestarts, includeTasks);
ConnectorStateInfo connectorStateInfo;
// Call the Restart API
if (numWorkers == 1) {
connectorStateInfo = connect.restartConnectorAndTasks(connectorName, onlyFailed, includeTasks, false);
} else {
connectorStateInfo = connect.restartConnectorAndTasks(connectorName, onlyFailed, includeTasks, true);
}
if (noopRequest) {
assertNoRestartingState(connectorStateInfo);
}
// Wait for the connector to be stopped
assertTrue("Failed to stop connector and tasks within " + CONNECTOR_SETUP_DURATION_MS + "ms", stopLatch.await(CONNECTOR_SETUP_DURATION_MS, TimeUnit.MILLISECONDS));
connect.assertions().assertConnectorAndAtLeastNumTasksAreRunning(connectorName, NUM_TASKS, "Connector tasks are not all in running state.");
// Expect that the connector has started again
assertTrue("Failed to start connector and tasks within " + CONNECTOR_SETUP_DURATION_MS + "ms", startLatch.await(CONNECTOR_SETUP_DURATION_MS, TimeUnit.MILLISECONDS));
StartsAndStops afterSnapshot = connectorHandle.startAndStopCounter().countsSnapshot();
assertEquals(beforeSnapshot.starts() + expectedConnectorRestarts, afterSnapshot.starts());
assertEquals(beforeSnapshot.stops() + expectedConnectorRestarts, afterSnapshot.stops());
connectorHandle.tasks().forEach(t -> {
StartsAndStops afterTaskSnapshot = t.startAndStopCounter().countsSnapshot();
if (numWorkers == 1) {
assertEquals(beforeTasksSnapshot.get(t.taskId()).starts() + expectedTasksRestarts.get(t.taskId()), afterTaskSnapshot.starts());
assertEquals(beforeTasksSnapshot.get(t.taskId()).stops() + expectedTasksRestarts.get(t.taskId()), afterTaskSnapshot.stops());
} else {
// validate tasks stop/start counts only in single worker test because the multi worker rebalance triggers stop/start on task and this make the exact counts unpredictable
assertTrue(afterTaskSnapshot.starts() >= beforeTasksSnapshot.get(t.taskId()).starts() + expectedTasksRestarts.get(t.taskId()));
assertTrue(afterTaskSnapshot.stops() >= beforeTasksSnapshot.get(t.taskId()).stops() + expectedTasksRestarts.get(t.taskId()));
}
});
}
use of org.apache.kafka.connect.util.clusters.EmbeddedConnectClusterAssertions.CONNECTOR_SETUP_DURATION_MS in project kafka by apache.
the class ConnectorRestartApiIntegrationTest method failedTasksRestart.
private void failedTasksRestart(boolean onlyFailed, boolean includeTasks, int expectedConnectorRestarts, Map<String, Integer> expectedTasksRestarts, Set<String> tasksToFail, boolean noopRequest) throws Exception {
// setup up props for the source connector
Map<String, String> props = defaultSourceConnectorProps(TOPIC_NAME);
tasksToFail.forEach(taskId -> props.put("task-" + taskId + ".start.inject.error", "true"));
// build a Connect cluster backed by Kafka and Zk
startOrReuseConnectWithNumWorkers(ONE_WORKER);
// Try to start the connector and its single task.
connect.configureConnector(connectorName, props);
connect.assertions().assertConnectorIsRunningAndNumTasksHaveFailed(connectorName, NUM_TASKS, tasksToFail.size(), "Connector tasks are in running state.");
StartsAndStops beforeSnapshot = connectorHandle.startAndStopCounter().countsSnapshot();
Map<String, StartsAndStops> beforeTasksSnapshot = connectorHandle.tasks().stream().collect(Collectors.toMap(TaskHandle::taskId, task -> task.startAndStopCounter().countsSnapshot()));
StartAndStopLatch stopLatch = connectorHandle.expectedStops(expectedConnectorRestarts, expectedTasksRestarts, includeTasks);
StartAndStopLatch startLatch = connectorHandle.expectedStarts(expectedConnectorRestarts, expectedTasksRestarts, includeTasks);
// Call the Restart API
ConnectorStateInfo connectorStateInfo = connect.restartConnectorAndTasks(connectorName, onlyFailed, includeTasks, false);
if (noopRequest) {
assertNoRestartingState(connectorStateInfo);
}
// Wait for the connector to be stopped
assertTrue("Failed to stop connector and tasks within " + CONNECTOR_SETUP_DURATION_MS + "ms", stopLatch.await(CONNECTOR_SETUP_DURATION_MS, TimeUnit.MILLISECONDS));
connect.assertions().assertConnectorIsRunningAndNumTasksHaveFailed(connectorName, NUM_TASKS, tasksToFail.size(), "Connector tasks are not all in running state.");
// Expect that the connector has started again
assertTrue("Failed to start connector and tasks within " + CONNECTOR_SETUP_DURATION_MS + "ms", startLatch.await(CONNECTOR_SETUP_DURATION_MS, TimeUnit.MILLISECONDS));
StartsAndStops afterSnapshot = connectorHandle.startAndStopCounter().countsSnapshot();
assertEquals(beforeSnapshot.starts() + expectedConnectorRestarts, afterSnapshot.starts());
assertEquals(beforeSnapshot.stops() + expectedConnectorRestarts, afterSnapshot.stops());
connectorHandle.tasks().forEach(t -> {
StartsAndStops afterTaskSnapshot = t.startAndStopCounter().countsSnapshot();
assertEquals(beforeTasksSnapshot.get(t.taskId()).starts() + expectedTasksRestarts.get(t.taskId()), afterTaskSnapshot.starts());
assertEquals(beforeTasksSnapshot.get(t.taskId()).stops() + expectedTasksRestarts.get(t.taskId()), afterTaskSnapshot.stops());
});
}
Aggregations