MCPcopy
hub / github.com/grafana/tempo / ensureStableKey

Function ensureStableKey

pkg/usagestats/reporter.go:137–170  ·  view source on GitHub ↗

ensureStableKey ensures that the cluster seed is stable for at least 30seconds. This is required when using gossiping kv client like memberlist which will never have the same seed but will converge eventually.

(ctx context.Context, kvClient kv.Client, logger log.Logger)

Source from the content-addressed store, hash-verified

135// This is required when using gossiping kv client like memberlist which will never have the same seed
136// but will converge eventually.
137func ensureStableKey(ctx context.Context, kvClient kv.Client, logger log.Logger) *ClusterSeed {
138 var (
139 previous *ClusterSeed
140 stableCount int
141 )
142 for {
143 select {
144 case <-time.After(stabilityCheckInterval):
145 case <-ctx.Done():
146 return nil
147 }
148
149 value, err := kvClient.Get(ctx, seedKey)
150 if err != nil {
151 level.Debug(logger).Log("msg", "failed to get cluster seed key for stability check", "err", err)
152 continue
153 }
154 if seed, ok := value.(*ClusterSeed); ok && seed != nil {
155 if previous == nil {
156 previous = seed
157 continue
158 }
159 if previous.UID != seed.UID {
160 previous = seed
161 stableCount = 0
162 continue
163 }
164 stableCount++
165 if stableCount > stabilityMinimumRequired {
166 return seed
167 }
168 }
169 }
170}
171
172func (rep *Reporter) init(ctx context.Context) {
173 ctx, span := tracer.Start(ctx, "UsageReporter.init")

Callers 1

initLeaderMethod · 0.85

Calls 3

DoneMethod · 0.65
GetMethod · 0.65
LogMethod · 0.65

Tested by

no test coverage detected