Search in sources :

Example 1 with State

use of org.apache.kafka.streams.processor.internals.Task.State in project kafka by apache.

the class TaskManagerTest method shouldReviveCorruptTasks.

@Test
public void shouldReviveCorruptTasks() {
    final ProcessorStateManager stateManager = EasyMock.createStrictMock(ProcessorStateManager.class);
    stateManager.markChangelogAsCorrupted(taskId00Partitions);
    EasyMock.expectLastCall().once();
    replay(stateManager);
    final AtomicBoolean enforcedCheckpoint = new AtomicBoolean(false);
    final StateMachineTask task00 = new StateMachineTask(taskId00, taskId00Partitions, true, stateManager) {

        @Override
        public void postCommit(final boolean enforceCheckpoint) {
            if (enforceCheckpoint) {
                enforcedCheckpoint.set(true);
            }
            super.postCommit(enforceCheckpoint);
        }
    };
    // `handleAssignment`
    expectRestoreToBeCompleted(consumer, changeLogReader);
    expect(activeTaskCreator.createTasks(anyObject(), eq(taskId00Assignment))).andStubReturn(singletonList(task00));
    topologyBuilder.addSubscribedTopicsFromAssignment(anyObject(), anyString());
    expectLastCall().anyTimes();
    expect(consumer.assignment()).andReturn(taskId00Partitions);
    replay(activeTaskCreator, topologyBuilder, consumer, changeLogReader);
    taskManager.handleAssignment(taskId00Assignment, emptyMap());
    assertThat(taskManager.tryToCompleteRestoration(time.milliseconds(), tp -> assertThat(tp, is(empty()))), is(true));
    assertThat(task00.state(), is(Task.State.RUNNING));
    task00.setChangelogOffsets(singletonMap(t1p0, 0L));
    taskManager.handleCorruption(singleton(taskId00));
    assertThat(task00.commitPrepared, is(true));
    assertThat(task00.state(), is(Task.State.CREATED));
    assertThat(task00.partitionsForOffsetReset, equalTo(taskId00Partitions));
    assertThat(enforcedCheckpoint.get(), is(true));
    assertThat(taskManager.activeTaskMap(), is(singletonMap(taskId00, task00)));
    assertThat(taskManager.standbyTaskMap(), Matchers.anEmptyMap());
    verify(stateManager);
    verify(consumer);
}
Also used : MockTime(org.apache.kafka.common.utils.MockTime) Arrays(java.util.Arrays) CoreMatchers.hasItem(org.hamcrest.CoreMatchers.hasItem) ConsumerGroupMetadata(org.apache.kafka.clients.consumer.ConsumerGroupMetadata) Mock(org.easymock.Mock) IsEqual.equalTo(org.hamcrest.core.IsEqual.equalTo) KafkaException(org.apache.kafka.common.KafkaException) StreamsException(org.apache.kafka.streams.errors.StreamsException) Collections.singletonList(java.util.Collections.singletonList) Utils.mkMap(org.apache.kafka.common.utils.Utils.mkMap) DeleteRecordsResult(org.apache.kafka.clients.admin.DeleteRecordsResult) Collections.singleton(java.util.Collections.singleton) EasyMock.reset(org.easymock.EasyMock.reset) Arrays.asList(java.util.Arrays.asList) Map(java.util.Map) Metric(org.apache.kafka.common.Metric) MetricName(org.apache.kafka.common.MetricName) StreamsMetricsImpl(org.apache.kafka.streams.processor.internals.metrics.StreamsMetricsImpl) Assert.fail(org.junit.Assert.fail) EasyMock.eq(org.easymock.EasyMock.eq) Consumer(org.apache.kafka.clients.consumer.Consumer) TopicPartition(org.apache.kafka.common.TopicPartition) StreamsConfigUtils(org.apache.kafka.streams.internals.StreamsConfigUtils) Time(org.apache.kafka.common.utils.Time) Collections.emptyList(java.util.Collections.emptyList) State(org.apache.kafka.streams.processor.internals.Task.State) Collection(java.util.Collection) Utils.mkSet(org.apache.kafka.common.utils.Utils.mkSet) Set(java.util.Set) Measurable(org.apache.kafka.common.metrics.Measurable) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) Matchers.instanceOf(org.hamcrest.Matchers.instanceOf) List(java.util.List) Metrics(org.apache.kafka.common.metrics.Metrics) Utils.mkEntry(org.apache.kafka.common.utils.Utils.mkEntry) ConsumerRecord(org.apache.kafka.clients.consumer.ConsumerRecord) Assert.assertFalse(org.junit.Assert.assertFalse) OffsetAndMetadata(org.apache.kafka.clients.consumer.OffsetAndMetadata) Optional(java.util.Optional) KafkaMetric(org.apache.kafka.common.metrics.KafkaMetric) LockException(org.apache.kafka.streams.errors.LockException) Matchers.is(org.hamcrest.Matchers.is) MockType(org.easymock.MockType) StreamsConfig(org.apache.kafka.streams.StreamsConfig) TaskId(org.apache.kafka.streams.processor.TaskId) Assert.assertThrows(org.junit.Assert.assertThrows) RunWith(org.junit.runner.RunWith) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) EasyMock.mock(org.easymock.EasyMock.mock) HashMap(java.util.HashMap) Deque(java.util.Deque) AtomicReference(java.util.concurrent.atomic.AtomicReference) RecordsToDelete(org.apache.kafka.clients.admin.RecordsToDelete) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) TaskMigratedException(org.apache.kafka.streams.errors.TaskMigratedException) EasyMock.resetToStrict(org.easymock.EasyMock.resetToStrict) TaskDirectory(org.apache.kafka.streams.processor.internals.StateDirectory.TaskDirectory) Admin(org.apache.kafka.clients.admin.Admin) EasyMockRunner(org.easymock.EasyMockRunner) Collections.singletonMap(java.util.Collections.singletonMap) EasyMock.replay(org.easymock.EasyMock.replay) KafkaFutureImpl(org.apache.kafka.common.internals.KafkaFutureImpl) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) LinkedList(java.util.LinkedList) TaskCorruptedException(org.apache.kafka.streams.errors.TaskCorruptedException) Before(org.junit.Before) EasyMock.anyObject(org.easymock.EasyMock.anyObject) Collections.emptyMap(java.util.Collections.emptyMap) TimeoutException(org.apache.kafka.common.errors.TimeoutException) Matchers.empty(org.hamcrest.Matchers.empty) Collections.emptySet(java.util.Collections.emptySet) EasyMock.anyString(org.easymock.EasyMock.anyString) Matchers(org.hamcrest.Matchers) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) ProcessingMode(org.apache.kafka.streams.internals.StreamsConfigUtils.ProcessingMode) EasyMock(org.easymock.EasyMock) EasyMock.expect(org.easymock.EasyMock.expect) File(java.io.File) Utils.union(org.apache.kafka.common.utils.Utils.union) EasyMock.expectLastCall(org.easymock.EasyMock.expectLastCall) Rule(org.junit.Rule) Assert.assertNull(org.junit.Assert.assertNull) StateStore(org.apache.kafka.streams.processor.StateStore) LogCaptureAppender(org.apache.kafka.streams.processor.internals.testutil.LogCaptureAppender) CommitFailedException(org.apache.kafka.clients.consumer.CommitFailedException) OffsetCheckpoint(org.apache.kafka.streams.state.internals.OffsetCheckpoint) EasyMock.verify(org.easymock.EasyMock.verify) DummyStreamsConfig(org.apache.kafka.streams.processor.internals.testutil.DummyStreamsConfig) Collections(java.util.Collections) DeletedRecords(org.apache.kafka.clients.admin.DeletedRecords) TemporaryFolder(org.junit.rules.TemporaryFolder) Assert.assertEquals(org.junit.Assert.assertEquals) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Test(org.junit.Test)

