Explorar el Código

Merge pull request #378 from kolyshkin/19.03-backport-log-max-file-1-follow

[19.03 backport] logger: fix follow logs for max-file=1
Sebastiaan van Stijn hace 5 años
padre
commit
cf298d3073
Se han modificado 1 ficheros con 15 adiciones y 1 borrados
  1. 15 1
      daemon/logger/loggerutils/logfile.go

+ 15 - 1
daemon/logger/loggerutils/logfile.go

@@ -265,7 +265,7 @@ func compressFile(fileName string, lastTimestamp time.Time) {
 	compressWriter := gzip.NewWriter(outFile)
 	defer compressWriter.Close()
 
-	// Add the last log entry timestramp to the gzip header
+	// Add the last log entry timestamp to the gzip header
 	extra := rotateFileMetadata{}
 	extra.LastTime = lastTimestamp
 	compressWriter.Header.Extra, err = json.Marshal(&extra)
@@ -614,11 +614,25 @@ func followLogs(f *os.File, logWatcher *logger.LogWatcher, notifyRotate chan int
 		}
 	}
 
+	oldSize := int64(-1)
 	handleDecodeErr := func(err error) error {
 		if errors.Cause(err) != io.EOF {
 			return err
 		}
 
+		// Handle special case (#39235): max-file=1 and file was truncated
+		st, stErr := f.Stat()
+		if stErr == nil {
+			size := st.Size()
+			defer func() { oldSize = size }()
+			if size < oldSize { // truncated
+				f.Seek(0, 0)
+				return nil
+			}
+		} else {
+			logrus.WithError(stErr).Warn("logger: stat error")
+		}
+
 		for {
 			err := waitRead()
 			if err == nil {