From 5a7d398d19ebc7e2d8ac8a975b2d319fbf13a314 Mon Sep 17 00:00:00 2001 From: gastonqiu <42923070+gastonqiu@users.noreply.github.com> Date: Fri, 14 Aug 2020 02:01:21 +0800 Subject: [PATCH] Chore: Log segment number when segment read failed (#7687) * Chore: Log segment number when segment read failed To manually fix the WAL files, it is good to know where the corrupt happened so we should log the segment number when the read failed. Related Issue #7506 Signed-off-by: gaston.qiu --- tsdb/wal/watcher.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tsdb/wal/watcher.go b/tsdb/wal/watcher.go index abd7bdc77e..27a2739b76 100644 --- a/tsdb/wal/watcher.go +++ b/tsdb/wal/watcher.go @@ -391,7 +391,7 @@ func (w *Watcher) watch(segmentNum int, tail bool) error { // Ignore errors reading to end of segment whilst replaying the WAL. if !tail { - if err != nil && err != io.EOF { + if err != nil && errors.Cause(err) != io.EOF { level.Warn(w.logger).Log("msg", "Ignoring error reading to end of segment, may have dropped data", "err", err) } else if reader.Offset() != size { level.Warn(w.logger).Log("msg", "Expected to have read whole segment, may have dropped data", "segment", segmentNum, "read", reader.Offset(), "size", size) @@ -400,7 +400,7 @@ func (w *Watcher) watch(segmentNum int, tail bool) error { } // Otherwise, when we are tailing, non-EOFs are fatal. - if err != io.EOF { + if errors.Cause(err) != io.EOF { return err } @@ -411,7 +411,7 @@ func (w *Watcher) watch(segmentNum int, tail bool) error { // Ignore all errors reading to end of segment whilst replaying the WAL. if !tail { - if err != nil && err != io.EOF { + if err != nil && errors.Cause(err) != io.EOF { level.Warn(w.logger).Log("msg", "Ignoring error reading to end of segment, may have dropped data", "segment", segmentNum, "err", err) } else if reader.Offset() != size { level.Warn(w.logger).Log("msg", "Expected to have read whole segment, may have dropped data", "segment", segmentNum, "read", reader.Offset(), "size", size) @@ -420,7 +420,7 @@ func (w *Watcher) watch(segmentNum int, tail bool) error { } // Otherwise, when we are tailing, non-EOFs are fatal. - if err != io.EOF { + if errors.Cause(err) != io.EOF { return err } } @@ -516,7 +516,7 @@ func (w *Watcher) readSegment(r *LiveReader, segmentNum int, tail bool) error { return errors.New("unknown TSDB record type") } } - return r.Err() + return errors.Wrapf(r.Err(), "segment %d: %v", segmentNum, r.Err()) } func (w *Watcher) SetStartTime(t time.Time) { @@ -565,7 +565,7 @@ func (w *Watcher) readCheckpoint(checkpointDir string) error { defer sr.Close() r := NewLiveReader(w.logger, w.readerMetrics, sr) - if err := w.readSegment(r, index, false); err != io.EOF && err != nil { + if err := w.readSegment(r, index, false); errors.Cause(err) != io.EOF && err != nil { return errors.Wrap(err, "readSegment") }