github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/util/wal/reader.go (about) 1 package wal 2 3 import ( 4 "errors" 5 "io" 6 7 "github.com/prometheus/prometheus/tsdb/wal" 8 ) 9 10 // If startSegment is <0, it means all the segments. 11 func NewWalReader(dir string, startSegment int) (*wal.Reader, io.Closer, error) { 12 var ( 13 segmentReader io.ReadCloser 14 err error 15 ) 16 if startSegment < 0 { 17 segmentReader, err = wal.NewSegmentsReader(dir) 18 if err != nil { 19 return nil, nil, err 20 } 21 } else { 22 first, last, err := wal.Segments(dir) 23 if err != nil { 24 return nil, nil, err 25 } 26 if startSegment > last { 27 return nil, nil, errors.New("start segment is beyond the last WAL segment") 28 } 29 if first > startSegment { 30 startSegment = first 31 } 32 segmentReader, err = wal.NewSegmentsRangeReader(wal.SegmentRange{ 33 Dir: dir, 34 First: startSegment, 35 Last: -1, // Till the end. 36 }) 37 if err != nil { 38 return nil, nil, err 39 } 40 } 41 return wal.NewReader(segmentReader), segmentReader, nil 42 }