Move stack dump dir to exec root

Dump stack dumps to exec root instead of daemon root.
When no path is provided to the stack dumper, such is the case with
SIGQUIT, dump to stderr.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: 0bd720b28dc7b416fe2193bdafaca011ec24d032
Component: engine
This commit is contained in:
Brian Goff
2016-11-16 12:55:18 -05:00
parent 41dd2ecf80
commit 594f65145f
2 changed files with 18 additions and 8 deletions
+5 -1
View File
@@ -693,7 +693,11 @@ func NewDaemon(config *Config, registryService registry.Service, containerdRemot
// set up SIGUSR1 handler on Unix-like systems, or a Win32 global event
// on Windows to dump Go routine stacks
d.setupDumpStackTrap(config.Root)
stackDumpDir := config.Root
if execRoot := config.GetExecRoot(); execRoot != "" {
stackDumpDir = execRoot
}
d.setupDumpStackTrap(stackDumpDir)
return d, nil
}
+13 -7
View File
@@ -83,15 +83,21 @@ func DumpStacks(dir string) (string, error) {
bufferLen *= 2
}
buf = buf[:stackSize]
path := filepath.Join(dir, fmt.Sprintf(stacksLogNameTemplate, strings.Replace(time.Now().Format(time.RFC3339), ":", "", -1)))
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
return "", errors.Wrap(err, "failed to open file to write the goroutine stacks")
var f *os.File
if dir != "" {
path := filepath.Join(dir, fmt.Sprintf(stacksLogNameTemplate, strings.Replace(time.Now().Format(time.RFC3339), ":", "", -1)))
var err error
f, err = os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
return "", errors.Wrap(err, "failed to open file to write the goroutine stacks")
}
defer f.Close()
defer f.Sync()
} else {
f = os.Stderr
}
defer f.Close()
if _, err := f.Write(buf); err != nil {
return "", errors.Wrap(err, "failed to write goroutine stacks")
}
f.Sync()
return path, nil
return f.Name(), nil
}