@Override public TaskCallback createCallback() { state.startProcess(); containerMetrics.processes().inc(); return callbackManager.createCallback(task.taskName(), envelope, coordinator); } };
@Override public TaskCallback createCallback() { state.startProcess(); containerMetrics.processes().inc(); return callbackManager.createCallback(task.taskName(), envelope, coordinator); } };
@Override public TaskCallback createCallback() { state.startProcess(); containerMetrics.processes().inc(); return callbackManager.createCallback(task.taskName(), envelope, coordinator); } };
@Override public TaskCallback createCallback() { state.startProcess(); containerMetrics.processes().inc(); return callbackManager.createCallback(task.taskName(), envelope, coordinator); } };
@Override public TaskCallback createCallback() { state.startProcess(); containerMetrics.processes().inc(); return callbackManager.createCallback(task.taskName(), envelope, coordinator); } };
assertEquals(1, task1.completed.get()); assertEquals(4L, containerMetrics.envelopes().getCount()); assertEquals(2L, containerMetrics.processes().getCount());
@Test public void testEndOfStreamWithOutOfOrderProcess() throws Exception { int maxMessagesInFlight = 2; CountDownLatch task0ProcessedMessagesLatch = new CountDownLatch(2); CountDownLatch task1ProcessedMessagesLatch = new CountDownLatch(1); SystemConsumers consumerMultiplexer = mock(SystemConsumers.class); when(consumerMultiplexer.pollIntervalMs()).thenReturn(10); OffsetManager offsetManager = mock(OffsetManager.class); TestTask task0 = new TestTask(true, true, false, task0ProcessedMessagesLatch, maxMessagesInFlight); TestTask task1 = new TestTask(true, true, false, task1ProcessedMessagesLatch, maxMessagesInFlight); TaskInstance t0 = createTaskInstance(task0, taskName0, ssp0, offsetManager, consumerMultiplexer); TaskInstance t1 = createTaskInstance(task1, taskName1, ssp1, offsetManager, consumerMultiplexer); Map<TaskName, TaskInstance> tasks = new HashMap<>(); tasks.put(taskName0, t0); tasks.put(taskName1, t1); task0.callbackHandler = buildOutofOrderCallback(task0); AsyncRunLoop runLoop = new AsyncRunLoop(tasks, executor, consumerMultiplexer, maxMessagesInFlight, windowMs, commitMs, callbackTimeoutMs, maxThrottlingDelayMs, maxIdleMs, containerMetrics, () -> 0L, false); when(consumerMultiplexer.choose(false)).thenReturn(envelope0).thenReturn(envelope3).thenReturn(envelope1).thenReturn(null).thenReturn(ssp0EndOfStream).thenReturn(ssp1EndOfStream).thenReturn(null); runLoop.run(); task0ProcessedMessagesLatch.await(); task1ProcessedMessagesLatch.await(); assertEquals(2, task0.processed); assertEquals(2, task0.completed.get()); assertEquals(1, task1.processed); assertEquals(1, task1.completed.get()); assertEquals(5L, containerMetrics.envelopes().getCount()); assertEquals(3L, containerMetrics.processes().getCount()); }
if (taskCallback.envelope.equals(envelope0)) { assertEquals(2, containerMetrics.processes().getCount()); assertEquals(0, containerMetrics.commits().getCount()); commitLatch.countDown();
@Test public void testProcessOutOfOrder() throws Exception { int maxMessagesInFlight = 2; CountDownLatch task0ProcessedMessagesLatch = new CountDownLatch(2); CountDownLatch task1ProcessedMessagesLatch = new CountDownLatch(1); SystemConsumers consumerMultiplexer = mock(SystemConsumers.class); when(consumerMultiplexer.pollIntervalMs()).thenReturn(10); OffsetManager offsetManager = mock(OffsetManager.class); TestTask task0 = new TestTask(true, true, false, task0ProcessedMessagesLatch, maxMessagesInFlight); TestTask task1 = new TestTask(true, false, false, task1ProcessedMessagesLatch, maxMessagesInFlight); TaskInstance t0 = createTaskInstance(task0, taskName0, ssp0, offsetManager, consumerMultiplexer); TaskInstance t1 = createTaskInstance(task1, taskName1, ssp1, offsetManager, consumerMultiplexer); Map<TaskName, TaskInstance> tasks = new HashMap<>(); tasks.put(taskName0, t0); tasks.put(taskName1, t1); task0.callbackHandler = buildOutofOrderCallback(task0); AsyncRunLoop runLoop = new AsyncRunLoop(tasks, executor, consumerMultiplexer, maxMessagesInFlight, windowMs, commitMs, callbackTimeoutMs, maxThrottlingDelayMs, maxIdleMs, containerMetrics, () -> 0L, false); when(consumerMultiplexer.choose(false)).thenReturn(envelope0).thenReturn(envelope3).thenReturn(envelope1).thenReturn(ssp0EndOfStream).thenReturn(ssp1EndOfStream).thenReturn(null); runLoop.run(); task0ProcessedMessagesLatch.await(); task1ProcessedMessagesLatch.await(); assertEquals(2, task0.processed); assertEquals(2, task0.completed.get()); assertEquals(1, task1.processed); assertEquals(1, task1.completed.get()); assertEquals(5L, containerMetrics.envelopes().getCount()); assertEquals(3L, containerMetrics.processes().getCount()); }
@Test public void testProcessMultipleTasks() throws Exception { CountDownLatch task0ProcessedMessages = new CountDownLatch(1); CountDownLatch task1ProcessedMessages = new CountDownLatch(1); SystemConsumers consumerMultiplexer = mock(SystemConsumers.class); when(consumerMultiplexer.pollIntervalMs()).thenReturn(10); OffsetManager offsetManager = mock(OffsetManager.class); TestTask task0 = new TestTask(true, true, false, task0ProcessedMessages); TestTask task1 = new TestTask(true, false, true, task1ProcessedMessages); TaskInstance t0 = createTaskInstance(task0, taskName0, ssp0, offsetManager, consumerMultiplexer); TaskInstance t1 = createTaskInstance(task1, taskName1, ssp1, offsetManager, consumerMultiplexer); Map<TaskName, TaskInstance> tasks = new HashMap<>(); tasks.put(taskName0, t0); tasks.put(taskName1, t1); int maxMessagesInFlight = 1; AsyncRunLoop runLoop = new AsyncRunLoop(tasks, executor, consumerMultiplexer, maxMessagesInFlight, windowMs, commitMs, callbackTimeoutMs, maxThrottlingDelayMs, maxIdleMs, containerMetrics, () -> 0L, false); when(consumerMultiplexer.choose(false)).thenReturn(envelope0).thenReturn(envelope1).thenReturn(null); runLoop.run(); task0ProcessedMessages.await(); task1ProcessedMessages.await(); assertEquals(1, task0.processed); assertEquals(1, task0.completed.get()); assertEquals(1, task1.processed); assertEquals(1, task1.completed.get()); assertEquals(2L, containerMetrics.envelopes().getCount()); assertEquals(2L, containerMetrics.processes().getCount()); }
assertEquals(1, task1.completed.get()); assertEquals(2L, containerMetrics.envelopes().getCount()); assertEquals(2L, containerMetrics.processes().getCount());
assertEquals(1, task1.completed.get()); assertEquals(5L, containerMetrics.envelopes().getCount()); assertEquals(3L, containerMetrics.processes().getCount()); assertEquals(2L, t0.metrics().asyncCallbackCompleted().getCount()); assertEquals(1L, t1.metrics().asyncCallbackCompleted().getCount());