This patch introduces ControllerPipeline which is an entry point
handler for the Kuryr-Kubernetes controller. ControllerPipeline
allows registering ResourceEventHandlers and ensures the proper
handler is called for each event that is passed to the
ControllerPipeline. Also it ensures the following behavior:
- multiple ResourceEventHandlers can be registered for the same
resource type (OBJECT_KIND)
- failing handlers (i.e. ones that raise Exceptions) are retried
until either the handler succeeds or a finite amount of time
passes, in which case the most recent exception is logged
- in case there are multiple handlers registered for the same
resource type, all such handlers are considered independent (i.e.
if one handler fails, other handlers will still be called
regardless; and the order in which such handlers are called is not
determined)
- events for different Kubernetes objects can be handled concurrently
- events for the same Kubernetes object are handled sequentially in
the order of arrival
Change-Id: Ib17e0c7a2790cdbc31be4f59d50972b43c272480
Partially-Implements: blueprint kuryr-k8s-integration