private void processNewSource(TaskSource source) { checkLockHeld("Lock must be held to call processNewSources"); // create new source Set<ScheduledSplit> newSplits; TaskSource currentSource = currentSources.get(source.getPlanNodeId()); if (currentSource == null) { newSplits = source.getSplits(); currentSources.put(source.getPlanNodeId(), source); } else { // merge the current source and the specified source TaskSource newSource = currentSource.update(source); // if this is not a new source, just return if (newSource == currentSource) { return; } // find the new splits to add newSplits = Sets.difference(newSource.getSplits(), currentSource.getSplits()); currentSources.put(source.getPlanNodeId(), newSource); } // add new splits for (ScheduledSplit newSplit : newSplits) { Split split = newSplit.getSplit(); SourceOperator sourceOperator = sourceOperators.get(source.getPlanNodeId()); if (sourceOperator != null) { sourceOperator.addSplit(split); } } // set no more splits if (source.isNoMoreSplits()) { sourceOperators.get(source.getPlanNodeId()).noMoreSplits(); } }
@Override public String getInfo() { return (partitionedSplit == null) ? "" : partitionedSplit.getSplit().getInfo().toString(); }