From ee47f0c3eed8175f3fe1b3ef1c967a1856fddccc Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 30 Sep 2019 15:12:21 +0000 Subject: [PATCH] Use buffered chan to avoid losing docker events Docker imposes a limit that events have to be retrieved within 100ms or they are dropped on the sending side. Adding buffer space within the Weave Net process allows those events to be collected from Docker more quickly. 1024 is an arbitrary number, much higher than we expect to need. --- common/docker/client.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/common/docker/client.go b/common/docker/client.go index 381c887d..ddbe4aae 100644 --- a/common/docker/client.go +++ b/common/docker/client.go @@ -99,7 +99,9 @@ func (c *Client) AddObserver(ob ContainerObserver) error { pending := make(pendingStarts) retryInterval := InitialInterval for { - events := make(chan *docker.APIEvents) + // Use a buffered chan so the client library can run ahead of the listener + // - Docker will drop an event if it is not collected quickly enough. + events := make(chan *docker.APIEvents, 1024) if err := c.AddEventListener(events); err != nil { c.errorf("Unable to add listener to Docker API: %s - retrying in %ds", err, retryInterval/time.Second) } else {