Example 2 with State

use of org.apache.kafka.streams.processor.internals.Task.State in project kafka by apache.

the class TaskManagerTest method handleAssignment.

private Map<TaskId, StateMachineTask> handleAssignment(final Map<TaskId, Set<TopicPartition>> runningActiveAssignment, final Map<TaskId, Set<TopicPartition>> standbyAssignment, final Map<TaskId, Set<TopicPartition>> restoringActiveAssignment) {
    final Set<Task> runningTasks = runningActiveAssignment.entrySet().stream().map(t -> new StateMachineTask(t.getKey(), t.getValue(), true)).collect(Collectors.toSet());
    final Set<Task> standbyTasks = standbyAssignment.entrySet().stream().map(t -> new StateMachineTask(t.getKey(), t.getValue(), false)).collect(Collectors.toSet());
    final Set<Task> restoringTasks = restoringActiveAssignment.entrySet().stream().map(t -> new StateMachineTask(t.getKey(), t.getValue(), true)).collect(Collectors.toSet());
    // give the restoring tasks some uncompleted changelog partitions so they'll stay in restoring
    restoringTasks.forEach(t -> ((StateMachineTask) t).setChangelogOffsets(singletonMap(new TopicPartition("changelog", 0), 0L)));
    // Initially assign only the active tasks we want to complete restoration
    final Map<TaskId, Set<TopicPartition>> allActiveTasksAssignment = new HashMap<>(runningActiveAssignment);
    allActiveTasksAssignment.putAll(restoringActiveAssignment);
    final Set<Task> allActiveTasks = new HashSet<>(runningTasks);
    allActiveTasks.addAll(restoringTasks);
    expect(standbyTaskCreator.createTasks(eq(standbyAssignment))).andStubReturn(standbyTasks);
    expect(activeTaskCreator.createTasks(anyObject(), eq(allActiveTasksAssignment))).andStubReturn(allActiveTasks);
    expectRestoreToBeCompleted(consumer, changeLogReader);
    replay(activeTaskCreator, standbyTaskCreator, consumer, changeLogReader);
    taskManager.handleAssignment(allActiveTasksAssignment, standbyAssignment);
    taskManager.tryToCompleteRestoration(time.milliseconds(), null);
    final Map<TaskId, StateMachineTask> allTasks = new HashMap<>();
    // Just make sure all tasks ended up in the expected state
    for (final Task task : runningTasks) {
        assertThat(task.state(), is(Task.State.RUNNING));
        allTasks.put(task.id(), (StateMachineTask) task);
    }
    for (final Task task : restoringTasks) {
        assertThat(task.state(), is(Task.State.RESTORING));
        allTasks.put(task.id(), (StateMachineTask) task);
    }
    for (final Task task : standbyTasks) {
        assertThat(task.state(), is(Task.State.RUNNING));
        allTasks.put(task.id(), (StateMachineTask) task);
    }
    return allTasks;
}
Also used : MockTime(org.apache.kafka.common.utils.MockTime) Arrays(java.util.Arrays) CoreMatchers.hasItem(org.hamcrest.CoreMatchers.hasItem) ConsumerGroupMetadata(org.apache.kafka.clients.consumer.ConsumerGroupMetadata) Mock(org.easymock.Mock) IsEqual.equalTo(org.hamcrest.core.IsEqual.equalTo) KafkaException(org.apache.kafka.common.KafkaException) StreamsException(org.apache.kafka.streams.errors.StreamsException) Collections.singletonList(java.util.Collections.singletonList) Utils.mkMap(org.apache.kafka.common.utils.Utils.mkMap) DeleteRecordsResult(org.apache.kafka.clients.admin.DeleteRecordsResult) Collections.singleton(java.util.Collections.singleton) EasyMock.reset(org.easymock.EasyMock.reset) Arrays.asList(java.util.Arrays.asList) Map(java.util.Map) Metric(org.apache.kafka.common.Metric) MetricName(org.apache.kafka.common.MetricName) StreamsMetricsImpl(org.apache.kafka.streams.processor.internals.metrics.StreamsMetricsImpl) Assert.fail(org.junit.Assert.fail) EasyMock.eq(org.easymock.EasyMock.eq) Consumer(org.apache.kafka.clients.consumer.Consumer) TopicPartition(org.apache.kafka.common.TopicPartition) StreamsConfigUtils(org.apache.kafka.streams.internals.StreamsConfigUtils) Time(org.apache.kafka.common.utils.Time) Collections.emptyList(java.util.Collections.emptyList) State(org.apache.kafka.streams.processor.internals.Task.State) Collection(java.util.Collection) Utils.mkSet(org.apache.kafka.common.utils.Utils.mkSet) Set(java.util.Set) Measurable(org.apache.kafka.common.metrics.Measurable) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) Matchers.instanceOf(org.hamcrest.Matchers.instanceOf) List(java.util.List) Metrics(org.apache.kafka.common.metrics.Metrics) Utils.mkEntry(org.apache.kafka.common.utils.Utils.mkEntry) ConsumerRecord(org.apache.kafka.clients.consumer.ConsumerRecord) Assert.assertFalse(org.junit.Assert.assertFalse) OffsetAndMetadata(org.apache.kafka.clients.consumer.OffsetAndMetadata) Optional(java.util.Optional) KafkaMetric(org.apache.kafka.common.metrics.KafkaMetric) LockException(org.apache.kafka.streams.errors.LockException) Matchers.is(org.hamcrest.Matchers.is) MockType(org.easymock.MockType) StreamsConfig(org.apache.kafka.streams.StreamsConfig) TaskId(org.apache.kafka.streams.processor.TaskId) Assert.assertThrows(org.junit.Assert.assertThrows) RunWith(org.junit.runner.RunWith) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) EasyMock.mock(org.easymock.EasyMock.mock) HashMap(java.util.HashMap) Deque(java.util.Deque) AtomicReference(java.util.concurrent.atomic.AtomicReference) RecordsToDelete(org.apache.kafka.clients.admin.RecordsToDelete) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) TaskMigratedException(org.apache.kafka.streams.errors.TaskMigratedException) EasyMock.resetToStrict(org.easymock.EasyMock.resetToStrict) TaskDirectory(org.apache.kafka.streams.processor.internals.StateDirectory.TaskDirectory) Admin(org.apache.kafka.clients.admin.Admin) EasyMockRunner(org.easymock.EasyMockRunner) Collections.singletonMap(java.util.Collections.singletonMap) EasyMock.replay(org.easymock.EasyMock.replay) KafkaFutureImpl(org.apache.kafka.common.internals.KafkaFutureImpl) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) LinkedList(java.util.LinkedList) TaskCorruptedException(org.apache.kafka.streams.errors.TaskCorruptedException) Before(org.junit.Before) EasyMock.anyObject(org.easymock.EasyMock.anyObject) Collections.emptyMap(java.util.Collections.emptyMap) TimeoutException(org.apache.kafka.common.errors.TimeoutException) Matchers.empty(org.hamcrest.Matchers.empty) Collections.emptySet(java.util.Collections.emptySet) EasyMock.anyString(org.easymock.EasyMock.anyString) Matchers(org.hamcrest.Matchers) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) ProcessingMode(org.apache.kafka.streams.internals.StreamsConfigUtils.ProcessingMode) EasyMock(org.easymock.EasyMock) EasyMock.expect(org.easymock.EasyMock.expect) File(java.io.File) Utils.union(org.apache.kafka.common.utils.Utils.union) EasyMock.expectLastCall(org.easymock.EasyMock.expectLastCall) Rule(org.junit.Rule) Assert.assertNull(org.junit.Assert.assertNull) StateStore(org.apache.kafka.streams.processor.StateStore) LogCaptureAppender(org.apache.kafka.streams.processor.internals.testutil.LogCaptureAppender) CommitFailedException(org.apache.kafka.clients.consumer.CommitFailedException) OffsetCheckpoint(org.apache.kafka.streams.state.internals.OffsetCheckpoint) EasyMock.verify(org.easymock.EasyMock.verify) DummyStreamsConfig(org.apache.kafka.streams.processor.internals.testutil.DummyStreamsConfig) Collections(java.util.Collections) DeletedRecords(org.apache.kafka.clients.admin.DeletedRecords) TemporaryFolder(org.junit.rules.TemporaryFolder) Assert.assertEquals(org.junit.Assert.assertEquals) TaskId(org.apache.kafka.streams.processor.TaskId) Utils.mkSet(org.apache.kafka.common.utils.Utils.mkSet) Set(java.util.Set) HashSet(java.util.HashSet) Collections.emptySet(java.util.Collections.emptySet) HashMap(java.util.HashMap) TopicPartition(org.apache.kafka.common.TopicPartition) HashSet(java.util.HashSet)

Aggregations

File (java.io.File)2 ArrayList (java.util.ArrayList)2 Arrays (java.util.Arrays)2 Arrays.asList (java.util.Arrays.asList)2 Collection (java.util.Collection)2 Collections (java.util.Collections)2 Collections.emptyList (java.util.Collections.emptyList)2 Collections.emptyMap (java.util.Collections.emptyMap)2 Collections.emptySet (java.util.Collections.emptySet)2 Collections.singleton (java.util.Collections.singleton)2 Collections.singletonList (java.util.Collections.singletonList)2 Collections.singletonMap (java.util.Collections.singletonMap)2 Deque (java.util.Deque)2 HashMap (java.util.HashMap)2 HashSet (java.util.HashSet)2 LinkedList (java.util.LinkedList)2 List (java.util.List)2 Map (java.util.Map)2 Optional (java.util.Optional)2 Set (java.util.Set)2