7816: CopyReaderToLog renamed to ReadWriteLines. Use Writer instead of Logger
authorPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 19 Jan 2016 22:07:59 +0000 (17:07 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 19 Jan 2016 22:07:59 +0000 (17:07 -0500)
to avoid unnecessary copy.

services/crunch-run/crunchrun.go
services/crunch-run/logging.go

index fd91bc1e7182eff0fecbc33da93cd9994c50f3e7..640ac88ca9a0aa70c1cc305012ab3bb18962ae6e 100644 (file)
@@ -216,8 +216,8 @@ func (runner *ContainerRunner) AttachLogs() (err error) {
 
        runner.Stdout = NewThrottledLogger(runner.NewLogWriter("stdout"))
        runner.Stderr = NewThrottledLogger(runner.NewLogWriter("stderr"))
-       go CopyReaderToLog(stdoutReader, runner.Stdout.Logger, runner.loggingDone)
-       go CopyReaderToLog(stderrReader, runner.Stderr.Logger, runner.loggingDone)
+       go ReadWriteLines(stdoutReader, runner.Stdout, runner.loggingDone)
+       go ReadWriteLines(stderrReader, runner.Stderr, runner.loggingDone)
 
        return nil
 }
index 3860484747d62841704adce50987b10ca4fcf73e..9d97384109597d9b0e7e56ad96657c1171fafbf5 100644 (file)
@@ -21,7 +21,7 @@ type Timestamper func(t time.Time) string
 // ThrottledLogger.buf -> ThrottledLogger.flusher -> goWriter ->
 // ArvLogWriter.Write -> CollectionFileWriter.Write | Api.Create
 //
-// For stdout/stderr CopyReaderToLog additionally runs as a goroutine to pull
+// For stdout/stderr ReadWriteLines additionally runs as a goroutine to pull
 // data from the stdout/stderr Reader and send to the Logger.
 
 // ThrottledLogger accepts writes, prepends a timestamp to each line of the
@@ -116,9 +116,9 @@ const (
        MaxLogLine = 1 << 12
 )
 
-// CopyReaderToLog reads from a Reader and prints to a Logger, with long line
-// splitting.
-func CopyReaderToLog(in io.Reader, logger *log.Logger, done chan<- bool) {
+// ReadWriteLines reads lines from a reader and writes to a Writer, with long
+// line splitting.
+func ReadWriteLines(in io.Reader, writer io.Writer, done chan<- bool) {
        reader := bufio.NewReaderSize(in, MaxLogLine)
        var prefix string
        for {
@@ -126,13 +126,19 @@ func CopyReaderToLog(in io.Reader, logger *log.Logger, done chan<- bool) {
                if err == io.EOF {
                        break
                } else if err != nil {
-                       logger.Print("error reading container log:", err)
+                       writer.Write([]byte(fmt.Sprintln("error reading container log:", err)))
                }
                var suffix string
                if isPrefix {
-                       suffix = "[...]"
+                       suffix = "[...]\n"
                }
-               logger.Print(prefix, string(line), suffix)
+
+               if prefix == "" && suffix == "" {
+                       writer.Write(line)
+               } else {
+                       writer.Write([]byte(fmt.Sprint(prefix, string(line), suffix)))
+               }
+
                // Set up prefix for following line
                if isPrefix {
                        prefix = "[...]"