Source:
<code><START> private boolean tryUnspillNext() <END> { verify(probe == null); if (!partitionedConsumption.isDone()) { return false; } if (lookupPartitions == null) { lookupPartitions = getDone(partitionedConsumption).beginConsumption(); } if (unspilledInputPages.hasNext()) { addInput(unspilledInputPages.next()); verify(probe != null); return true; } else if (unspilledLookupSource.isPresent()) { if (!unspilledLookupSource.get().isDone()) { return false; } LookupSource lookupSource = getDone(unspilledLookupSource.get()).get(); unspilledLookupSource = Optional.empty(); lookupSourceProvider.close(); lookupSourceProvider = new SimpleLookupSourceProvider(lookupSource); int partition = currentPartition.get().number(); unspilledInputPages = spiller.map(spiller -> spiller.getSpilledPages(partition)) .orElse(emptyIterator()); Optional.ofNullable(savedRows.remove(partition)).ifPresent(savedRow -> { restoreProbe( savedRow.row, savedRow.joinPositionWithinPartition, savedRow.currentProbePositionProducedRow, savedRow.joinSourcePositions, SpillInfoSnapshot.noSpill()); }); return false; } else if (lookupPartitions.hasNext()) { currentPartition.ifPresent(Partition::release); currentPartition = Optional.of(lookupPartitions.next()); unspilledLookupSource = Optional.of(currentPartition.get().load()); return false; } else { currentPartition.ifPresent(Partition::release); if (lookupSourceProvider != null) { lookupSourceProvider.close(); lookupSourceProvider = null; } spiller.ifPresent(PartitioningSpiller::verifyAllPartitionsRead); finished = true; return true; } }</code><technical_language>discussed this method return void producePage() handle output getOutput() method</technical_language>

Target:
private void tryUnspillNext() { verify(probe == null); if (!partitionedConsumption.isDone()) { return; } if (lookupPartitions == null) { lookupPartitions = getDone(partitionedConsumption).beginConsumption(); } if (unspilledInputPages.hasNext()) { addInput(unspilledInputPages.next()); return; } if (unspilledLookupSource.isPresent()) { if (!unspilledLookupSource.get().isDone()) { return; } LookupSource lookupSource = getDone(unspilledLookupSource.get()).get(); unspilledLookupSource = Optional.empty(); lookupSourceProvider.close(); lookupSourceProvider = new StaticLookupSourceProvider(lookupSource); statisticsCounter.updateLookupSourcePositions(lookupSource.getJoinPositionCount()); int partition = currentPartition.get().number(); unspilledInputPages = spiller.map(spiller -> spiller.getSpilledPages(partition)) .orElse(emptyIterator()); Optional.ofNullable(savedRows.remove(partition)).ifPresent(savedRow -> { restoreProbe( savedRow.row, savedRow.joinPositionWithinPartition, savedRow.currentProbePositionProducedRow, savedRow.joinSourcePositions, SpillInfoSnapshot.noSpill()); }); return; } if (lookupPartitions.hasNext()) { currentPartition.ifPresent(Partition::release); currentPartition = Optional.of(lookupPartitions.next()); unspilledLookupSource = Optional.of(currentPartition.get().load()); return; } currentPartition.ifPresent(Partition::release); if (lookupSourceProvider != null) { lookupSourceProvider.close(); lookupSourceProvider = null; } spiller.ifPresent(PartitioningSpiller::verifyAllPartitionsRead); finished = true; }