Skip to content

Commit

Permalink
Merge branch 'master' into v1.4.x
Browse files Browse the repository at this point in the history
  • Loading branch information
ehazlett committed Jun 29, 2017
2 parents ababe23 + 5c8e213 commit 34fa246
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 32 deletions.
38 changes: 15 additions & 23 deletions ext/lb/lb.go
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,6 @@ func NewLoadBalancer(c *config.ExtensionConfig, client *client.Client) (*LoadBal
continue
}

log().Debugf("proxyContainers: %v", proxyContainers)

// save config
log().Debug("saving proxy config")
if err := extension.SaveConfig(configPath, cfg, proxyContainers); err != nil {
Expand Down Expand Up @@ -280,18 +278,20 @@ func NewLoadBalancer(c *config.ExtensionConfig, client *client.Client) (*LoadBal
}

// get interlock nodes
interlockNodes := []types.Container{}

for _, cnt := range containers {
// always include self container
if cnt.ID == containerID && cnt.State == "running" {
interlockNodes = append(interlockNodes, cnt)
continue
}
nodeFilters := filters.NewArgs()
nodeFilters.Add("status", "running")
nodeFilters.Add("label", ext.InterlockAppLabel)
nodeOpts := types.ContainerListOptions{
All: false,
Size: false,
Filters: nodeFilters,
}

if _, ok := cnt.Labels[ext.InterlockAppLabel]; ok {
interlockNodes = append(interlockNodes, cnt)
}
log().Debug("getting interlock container list")
interlockNodes, err := client.ContainerList(context.Background(), nodeOpts)
if err != nil {
errChan <- err
continue
}

proxyContainersToRestart := extension.proxyContainersToRestart(interlockNodes, proxyContainers)
Expand Down Expand Up @@ -337,17 +337,9 @@ func (l *LoadBalancer) ProxyContainers(name string) ([]types.Container, error) {
return nil, err
}

proxyContainers := []types.Container{}

// find interlock proxy containers
for _, cnt := range containers {
if v, ok := cnt.Labels[ext.InterlockExtNameLabel]; ok && v == l.backend.Name() {
log().Debugf("detected proxy container: id=%s backend=%v", cnt.ID, v)
proxyContainers = append(proxyContainers, cnt)
}
}
log().Debugf("proxy containers: %+v", containers)

return proxyContainers, nil
return containers, nil
}

func (l *LoadBalancer) SaveConfig(configPath string, cfg interface{}, proxyContainers []types.Container) error {
Expand Down
26 changes: 17 additions & 9 deletions ext/lb/nginx/nginx.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,21 +73,19 @@ func (p *NginxLoadBalancer) ConfigPath() string {
func (p *NginxLoadBalancer) Reload(proxyContainers []types.Container) error {
// restart all interlock managed nginx containers
for _, cnt := range proxyContainers {
// restart
log().Debugf("reloading proxy container: id=%s", cnt.ID)
resp, err := p.client.ContainerExecCreate(context.Background(), cnt.ID, types.ExecConfig{
User: "root",
Cmd: []string{
"nginx",
"-s",
"reload",
"-t",
},
Detach: false,
AttachStdout: true,
AttachStderr: true,
})
if err != nil {
log().Errorf("error reloading container (exec create): id=%s err=%s", cnt.ID[:12], err)
log().Errorf("error validating config (exec create): id=%s err=%s", cnt.ID[:12], err)
continue
}

Expand All @@ -96,31 +94,41 @@ func (p *NginxLoadBalancer) Reload(proxyContainers []types.Container) error {
AttachStderr: true,
})
if err != nil {
log().Errorf("error reloading container (exec attach): id=%s err=%s", cnt.ID[:12], err)
log().Errorf("error validating config (exec attach): id=%s err=%s", cnt.ID[:12], err)
continue
}
defer aResp.Conn.Close()

// wait for exec to finish
res, err := p.waitForExec(resp.ID)
if err != nil {
log().Errorf("error reloading container (exec attach): id=%s err=%s", cnt.ID[:12], err)
log().Errorf("error validating config (exec attach): id=%s err=%s", cnt.ID[:12], err)
continue
}

if res.ExitCode != 0 {
out, err := aResp.Reader.ReadString('\n')
if err != nil {
log().Error("error reloading container: unable to read output from exec")
log().Error("error validating config: unable to read output from exec")
continue
}
// restore
log().Warn("restoring proxy config")
if err := p.restoreConfig(cnt.ID); err != nil {
log().Errorf("error reloading container: error restoring config: %s", err)
log().Errorf("error validating config: error restoring config: %s", err)
continue
}
log().Errorf("error reloading container, invalid proxy configuration: %s", strings.TrimSpace(out))
log().Errorf("error validating config, invalid proxy configuration: %s", strings.TrimSpace(out))
continue
}

// reload process
if err := p.client.ContainerKill(context.Background(), cnt.ID, "HUP"); err != nil {
log().Warn("restoring proxy config")
if err := p.restoreConfig(cnt.ID); err != nil {
log().Errorf("error restoring config: %s", err)
}
log().Errorf("error reloading proxy container: %s", err)
continue
}

Expand Down

0 comments on commit 34fa246

Please sign in to comment.