Merge branch 'pr/683'

* pr/683:
  Restart monitor as part of the upgrade process (fixes #682)
This commit is contained in:
Jakob Borg 2014-09-14 23:18:48 +02:00
commit 517b7a14b4
3 changed files with 16 additions and 1 deletions

View File

@ -531,7 +531,9 @@ func restPostUpgrade(w http.ResponseWriter, r *http.Request) {
return
}
restPostRestart(w, r)
flushResponse(`{"ok": "restarting"}`, w)
l.Infoln("Upgrading")
stop <- exitUpgrading
}
}

View File

@ -56,6 +56,7 @@ const (
exitError = 1
exitNoUpgradeAvailable = 2
exitRestarting = 3
exitUpgrading = 4
)
var l = logger.DefaultLogger

View File

@ -91,6 +91,18 @@ func monitorMain() {
if err == nil {
// Successfull exit indicates an intentional shutdown
return
} else if exiterr, ok := err.(*exec.ExitError); ok {
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
switch status.ExitStatus() {
case exitUpgrading:
// Restart the monitor process to release the .old
// binary as part of the upgrade process.
l.Infoln("Restarting monitor...")
os.Setenv("STNORESTART", "")
exec.Command(args[0], args[1:]...).Start()
return
}
}
}
}