@Override public boolean isFinished() { return source.isFinished(); }
@Override public boolean isFinished() { return splitSource.isFinished(); } }
@Override public synchronized List<Lifespan> drainCompletedLifespans() { if (scheduleGroups.isEmpty()) { // Invoking splitSource.isFinished would fail if it was already closed, which is possible if scheduleGroups is empty. return ImmutableList.of(); } ImmutableList.Builder<Lifespan> result = ImmutableList.builder(); Iterator<Entry<Lifespan, ScheduleGroup>> entryIterator = scheduleGroups.entrySet().iterator(); while (entryIterator.hasNext()) { Entry<Lifespan, ScheduleGroup> entry = entryIterator.next(); if (entry.getValue().state == ScheduleGroupState.DONE) { result.add(entry.getKey()); entryIterator.remove(); } } if (scheduleGroups.isEmpty() && splitSource.isFinished()) { // Wake up blocked caller so that it will invoke schedule() right away. // Once schedule is invoked, state will be transitioned to FINISHED. whenFinishedOrNewLifespanAdded.set(null); whenFinishedOrNewLifespanAdded = SettableFuture.create(); } return result.build(); }
private Split getLocalQuerySplit(Session session, TableLayoutHandle handle) { SplitSource splitSource = localQueryRunner.getSplitManager().getSplits(session, handle, UNGROUPED_SCHEDULING); List<Split> splits = new ArrayList<>(); while (!splitSource.isFinished()) { splits.addAll(getNextBatch(splitSource)); } checkArgument(splits.size() == 1, "Expected only one split for a local query, but got %s splits", splits.size()); return splits.get(0); }
if ((state == State.NO_MORE_SPLITS || state == State.FINISHED) || (noMoreScheduleGroups && scheduleGroups.isEmpty() && splitSource.isFinished())) { switch (state) { case INITIALIZED:
@Test public void testEmptySource() { MockSplitSource mockSource = new MockSplitSource() .setBatchSize(1) .atSplitCompletion(FINISH); try (SplitSource source = new BufferingSplitSource(mockSource, 100)) { requireFutureValue(getNextBatch(source, 200)) .assertSize(0) .assertNoMoreSplits(true); assertTrue(source.isFinished()); assertEquals(mockSource.getNextBatchInvocationCount(), 1); } }
while (!splitSource.isFinished()) { for (Split split : getNextBatch(splitSource)) { scheduledSplits.add(new ScheduledSplit(sequenceId++, tableScan.getId(), split));
@Test public void testFinishedSetWithoutIndicationFromSplitBatch() { MockSplitSource mockSource = new MockSplitSource() .setBatchSize(1) .increaseAvailableSplits(1); try (SplitSource source = new BufferingSplitSource(mockSource, 100)) { requireFutureValue(getNextBatch(source, 1)) .assertSize(1) .assertNoMoreSplits(false); assertFalse(source.isFinished()); // Most of the time, mockSource.isFinished() returns the same value as // the SplitBatch.noMoreSplits field of the preceding mockSource.getNextBatch() call. // However, this is NOT always the case. // In this case, the preceding getNextBatch() indicates the noMoreSplits is false, // but the next isFinished call will return true. mockSource.atSplitCompletion(FINISH); requireFutureValue(getNextBatch(source, 1)) .assertSize(0) .assertNoMoreSplits(true); assertTrue(source.isFinished()); assertEquals(mockSource.getNextBatchInvocationCount(), 2); } }
@Test public void testFastSource() { MockSplitSource mockSource = new MockSplitSource() .setBatchSize(11) .increaseAvailableSplits(22) .atSplitCompletion(FINISH); try (SplitSource source = new BufferingSplitSource(mockSource, 10)) { requireFutureValue(getNextBatch(source, 200)) .assertSize(11) .assertNoMoreSplits(false); requireFutureValue(getNextBatch(source, 200)) .assertSize(11) .assertNoMoreSplits(true); assertTrue(source.isFinished()); assertEquals(mockSource.getNextBatchInvocationCount(), 2); } }
@Test public void testSlowSource() { MockSplitSource mockSource = new MockSplitSource() .setBatchSize(1) .increaseAvailableSplits(25) .atSplitCompletion(FINISH); try (SplitSource source = new BufferingSplitSource(mockSource, 10)) { requireFutureValue(getNextBatch(source, 20)) .assertSize(10) .assertNoMoreSplits(false); requireFutureValue(getNextBatch(source, 6)) .assertSize(6) .assertNoMoreSplits(false); requireFutureValue(getNextBatch(source, 20)) .assertSize(9) .assertNoMoreSplits(true); assertTrue(source.isFinished()); assertEquals(mockSource.getNextBatchInvocationCount(), 25); } }
.assertSize(0) .assertNoMoreSplits(true); assertTrue(source.isFinished()); .assertSize(5) .assertNoMoreSplits(true); assertTrue(source.isFinished()); mockSource.atSplitCompletion(FAIL); assertFutureFailsWithMockFailure(nextBatchFuture); assertFalse(source.isFinished());
@Override public boolean isFinished() { return splitSource.isFinished(); } }
private Split getLocalQuerySplit(Session session, TableLayoutHandle handle) { SplitSource splitSource = localQueryRunner.getSplitManager().getSplits(session, handle, UNGROUPED_SCHEDULING); List<Split> splits = new ArrayList<>(); while (!splitSource.isFinished()) { splits.addAll(getNextBatch(splitSource)); } checkArgument(splits.size() == 1, "Expected only one split for a local query, but got %s splits", splits.size()); return splits.get(0); }
private Split getLocalQuerySplit(Session session, TableLayoutHandle handle) { SplitSource splitSource = splitManager.getSplits(session, handle); List<Split> splits = new ArrayList<>(); splits.addAll(getFutureValue(splitSource.getNextBatch(1000))); while (!splitSource.isFinished()) { splits.addAll(getFutureValue(splitSource.getNextBatch(1000))); } checkArgument(splits.size() == 1, "Expected only one split for a local query, but got %s splits", splits.size()); return splits.get(0); }
if (splitSource.isFinished()) { boolean finished = splitSource.isFinished(); if (finished) { splitSource.close();
while (!splitSource.isFinished()) { for (Split split : getFutureValue(splitSource.getNextBatch(1000))) { scheduledSplits.add(new ScheduledSplit(sequenceId++, split));