Merge remote-tracking branch 'origin/ghost_handling-fix'

This commit is contained in:
Solomon Hykes 2013-04-12 10:33:36 -07:00
Родитель 57d31c9777 313d13ea01
Коммит 3527291b47
3 изменённых файлов: 16 добавлений и 0 удалений

Просмотреть файл

@ -573,6 +573,12 @@ func (container *Container) kill() error {
func (container *Container) Kill() error {
container.State.lock()
defer container.State.unlock()
if !container.State.Running {
return nil
}
if container.State.Ghost {
return fmt.Errorf("Impossible to kill ghost containers")
}
return container.kill()
}
@ -582,6 +588,9 @@ func (container *Container) Stop() error {
if !container.State.Running {
return nil
}
if container.State.Ghost {
return fmt.Errorf("Impossible to stop ghost containers")
}
// 1. Send a SIGTERM
if output, err := exec.Command("lxc-kill", "-n", container.Id, "15").CombinedOutput(); err != nil {

Просмотреть файл

@ -119,6 +119,9 @@ func (runtime *Runtime) Load(id string) (*Container, error) {
if container.Id != id {
return container, fmt.Errorf("Container %s is stored at %s", container.Id, id)
}
if container.State.Running {
container.State.Ghost = true
}
if err := runtime.Register(container); err != nil {
return nil, err
}

Просмотреть файл

@ -12,11 +12,15 @@ type State struct {
ExitCode int
StartedAt time.Time
l *sync.Mutex
Ghost bool
}
// String returns a human-readable description of the state
func (s *State) String() string {
if s.Running {
if s.Ghost {
return fmt.Sprintf("Running ghost")
}
return fmt.Sprintf("Up %s", HumanDuration(time.Now().Sub(s.StartedAt)))
}
return fmt.Sprintf("Exit %d", s.ExitCode)