@PostConstruct public void start() { taskManagementExecutor.scheduleWithFixedDelay(() -> { try { removeOldTasks(); } catch (Throwable e) { log.warn(e, "Error removing old tasks"); } try { failAbandonedTasks(); } catch (Throwable e) { log.warn(e, "Error canceling abandoned tasks"); } }, 200, 200, TimeUnit.MILLISECONDS); taskManagementExecutor.scheduleWithFixedDelay(() -> { try { updateStats(); } catch (Throwable e) { log.warn(e, "Error updating stats"); } }, 0, 1, TimeUnit.SECONDS); }
@Test public void testRemoveOldTasks() throws Exception { try (SqlTaskManager sqlTaskManager = createSqlTaskManager(new TaskManagerConfig().setInfoMaxAge(new Duration(5, TimeUnit.MILLISECONDS)))) { TaskId taskId = TASK_ID; TaskInfo taskInfo = createTask(sqlTaskManager, taskId, createInitialEmptyOutputBuffers(PARTITIONED).withBuffer(OUT, 0).withNoMoreBufferIds()); assertEquals(taskInfo.getTaskStatus().getState(), TaskState.RUNNING); taskInfo = sqlTaskManager.cancelTask(taskId); assertEquals(taskInfo.getTaskStatus().getState(), TaskState.CANCELED); taskInfo = sqlTaskManager.getTaskInfo(taskId); assertEquals(taskInfo.getTaskStatus().getState(), TaskState.CANCELED); Thread.sleep(100); sqlTaskManager.removeOldTasks(); for (TaskInfo info : sqlTaskManager.getAllTaskInfo()) { assertNotEquals(info.getTaskStatus().getTaskId(), taskId); } } }
@PostConstruct public void start() { taskManagementExecutor.scheduleWithFixedDelay(() -> { try { removeOldTasks(); } catch (Throwable e) { log.warn(e, "Error removing old tasks"); } try { failAbandonedTasks(); } catch (Throwable e) { log.warn(e, "Error canceling abandoned tasks"); } }, 200, 200, TimeUnit.MILLISECONDS); taskManagementExecutor.scheduleWithFixedDelay(() -> { try { updateStats(); } catch (Throwable e) { log.warn(e, "Error updating stats"); } }, 0, 1, TimeUnit.SECONDS); }
@Test public void testRemoveOldTasks() throws Exception { try (SqlTaskManager sqlTaskManager = createSqlTaskManager(new TaskManagerConfig().setInfoMaxAge(new Duration(5, TimeUnit.MILLISECONDS)))) { TaskId taskId = TASK_ID; TaskInfo taskInfo = sqlTaskManager.updateTask(TEST_SESSION, taskId, Optional.of(PLAN_FRAGMENT), ImmutableList.<TaskSource>of(), INITIAL_EMPTY_OUTPUT_BUFFERS); assertEquals(taskInfo.getState(), TaskState.RUNNING); taskInfo = sqlTaskManager.cancelTask(taskId); assertEquals(taskInfo.getState(), TaskState.CANCELED); taskInfo = sqlTaskManager.getTaskInfo(taskId); assertEquals(taskInfo.getState(), TaskState.CANCELED); Thread.sleep(100); sqlTaskManager.removeOldTasks(); for (TaskInfo info : sqlTaskManager.getAllTaskInfo()) { assertNotEquals(info.getTaskId(), taskId); } } }