@Test public void testBufferNotCloseOnFail() throws Exception { outputBuffers = outputBuffers .withBuffer("out", new UnpartitionedPagePartitionFunction()) .withNoMoreBufferIds(); taskExecution.addResultQueue(outputBuffers); BufferResult bufferResult = taskExecution.getResults( "out", 0, new DataSize(1, Unit.MEGABYTE), new Duration(0, TimeUnit.MILLISECONDS)); assertFalse(bufferResult.isBufferClosed()); bufferResult = taskExecution.getResults( "out", 0, new DataSize(1, Unit.MEGABYTE), new Duration(0, TimeUnit.MILLISECONDS)); assertFalse(bufferResult.isBufferClosed()); taskExecution.fail(new Exception("test")); assertEquals(taskExecution.getTaskInfo(false).getState(), TaskState.FAILED); // buffer will not be closed by fail event. event is async so wait for 500 MS for event to fire bufferResult = taskExecution.getResults( "out", 0, new DataSize(1, Unit.MEGABYTE), new Duration(500, TimeUnit.MILLISECONDS)); assertFalse(bufferResult.isBufferClosed()); bufferResult = taskExecution.getResults( "out", 0, new DataSize(1, Unit.MEGABYTE), new Duration(500, TimeUnit.MILLISECONDS)); assertFalse(bufferResult.isBufferClosed()); }
@Test public void testBufferCloseOnFinish() throws Exception { outputBuffers = outputBuffers .withBuffer("out", new UnpartitionedPagePartitionFunction()) .withNoMoreBufferIds(); taskExecution.addResultQueue(outputBuffers); BufferResult bufferResult = taskExecution.getResults( "out", 0, new DataSize(1, Unit.MEGABYTE), new Duration(0, TimeUnit.MILLISECONDS)); assertFalse(bufferResult.isBufferClosed()); bufferResult = taskExecution.getResults( "out", 0, new DataSize(1, Unit.MEGABYTE), new Duration(0, TimeUnit.MILLISECONDS)); assertFalse(bufferResult.isBufferClosed()); taskExecution.addSources( ImmutableList.of(new TaskSource(tableScanNodeId, ImmutableSet.<ScheduledSplit>of(), true))); assertEquals(taskExecution.getTaskInfo(false).getState(), TaskState.FINISHED); // buffer will be closed by cancel event (wait for 500 MS for event to fire) bufferResult = taskExecution.getResults( "out", 0, new DataSize(1, Unit.MEGABYTE), new Duration(500, TimeUnit.MILLISECONDS)); assertTrue(bufferResult.isBufferClosed()); bufferResult = taskExecution.getResults( "out", 0, new DataSize(1, Unit.MEGABYTE), new Duration(500, TimeUnit.MILLISECONDS)); assertTrue(bufferResult.isBufferClosed()); }
@Test public void testSimpleQuery() throws Exception { SqlTask sqlTask = createInitialTask(); TaskInfo taskInfo = sqlTask.updateTask( SESSION, PLAN_FRAGMENT, ImmutableList.of(new TaskSource(TABLE_SCAN_NODE_ID, ImmutableSet.of(SPLIT), true)), INITIAL_EMPTY_OUTPUT_BUFFERS .withBuffer("out", new UnpartitionedPagePartitionFunction()) .withNoMoreBufferIds()); assertEquals(taskInfo.getState(), TaskState.RUNNING); taskInfo = sqlTask.getTaskInfo(); assertEquals(taskInfo.getState(), TaskState.RUNNING); BufferResult results = sqlTask.getTaskResults("out", 0, new DataSize(1, Unit.MEGABYTE)).get(); assertEquals(results.isBufferClosed(), false); assertEquals(results.getPages().size(), 1); assertEquals(results.getPages().get(0).getPositionCount(), 1); results = sqlTask .getTaskResults( "out", results.getToken() + results.getPages().size(), new DataSize(1, Unit.MEGABYTE)) .get(); assertEquals(results.isBufferClosed(), true); assertEquals(results.getPages().size(), 0); taskInfo = sqlTask.getTaskInfo(taskInfo.getState()).get(1, TimeUnit.SECONDS); assertEquals(taskInfo.getState(), TaskState.FINISHED); taskInfo = sqlTask.getTaskInfo(); assertEquals(taskInfo.getState(), TaskState.FINISHED); }