diff options
Diffstat (limited to 'weed/util/log_buffer/log_read.go')
| -rw-r--r-- | weed/util/log_buffer/log_read.go | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/weed/util/log_buffer/log_read.go b/weed/util/log_buffer/log_read.go index 950604022..0a2b8e89a 100644 --- a/weed/util/log_buffer/log_read.go +++ b/weed/util/log_buffer/log_read.go @@ -2,6 +2,7 @@ package log_buffer import ( "bytes" + "errors" "fmt" "time" @@ -77,6 +78,16 @@ func (logBuffer *LogBuffer) LoopProcessLogData(readerName string, startPosition time.Sleep(1127 * time.Millisecond) return lastReadPosition, isDone, ResumeFromDiskError } + if err != nil { + // Check for buffer corruption error + if errors.Is(err, ErrBufferCorrupted) { + glog.Errorf("%s: Buffer corruption detected: %v", readerName, err) + return lastReadPosition, true, fmt.Errorf("buffer corruption: %w", err) + } + // Other errors + glog.Errorf("%s: ReadFromBuffer error: %v", readerName, err) + return lastReadPosition, true, err + } readSize := 0 if bytesBuf != nil { readSize = bytesBuf.Len() @@ -212,6 +223,13 @@ func (logBuffer *LogBuffer) LoopProcessLogDataWithOffset(readerName string, star } bytesBuf, offset, err = logBuffer.ReadFromBuffer(lastReadPosition) glog.V(4).Infof("ReadFromBuffer for %s returned bytesBuf=%v, offset=%d, err=%v", readerName, bytesBuf != nil, offset, err) + + // Check for buffer corruption error before other error handling + if err != nil && errors.Is(err, ErrBufferCorrupted) { + glog.Errorf("%s: Buffer corruption detected: %v", readerName, err) + return lastReadPosition, true, fmt.Errorf("buffer corruption: %w", err) + } + if err == ResumeFromDiskError { // Try to read from disk if readFromDiskFn is available if logBuffer.ReadFromDiskFn != nil { |
