Parcourir la source

Merge pull request #2750 from jpoimboe/simplify-register-reconnect

Simplify the runtime Register reconnect logic
Michael Crosby il y a 11 ans
Parent
commit
234f5ac39f
1 fichiers modifiés avec 10 ajouts et 17 suppressions
  1. 10 17
      runtime.go

+ 10 - 17
runtime.go

@@ -118,9 +118,6 @@ func (runtime *Runtime) Register(container *Container) error {
 		return err
 		return err
 	}
 	}
 
 
-	// init the wait lock
-	container.waitLock = make(chan struct{})
-
 	container.runtime = runtime
 	container.runtime = runtime
 
 
 	// Attach to stdout and stderr
 	// Attach to stdout and stderr
@@ -136,10 +133,6 @@ func (runtime *Runtime) Register(container *Container) error {
 	runtime.containers.PushBack(container)
 	runtime.containers.PushBack(container)
 	runtime.idIndex.Add(container.ID)
 	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?
 	// 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 so, then we need to restart monitor and init a new lock
 	// If the container is supposed to be running, make sure of it
 	// 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 {
 				if err := container.Start(); err != nil {
 					return err
 					return err
 				}
 				}
-				nomonitor = true
 			} else {
 			} else {
 				utils.Debugf("Marking as stopped")
 				utils.Debugf("Marking as stopped")
 				container.State.setStopped(-127)
 				container.State.setStopped(-127)
@@ -165,16 +157,17 @@ func (runtime *Runtime) Register(container *Container) error {
 					return err
 					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
 	return nil
 }
 }