Search in sources :

Example 1 with SplitSchedulerStats

use of com.facebook.presto.execution.scheduler.SplitSchedulerStats in project presto by prestodb.

the class TestSqlStageExecution method testFinalStageInfoInternal.

private void testFinalStageInfoInternal() throws Exception {
    NodeTaskMap nodeTaskMap = new NodeTaskMap(new FinalizerService());
    StageId stageId = new StageId(new QueryId("query"), 0);
    SqlStageExecution stage = createSqlStageExecution(new StageExecutionId(stageId, 0), createExchangePlanFragment(), new MockRemoteTaskFactory(executor, scheduledExecutor), TEST_SESSION, true, nodeTaskMap, executor, new NoOpFailureDetector(), new SplitSchedulerStats(), new TableWriteInfo(Optional.empty(), Optional.empty(), Optional.empty()));
    stage.setOutputBuffers(createInitialEmptyOutputBuffers(ARBITRARY));
    // add listener that fetches stage info when the final status is available
    SettableFuture<StageExecutionInfo> finalStageInfo = SettableFuture.create();
    stage.addFinalStageInfoListener(finalStageInfo::set);
    // in a background thread add a ton of tasks
    CountDownLatch latch = new CountDownLatch(1000);
    Future<?> addTasksTask = executor.submit(() -> {
        try {
            for (int i = 0; i < 1_000_000; i++) {
                if (Thread.interrupted()) {
                    return;
                }
                InternalNode node = new InternalNode("source" + i, URI.create("http://10.0.0." + (i / 10_000) + ":" + (i % 10_000)), NodeVersion.UNKNOWN, false);
                stage.scheduleTask(node, i);
                latch.countDown();
            }
        } finally {
            while (latch.getCount() > 0) {
                latch.countDown();
            }
        }
    });
    // wait for some tasks to be created, and then abort the query
    latch.await(1, MINUTES);
    assertFalse(stage.getStageExecutionInfo().getTasks().isEmpty());
    stage.abort();
    // once the final stage info is available, verify that it is complete
    StageExecutionInfo stageInfo = finalStageInfo.get(1, MINUTES);
    assertFalse(stageInfo.getTasks().isEmpty());
    assertTrue(stageInfo.isFinal());
    assertSame(stage.getStageExecutionInfo(), stageInfo);
    // cancel the background thread adding tasks
    addTasksTask.cancel(true);
}
Also used : NoOpFailureDetector(com.facebook.presto.failureDetector.NoOpFailureDetector) TableWriteInfo(com.facebook.presto.execution.scheduler.TableWriteInfo) QueryId(com.facebook.presto.spi.QueryId) CountDownLatch(java.util.concurrent.CountDownLatch) SqlStageExecution.createSqlStageExecution(com.facebook.presto.execution.SqlStageExecution.createSqlStageExecution) SplitSchedulerStats(com.facebook.presto.execution.scheduler.SplitSchedulerStats) FinalizerService(com.facebook.presto.util.FinalizerService) InternalNode(com.facebook.presto.metadata.InternalNode)

Aggregations

SqlStageExecution.createSqlStageExecution (com.facebook.presto.execution.SqlStageExecution.createSqlStageExecution)1 SplitSchedulerStats (com.facebook.presto.execution.scheduler.SplitSchedulerStats)1 TableWriteInfo (com.facebook.presto.execution.scheduler.TableWriteInfo)1 NoOpFailureDetector (com.facebook.presto.failureDetector.NoOpFailureDetector)1 InternalNode (com.facebook.presto.metadata.InternalNode)1 QueryId (com.facebook.presto.spi.QueryId)1 FinalizerService (com.facebook.presto.util.FinalizerService)1 CountDownLatch (java.util.concurrent.CountDownLatch)1