Ver Fonte

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>
Brian Goff há 8 anos atrás
pai
commit
0bd720b28d
2 ficheiros alterados com 18 adições e 8 exclusões
  1. 5 1
      daemon/daemon.go
  2. 13 7
      pkg/signal/trap.go

+ 5 - 1
daemon/daemon.go

@@ -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
 	// set up SIGUSR1 handler on Unix-like systems, or a Win32 global event
 	// on Windows to dump Go routine stacks
 	// 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
 	return d, nil
 }
 }

+ 13 - 7
pkg/signal/trap.go

@@ -83,15 +83,21 @@ func DumpStacks(dir string) (string, error) {
 		bufferLen *= 2
 		bufferLen *= 2
 	}
 	}
 	buf = buf[:stackSize]
 	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 {
 	if _, err := f.Write(buf); err != nil {
 		return "", errors.Wrap(err, "failed to write goroutine stacks")
 		return "", errors.Wrap(err, "failed to write goroutine stacks")
 	}
 	}
-	f.Sync()
-	return path, nil
+	return f.Name(), nil
 }
 }