Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/agentctl/wal_iterator.go
4096 views
1
package agentctl
2
3
import (
4
"github.com/prometheus/prometheus/tsdb/record"
5
"github.com/prometheus/prometheus/tsdb/wlog"
6
)
7
8
// walIterate iterates over the latest checkpoint in the provided WAL and all
9
// of the segments in the WAL and calls f for each of them.
10
func walIterate(w *wlog.WL, f func(r *wlog.Reader) error) error {
11
checkpoint, checkpointIdx, err := wlog.LastCheckpoint(w.Dir())
12
if err != nil && err != record.ErrNotFound {
13
return err
14
}
15
16
startIdx, last, err := wlog.Segments(w.Dir())
17
if err != nil {
18
return err
19
}
20
21
if checkpoint != "" {
22
sr, err := wlog.NewSegmentsReader(checkpoint)
23
if err != nil {
24
return err
25
}
26
err = f(wlog.NewReader(sr))
27
_ = sr.Close()
28
if err != nil {
29
return err
30
}
31
32
startIdx = checkpointIdx + 1
33
}
34
35
for i := startIdx; i <= last; i++ {
36
s, err := wlog.OpenReadSegment(wlog.SegmentName(w.Dir(), i))
37
if err != nil {
38
return err
39
}
40
sr := wlog.NewSegmentBufReader(s)
41
err = f(wlog.NewReader(sr))
42
_ = sr.Close()
43
if err != nil {
44
return err
45
}
46
}
47
48
return nil
49
}
50
51