func (mtask *managedTask) handleStoppedToRunningContainerTransition(status apicontainerstatus.ContainerStatus, container *apicontainer.Container) {
	containerKnownStatus := container.GetKnownStatus()
	if status > containerKnownStatus {
		// Event status is greater than container's known status.
		// This is not a backward transition, return
		return
	}
	if containerKnownStatus != apicontainerstatus.ContainerStopped {
		// Container's known status is not STOPPED. Nothing to do here.
		return
	}
	if !status.IsRunning() {
		// Container's 'to' transition was not either of RUNNING or RESOURCES_PROVISIONED
		// states. Nothing to do in this case as well
		return
	}
	// If the container becomes running after we've stopped it (possibly
	// because we got an error running it and it ran anyways), the first time
	// update it to 'known running' so that it will be driven back to stopped
	mtask.unexpectedStart.Do(func() {
		seelog.Warnf("Managed task [%s]: stopped container [%s] came back; re-stopping it once",
			mtask.Arn, container.Name)
		go mtask.engine.transitionContainer(mtask.Task, container, apicontainerstatus.ContainerStopped)
		// This will not proceed afterwards because status <= knownstatus below
	})
}
func (mtask *managedTask) handleStoppedToRunningContainerTransition(status apicontainerstatus.ContainerStatus, container *apicontainer.Container) {
	containerKnownStatus := container.GetKnownStatus()
	if status > containerKnownStatus {
		// Event status is greater than container's known status.
		// This is not a backward transition, return
		return
	}
	if containerKnownStatus != apicontainerstatus.ContainerStopped {
		// Container's known status is not STOPPED. Nothing to do here.
		return
	}
	if !status.IsRunning() {
		// Container's 'to' transition was not either of RUNNING or RESOURCES_PROVISIONED
		// states. Nothing to do in this case as well
		return
	}
	// If the container becomes running after we've stopped it (possibly
	// because we got an error running it and it ran anyways), the first time
	// update it to 'known running' so that it will be driven back to stopped
	mtask.unexpectedStart.Do(func() {
		seelog.Warnf("Managed task [%s]: stopped container [%s] came back; re-stopping it once",
			mtask.Arn, container.Name)
		go mtask.engine.transitionContainer(mtask.Task, container, apicontainerstatus.ContainerStopped)
		// This will not proceed afterwards because status <= knownstatus below
	})
}
func ( mtask * managedTask ) handleStoppedToRunningContainerTransition ( status apicontainerstatus . ContainerStatus , container * apicontainer . Container ) { containerKnownStatus := container . GetKnownStatus ( ) if status > containerKnownStatus { // Event status is greater than container's known status. // This is not a backward transition, return return } if containerKnownStatus != apicontainerstatus . ContainerStopped { // Container's known status is not STOPPED. Nothing to do here. return } if ! status . IsRunning ( ) { // Container's 'to' transition was not either of RUNNING or RESOURCES_PROVISIONED // states. Nothing to do in this case as well return } // If the container becomes running after we've stopped it (possibly // because we got an error running it and it ran anyways), the first time // update it to 'known running' so that it will be driven back to stopped mtask . unexpectedStart . Do ( func ( ) { seelog . Warnf ( " " , mtask . Arn , container . Name ) go mtask . engine . transitionContainer ( mtask . Task , container , apicontainerstatus . ContainerStopped ) // This will not proceed afterwards because status <= knownstatus below } ) }
// handleStoppedToRunningContainerTransition detects a "backwards" container
// transition where a known-stopped container is found to be running again and
// handles it.
handleStoppedToRunningContainerTransition detects a backwards container transition where a known - stopped container is found to be running again and handles it .