@Override public boolean isFinished() { return (source != null) && source.isFinished(); }
@Override public boolean isFinished() { if (state == State.FINISHED) { verify(statisticsAggregationOperator.isFinished()); return true; } return false; }
@GuardedBy("exclusiveLock") private boolean isFinishedInternal() { checkLockHeld("Lock must be held to call isFinishedInternal"); boolean finished = state.get() != State.ALIVE || driverContext.isDone() || activeOperators.isEmpty() || activeOperators.get(activeOperators.size() - 1).isFinished(); if (finished) { state.compareAndSet(State.ALIVE, State.NEED_DESTRUCTION); } return finished; }
private static List<Page> pullAvailablePages(Operator operator) throws InterruptedException { long endTime = System.nanoTime() + TimeUnit.SECONDS.toNanos(10); List<Page> outputPages = new ArrayList<>(); assertOperatorIsUnblocked(operator); while (!operator.isFinished() && System.nanoTime() - endTime < 0) { assertFalse(operator.needsInput()); Page outputPage = operator.getOutput(); if (outputPage != null) { outputPages.add(outputPage); } else { Thread.sleep(10); } } // verify state assertFalse(operator.needsInput(), "Operator still wants input"); assertTrue(operator.isFinished(), "Expected operator to be finished"); return outputPages; } }
private static void waitForFinished(Operator operator) throws InterruptedException { // wait for finished or until 10 seconds has passed long endTime = System.nanoTime() + TimeUnit.SECONDS.toNanos(10); while (System.nanoTime() - endTime < 0) { assertEquals(operator.needsInput(), false); assertNull(operator.getOutput()); if (operator.isFinished()) { break; } Thread.sleep(10); } // verify final state assertEquals(operator.isFinished(), true); assertEquals(operator.needsInput(), false); assertNull(operator.getOutput()); assertEquals(operator.getOperatorContext().getOperatorStats().getSystemMemoryReservation().toBytes(), 0); } }
if (!current.isFinished() && !getBlockedFuture(next).isPresent() && next.needsInput()) { if (current.isFinished()) { if (activeOperators.get(index).isFinished()) {
if (!statisticAggregationOperator.isFinished()) { OperationTimer timer = new OperationTimer(statisticsCpuTimerEnabled); Page aggregationOutput = statisticAggregationOperator.getOutput();
if (operator.isFinished()) { break; if (operator.isFinished()) { break;
assertFalse(operator.isFinished()); assertTrue(operator.needsInput()); assertFalse(operator.isFinished()); assertFalse(operator.needsInput()); assertNull(operator.getOutput()); assertFalse(operator.isFinished()); assertTrue(operator.needsInput()); assertFalse(operator.isFinished()); assertFalse(operator.needsInput()); assertFalse(operator.isFinished()); assertFalse(operator.needsInput()); assertTrue(operator.isFinished()); assertFalse(operator.needsInput());
if (!statisticsAggregationOperator.isFinished()) { verify(statisticsAggregationOperator.isBlocked().isDone(), "aggregation operator should not be blocked");
private static Page getAtMostOnePage(Operator operator, Page sourcePage) { // add our input page if needed if (operator.needsInput()) { operator.addInput(sourcePage); } // try to get the output page Page result = operator.getOutput(); // tell operator to finish operator.finish(); // try to get output until the operator is finished while (!operator.isFinished()) { // operator should never block assertTrue(operator.isBlocked().isDone()); Page output = operator.getOutput(); if (output != null) { assertNull(result); result = output; } } return result; }
@Test public void testNormalFinish() { List<Type> types = ImmutableList.of(VARCHAR, BIGINT, BIGINT); ValuesOperator source = new ValuesOperator(driverContext.addOperatorContext(0, new PlanNodeId("test"), "values"), rowPagesBuilder(types) .addSequencePage(10, 20, 30, 40) .build()); Operator sink = createSinkOperator(types); Driver driver = Driver.createDriver(driverContext, source, sink); assertSame(driver.getDriverContext(), driverContext); assertFalse(driver.isFinished()); ListenableFuture<?> blocked = driver.processFor(new Duration(1, TimeUnit.SECONDS)); assertTrue(blocked.isDone()); assertTrue(driver.isFinished()); assertTrue(sink.isFinished()); assertTrue(source.isFinished()); }
@Test public void testLimitZero() throws Exception { List<Page> input = rowPagesBuilder(BIGINT).row(1L).build(); TopNOperatorFactory factory = new TopNOperatorFactory( 0, new PlanNodeId("test"), ImmutableList.of(BIGINT), 0, ImmutableList.of(0), ImmutableList.of(DESC_NULLS_LAST)); try (Operator operator = factory.createOperator(driverContext)) { assertEquals(operator.isFinished(), true); assertEquals(operator.needsInput(), false); assertEquals(operator.getOutput(), null); } }
@Override public boolean isFinished() { return (source != null) && source.isFinished(); }
private boolean isFinishedInternal() { checkLockHeld("Lock must be held to call isFinishedInternal"); boolean finished = state.get() != State.ALIVE || driverContext.isDone() || operators.get(operators.size() - 1).isFinished(); if (finished) { state.compareAndSet(State.ALIVE, State.NEED_DESTRUCTION); } return finished; }
public static List<Page> toPages(Operator operator, List<Page> input) { // verify initial state assertEquals(operator.isFinished(), false); assertEquals(operator.needsInput(), true); assertEquals(operator.getOutput(), null); return toPages(operator, input.iterator()); }
private static void addRemainingOutputPages(Operator operator, ImmutableList.Builder<Page> outputPages) { // pull remaining output pages while (!operator.isFinished()) { // at this point the operator should not need more input assertEquals(operator.needsInput(), false); Page outputPage = operator.getOutput(); if (outputPage != null) { outputPages.add(outputPage); } } // verify final state assertEquals(operator.isFinished(), true); assertEquals(operator.needsInput(), false); assertEquals(operator.getOutput(), null); }
private void waitForFinished(Operator operator) throws InterruptedException { // wait for finished or until 10 seconds has passed long endTime = System.nanoTime() + TimeUnit.SECONDS.toNanos(10); while (System.nanoTime() < endTime) { assertEquals(operator.needsInput(), false); assertNull(operator.getOutput()); if (operator.isFinished()) { break; } Thread.sleep(10); } // verify final state assertEquals(operator.isFinished(), true); assertEquals(operator.needsInput(), false); assertNull(operator.getOutput()); assertEquals(operator.getOperatorContext().getOperatorStats().getSystemMemoryReservation().toBytes(), 0); }
@Test public void testLimitZero() throws Exception { List<Page> input = rowPagesBuilder(BIGINT).row(1).build(); TopNOperatorFactory factory = new TopNOperatorFactory( 0, new PlanNodeId("test"), ImmutableList.of(BIGINT), 0, ImmutableList.of(0), ImmutableList.of(DESC_NULLS_LAST), false); Operator operator = factory.createOperator(driverContext); MaterializedResult expected = resultBuilder(driverContext.getSession(), BIGINT).build(); // assertOperatorEquals assumes operators do not start in finished state assertEquals(operator.isFinished(), true); assertEquals(operator.needsInput(), false); assertEquals(operator.getOutput(), null); List<Page> pages = OperatorAssertion.toPages(operator, input.iterator()); MaterializedResult actual = OperatorAssertion.toMaterializedResult(operator.getOperatorContext().getSession(), operator.getTypes(), pages); assertEquals(actual, expected); }
private static Page getAtMostOnePage(Operator operator, Page sourcePage) { // add our input page if needed if (operator.needsInput()) { operator.addInput(sourcePage); } // try to get the output page Page result = operator.getOutput(); // tell operator to finish operator.finish(); // try to get output until the operator is finished while (!operator.isFinished()) { // operator should never block assertTrue(operator.isBlocked().isDone()); Page output = operator.getOutput(); if (output != null) { assertNull(result); result = output; } } return result; }