enable better refresh with mesos 0.23

Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
Victor Vieux 2015-08-14 17:07:51 -07:00
parent a80cb7ba34
commit 58482a13d2
3 changed files with 11 additions and 9 deletions

View File

@ -17,7 +17,7 @@ type Container struct {
} }
// Refresh container // Refresh container
func (c *Container) Refresh() error { func (c *Container) Refresh() (*Container, error) {
return c.Engine.refreshContainer(c.Id, true) return c.Engine.refreshContainer(c.Id, true)
} }

View File

@ -227,15 +227,16 @@ func (e *Engine) RefreshContainers(full bool) error {
// Refresh the status of a container running on the engine. If `full` is true, // Refresh the status of a container running on the engine. If `full` is true,
// the container will be inspected. // the container will be inspected.
func (e *Engine) refreshContainer(ID string, full bool) error { func (e *Engine) refreshContainer(ID string, full bool) (*Container, error) {
containers, err := e.client.ListContainers(true, false, fmt.Sprintf("{%q:[%q]}", "id", ID)) containers, err := e.client.ListContainers(true, false, fmt.Sprintf("{%q:[%q]}", "id", ID))
if err != nil { if err != nil {
return err return nil, err
} }
if len(containers) > 1 { if len(containers) > 1 {
// We expect one container, if we get more than one, trigger a full refresh. // We expect one container, if we get more than one, trigger a full refresh.
return e.RefreshContainers(full) err = e.RefreshContainers(full)
return nil, err
} }
if len(containers) == 0 { if len(containers) == 0 {
@ -244,11 +245,11 @@ func (e *Engine) refreshContainer(ID string, full bool) error {
delete(e.containers, ID) delete(e.containers, ID)
e.Unlock() e.Unlock()
return nil return nil, nil
} }
_, err = e.updateContainer(containers[0], e.containers, full) _, err = e.updateContainer(containers[0], e.containers, full)
return err return e.containers[containers[0].Id], err
} }
func (e *Engine) updateContainer(c dockerclient.Container, containers map[string]*Container, full bool) (map[string]*Container, error) { func (e *Engine) updateContainer(c dockerclient.Container, containers map[string]*Container, full bool) (map[string]*Container, error) {
@ -614,7 +615,8 @@ func (e *Engine) RenameContainer(container *Container, newName string) error {
} }
// refresh container // refresh container
return e.refreshContainer(container.Id, true) _, err = e.refreshContainer(container.Id, true)
return err
} }
// BuildImage build an image // BuildImage build an image

View File

@ -475,9 +475,9 @@ func (c *Cluster) scheduleTask(t *task) bool {
// In mesos 0.23+ the docker inspect will be sent back in the taskStatus.Data // In mesos 0.23+ the docker inspect will be sent back in the taskStatus.Data
// We can use this to find the right container. // We can use this to find the right container.
inspect := []dockerclient.ContainerInfo{} inspect := []dockerclient.ContainerInfo{}
if data != nil && json.Unmarshal(data, &inspect) != nil && len(inspect) == 1 { if data != nil && json.Unmarshal(data, &inspect) == nil && len(inspect) == 1 {
container := &cluster.Container{Container: dockerclient.Container{Id: inspect[0].Id}, Engine: s.engine} container := &cluster.Container{Container: dockerclient.Container{Id: inspect[0].Id}, Engine: s.engine}
if container.Refresh() == nil { if container, err := container.Refresh(); err == nil {
t.container <- container t.container <- container
return true return true
} }