Display Data supports the notion of "sub components", components within a transform class which can contribute their own display data. We add a namespace to display data items based on the originating component, which keeps the display data items unique within the step.
There are instances where a component is included multiple times within a step. We handle the case of the same instance being shared by simply ignoring it the second time. However, we don't handle the case of a separate instance being added of the same class. Currently the separate instances will add display data with the same namespace and key, causing a failure.
This can come up for example when infrastructure at different levels wrap and re-wrap a component. We saw this with a bounded source being adapted multiple times, Bounded -> Unbounded -> Bounded -> Unbounded. The BoundedToUnboundedSourceAdapter was included multiple times with separate instances and caused a failure while populating display data.
See: https://github.com/apache/incubator-beam/pull/1088 for a failing test case.