When I was prototyping a portable runner, I tested using a trivial pipeline:
PCollection<byte[]> result = pipeline.apply("impulse", Impulse.create());
PAssert.thatSingleton(result).isEqualTo(new
byte[]{});
When I tried traversing this pipeline, I found that the URN for the transform PAssert$0 was strangely missing. Turns out GreedyPipelineFuser solves this problem. I don't know why this is so, but I think this behavior should at least be documented in the runner authoring guide to save future runner authors some debugging.
Imported from Jira BEAM-6762. Original Jira may contain additional context.
Reported by: ibzib.