Quellcode durchsuchen

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

fix a race in json logger reader
Alexander Morozov vor 9 Jahren
Ursprung
Commit
ed6e3cf704
1 geänderte Dateien mit 11 neuen und 0 gelöschten Zeilen
  1. 11 0
      daemon/logger/jsonfilelog/jsonfilelog.go

+ 11 - 0
daemon/logger/jsonfilelog/jsonfilelog.go

@@ -357,6 +357,17 @@ func followLogs(f *os.File, logWatcher *logger.LogWatcher, notifyRotate chan int
 					retries++
 					retries++
 					continue
 					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
 				logWatcher.Err <- err
 				return
 				return
 			}
 			}