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
This commit is contained in:
Sebastiaan van Stijn 2019-09-24 20:25:22 +02:00 committed by GitHub
commit cf298d3073
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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 {