With respect to sharing code for rewriting pipelines: we've already written a few utilities for pipeline fusion and rewriting transforms to work with portable runners. Fusion functions the same way as in the ULR and is as simple as a single method call.
However, two things prevent us from completely doing away with upstream pipeline translations and portability references in runner-specific code. The first is that different runners may require/desire specific fusion logic for performance reasons or runner-specific functionality. The second is that in translating ProcessBundleDescriptor processing into runner primitives, each runner will require a specialized implementation. What we *do* have already is a set of utilities that facilitate this and hopefully minimize the amount of code needed to specialize the "executable stage" functionality for each runner. These utilities live under runners/java-fn-execution. On Wed, Mar 7, 2018 at 10:49 AM Axel Magnuson <axelm...@google.com> wrote: > My current solution is sort of a middle ground between the two. I have > made a lot of the portable API service logic generalizable, and it relies > on the runner implementing a few intefaces to use it. It doesn't use > decorators, but my hope is that it will prevent the need for each runner to > completely implement its own JobService. > -- -Ben