public static <T> PipelineBuilder<T, T> createPipelineFrom(
      final String sourceName,
      final Iterator<T> source,
      final int bufferSize,
      final LabelledMetric<Counter> itemCounter,
      final boolean tracingEnabled,
      final String pipelineName) {
    final Pipe<T> pipe = createPipe(bufferSize, sourceName, itemCounter);
    final IteratorSourceStage<T> sourceStage = new IteratorSourceStage<>(sourceName, source, pipe);
    return new PipelineBuilder<>(
        pipe,
        singleton(sourceStage),
        singleton(pipe),
        sourceName,
        pipe,
        bufferSize,
        itemCounter,
        tracingEnabled,
        pipelineName);
  }
Create a new pipeline that processes inputs from <i>source</i>. The pipeline completes when
<i>source</i> returns <code>false</code> from {@link Iterator#hasNext()} and the last item has
been reached the end of the pipeline.

@param <T> the type of items input into the pipeline.
@param sourceName the name of this stage. Used as the label for the output count metric.
@param source the source to pull items from for processing.
@param bufferSize the number of items to be buffered between each stage in the pipeline.
@param itemCounter the counter to increment for each output of a stage. Must accept two labels,
    the stage name and action (output or drained).
@param tracingEnabled whether this pipeline should be traced
@param pipelineName the name of the pipeline for tracing purposes
@return a {@link PipelineBuilder} ready to extend the pipeline with additional stages.
services/pipeline/src/main/java/org/hyperledger/besu/services/pipeline/PipelineBuilder.java