use of org.apache.flink.table.runtime.operators.multipleinput.output.CopyingBroadcastingOutput in project flink by apache.
the class MultipleInputStreamOperatorBase method createAllOperators.
/**
* Create all sub-operators by corresponding operator factory in a multiple input operator from
* <b>tail to head</b>.
*/
@SuppressWarnings("unchecked")
private void createAllOperators(StreamOperatorParameters<RowData> parameters) {
final boolean isObjectReuseEnabled = parameters.getContainingTask().getExecutionConfig().isObjectReuseEnabled();
final ExecutionConfig executionConfig = parameters.getContainingTask().getExecutionConfig();
final Iterator<TableOperatorWrapper<?>> it = topologicalOrderingOperators.descendingIterator();
while (it.hasNext()) {
final TableOperatorWrapper<?> wrapper = it.next();
final Output<StreamRecord<RowData>> output;
if (wrapper == this.tailWrapper) {
output = this.output;
} else {
final int numberOfOutputs = wrapper.getOutputEdges().size();
final Output<StreamRecord<RowData>>[] outputs = new Output[numberOfOutputs];
for (int i = 0; i < numberOfOutputs; ++i) {
TableOperatorWrapper.Edge edge = wrapper.getOutputEdges().get(i);
int inputId = edge.getInputId();
StreamOperator<RowData> outputOperator = edge.getTarget().getStreamOperator();
if (isObjectReuseEnabled) {
outputs[i] = createOutput(outputOperator, inputId);
} else {
// the source's output type info is equal to the target's type info for the
// corresponding index
TypeSerializer<RowData> serializer = (TypeSerializer<RowData>) edge.getSource().getOutputType().createSerializer(executionConfig);
outputs[i] = createCopyingOutput(serializer, outputOperator, inputId);
}
}
if (outputs.length == 1) {
output = outputs[0];
} else {
// Because user's operator may change the record passed to it.
if (isObjectReuseEnabled) {
output = new CopyingBroadcastingOutput(outputs);
} else {
output = new BroadcastingOutput(outputs);
}
}
}
final StreamOperatorParameters<RowData> newParameters = createSubOperatorParameters(parameters, output, wrapper);
wrapper.createOperator(newParameters);
}
}
Aggregations