11package metastore
22
33import (
4+ "context"
5+
46 "github.com/go-kit/log"
57 "github.com/go-kit/log/level"
68 "github.com/hashicorp/raft"
9+ "github.com/opentracing/opentracing-go/ext"
710 "go.etcd.io/bbolt"
811
912 metastorev1 "github.com/grafana/pyroscope/api/gen/proto/go/metastore/v1"
1013 "github.com/grafana/pyroscope/api/gen/proto/go/metastore/v1/raft_log"
1114 "github.com/grafana/pyroscope/pkg/metastore/compaction"
15+ "github.com/grafana/pyroscope/pkg/metastore/tracing"
1216)
1317
1418type IndexReplacer interface {
@@ -43,8 +47,20 @@ func NewCompactionCommandHandler(
4347}
4448
4549func (h * CompactionCommandHandler ) GetCompactionPlanUpdate (
46- tx * bbolt.Tx , cmd * raft.Log , req * raft_log.GetCompactionPlanUpdateRequest ,
47- ) (* raft_log.GetCompactionPlanUpdateResponse , error ) {
50+ ctx context.Context , tx * bbolt.Tx , cmd * raft.Log , req * raft_log.GetCompactionPlanUpdateRequest ,
51+ ) (resp * raft_log.GetCompactionPlanUpdateResponse , err error ) {
52+ span , _ := tracing .StartSpanFromContext (ctx , "raft.GetCompactionPlanUpdate" )
53+ span .SetTag ("status_updates" , len (req .StatusUpdates ))
54+ span .SetTag ("assign_jobs_max" , req .AssignJobsMax )
55+ span .SetTag ("raft_log_index" , cmd .Index )
56+ span .SetTag ("raft_log_term" , cmd .Term )
57+ defer func () {
58+ if err != nil {
59+ ext .LogError (span , err )
60+ }
61+ span .Finish ()
62+ }()
63+
4864 // We need to generate a plan of the update caused by the new status
4965 // report from the worker. The plan will be used to update the schedule
5066 // after the Raft consensus is reached.
@@ -132,12 +148,26 @@ func (h *CompactionCommandHandler) GetCompactionPlanUpdate(
132148 })
133149 }
134150
151+ span .SetTag ("assigned_jobs" , len (p .AssignedJobs ))
152+ span .SetTag ("new_jobs" , len (p .NewJobs ))
153+ span .SetTag ("evicted_jobs" , len (p .EvictedJobs ))
135154 return & raft_log.GetCompactionPlanUpdateResponse {Term : cmd .Term , PlanUpdate : p }, nil
136155}
137156
138157func (h * CompactionCommandHandler ) UpdateCompactionPlan (
139- tx * bbolt.Tx , cmd * raft.Log , req * raft_log.UpdateCompactionPlanRequest ,
140- ) (* raft_log.UpdateCompactionPlanResponse , error ) {
158+ ctx context.Context , tx * bbolt.Tx , cmd * raft.Log , req * raft_log.UpdateCompactionPlanRequest ,
159+ ) (resp * raft_log.UpdateCompactionPlanResponse , err error ) {
160+ span , _ := tracing .StartSpanFromContext (ctx , "raft.UpdateCompactionPlan" )
161+ span .SetTag ("raft_log_index" , cmd .Index )
162+ span .SetTag ("raft_log_term" , cmd .Term )
163+ span .SetTag ("request_term" , req .Term )
164+ defer func () {
165+ if err != nil {
166+ ext .LogError (span , err )
167+ }
168+ span .Finish ()
169+ }()
170+
141171 if req .Term != cmd .Term || req .GetPlanUpdate () == nil {
142172 level .Warn (h .logger ).Log (
143173 "msg" , "rejecting compaction plan update; term mismatch: leader has changed" ,
@@ -147,18 +177,18 @@ func (h *CompactionCommandHandler) UpdateCompactionPlan(
147177 return new (raft_log.UpdateCompactionPlanResponse ), nil
148178 }
149179
150- if err : = h .planner .UpdatePlan (tx , req .PlanUpdate ); err != nil {
180+ if err = h .planner .UpdatePlan (tx , req .PlanUpdate ); err != nil {
151181 level .Error (h .logger ).Log ("msg" , "failed to update compaction planner" , "err" , err )
152182 return nil , err
153183 }
154184
155- if err : = h .scheduler .UpdateSchedule (tx , req .PlanUpdate ); err != nil {
185+ if err = h .scheduler .UpdateSchedule (tx , req .PlanUpdate ); err != nil {
156186 level .Error (h .logger ).Log ("msg" , "failed to update compaction schedule" , "err" , err )
157187 return nil , err
158188 }
159189
160190 for _ , job := range req .PlanUpdate .NewJobs {
161- if err : = h .tombstones .DeleteTombstones (tx , cmd , job .Plan .Tombstones ... ); err != nil {
191+ if err = h .tombstones .DeleteTombstones (tx , cmd , job .Plan .Tombstones ... ); err != nil {
162192 level .Error (h .logger ).Log ("msg" , "failed to delete tombstones" , "err" , err )
163193 return nil , err
164194 }
@@ -170,22 +200,25 @@ func (h *CompactionCommandHandler) UpdateCompactionPlan(
170200 level .Warn (h .logger ).Log ("msg" , "compacted blocks are missing; skipping" , "job" , job .State .Name )
171201 continue
172202 }
173- if err : = h .tombstones .AddTombstones (tx , cmd , blockTombstonesForCompletedJob (job )); err != nil {
203+ if err = h .tombstones .AddTombstones (tx , cmd , blockTombstonesForCompletedJob (job )); err != nil {
174204 level .Error (h .logger ).Log ("msg" , "failed to add tombstones" , "err" , err )
175205 return nil , err
176206 }
177207 for _ , block := range compacted .NewBlocks {
178- if err : = h .compactor .Compact (tx , compaction .NewBlockEntry (cmd , block )); err != nil {
208+ if err = h .compactor .Compact (tx , compaction .NewBlockEntry (cmd , block )); err != nil {
179209 level .Error (h .logger ).Log ("msg" , "failed to compact block" , "err" , err )
180210 return nil , err
181211 }
182212 }
183- if err : = h .index .ReplaceBlocks (tx , compacted ); err != nil {
213+ if err = h .index .ReplaceBlocks (tx , compacted ); err != nil {
184214 level .Error (h .logger ).Log ("msg" , "failed to replace blocks" , "err" , err )
185215 return nil , err
186216 }
187217 }
188218
219+ span .SetTag ("new_jobs" , len (req .PlanUpdate .NewJobs ))
220+ span .SetTag ("completed_jobs" , len (req .PlanUpdate .CompletedJobs ))
221+ span .SetTag ("updated_jobs" , len (req .PlanUpdate .UpdatedJobs ))
189222 return & raft_log.UpdateCompactionPlanResponse {PlanUpdate : req .PlanUpdate }, nil
190223}
191224
0 commit comments