simplify the runtime Register reconnect logic

Refactor the Register code a little bit to make it easier to comprehend.
This commit is contained in:
Josh Poimboeuf 2013-11-08 08:40:46 -06:00
parent 457375ea37
commit 3cbec95177
1 changed files with 10 additions and 17 deletions

View File

@ -118,9 +118,6 @@ func (runtime *Runtime) Register(container *Container) error {
return err
}
// init the wait lock
container.waitLock = make(chan struct{})
container.runtime = runtime
// Attach to stdout and stderr
@ -136,10 +133,6 @@ func (runtime *Runtime) Register(container *Container) error {
runtime.containers.PushBack(container)
runtime.idIndex.Add(container.ID)
// When we actually restart, Start() do the monitoring.
// However, when we simply 'reattach', we have to restart a monitor
nomonitor := false
// FIXME: if the container is supposed to be running but is not, auto restart it?
// if so, then we need to restart monitor and init a new lock
// If the container is supposed to be running, make sure of it
@ -157,7 +150,6 @@ func (runtime *Runtime) Register(container *Container) error {
if err := container.Start(); err != nil {
return err
}
nomonitor = true
} else {
utils.Debugf("Marking as stopped")
container.State.setStopped(-127)
@ -165,16 +157,17 @@ func (runtime *Runtime) Register(container *Container) error {
return err
}
}
}
}
} else {
utils.Debugf("Reconnecting to container %v", container.ID)
// If the container is not running or just has been flagged not running
// then close the wait lock chan (will be reset upon start)
if !container.State.Running {
close(container.waitLock)
} else if !nomonitor {
container.allocateNetwork()
go container.monitor()
if err := container.allocateNetwork(); err != nil {
return err
}
container.waitLock = make(chan struct{})
go container.monitor()
}
}
return nil
}