Do not panic on redundant UpdateAttachment

Signed-off-by: Alessandro Boch <aboch@docker.com>
This commit is contained in:
Alessandro Boch 2017-03-24 06:43:23 -07:00
parent 4e290f7a2b
commit 3bf164e48d
2 changed files with 11 additions and 3 deletions

View File

@ -126,6 +126,7 @@ type Cluster struct {
type attacher struct {
taskID string
config *network.NetworkingConfig
inProgress bool
attachWaitCh chan *network.NetworkingConfig
attachCompleteCh chan struct{}
detachWaitCh chan struct{}

View File

@ -81,15 +81,22 @@ func attacherKey(target, containerID string) string {
// waiter who is trying to start or attach the container to the
// network.
func (c *Cluster) UpdateAttachment(target, containerID string, config *network.NetworkingConfig) error {
c.mu.RLock()
c.mu.Lock()
attacher, ok := c.attachers[attacherKey(target, containerID)]
c.mu.RUnlock()
if !ok || attacher == nil {
c.mu.Unlock()
return fmt.Errorf("could not find attacher for container %s to network %s", containerID, target)
}
if attacher.inProgress {
logrus.Debugf("Discarding redundant notice of resource allocation on network %s for task id %s", target, attacher.taskID)
c.mu.Unlock()
return nil
}
attacher.inProgress = true
c.mu.Unlock()
attacher.attachWaitCh <- config
close(attacher.attachWaitCh)
return nil
}