Merge pull request #17537 from mountkin/fix-logger-race

fix a race in json logger reader
This commit is contained in:
Alexander Morozov 2015-10-30 23:00:17 -07:00
Родитель f87082f08e e41eae8b42
Коммит ed6e3cf704
1 изменённых файлов: 11 добавлений и 0 удалений

Просмотреть файл

@ -357,6 +357,17 @@ func followLogs(f *os.File, logWatcher *logger.LogWatcher, notifyRotate chan int
retries++
continue
}
// io.ErrUnexpectedEOF is returned from json.Decoder when there is
// remaining data in the parser's buffer while an io.EOF occurs.
// If the json logger writes a partial json log entry to the disk
// while at the same time the decoder tries to decode it, the race codition happens.
if err == io.ErrUnexpectedEOF && retries <= maxJSONDecodeRetry {
reader := io.MultiReader(dec.Buffered(), f)
dec = json.NewDecoder(reader)
retries++
continue
}
logWatcher.Err <- err
return
}