private <T extends FlinkPortablePipelineTranslator.TranslationContext>
PipelineResult runPipelineWithTranslator(FlinkPortablePipelineTranslator<T> translator)
throws Exception {
LOG.info("Translating pipeline to Flink program.");
RunnerApi.Pipeline trimmedPipeline =
makeKnownUrnsPrimitives(
pipeline,
Sets.difference(
translator.knownUrns(),
ImmutableSet.of(PTransformTranslation.ASSIGN_WINDOWS_TRANSFORM_URN)));
RunnerApi.Pipeline fusedPipeline = GreedyPipelineFuser.fuse(trimmedPipeline).toPipeline();
JobInfo jobInfo =
JobInfo.create(
id,
pipelineOptions.getJobName(),
retrievalToken,
PipelineOptionsTranslation.toProto(pipelineOptions));
FlinkPortablePipelineTranslator.Executor executor =
translator.translate(
translator.createTranslationContext(jobInfo, pipelineOptions, confDir, filesToStage),
fusedPipeline);
final JobExecutionResult result = executor.execute(pipelineOptions.getJobName());
return FlinkRunner.createPipelineResult(result, pipelineOptions);
}