Skip to content

Commit e457add

Browse files
committed
Set default sampling for service which has no per-operation strategies
Signed-off-by: defool <[email protected]>
1 parent 16d7e09 commit e457add

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"service_strategies": [
3+
{
4+
"service": "ServiceA",
5+
"type": "probabilistic",
6+
"param": 1.0
7+
}
8+
],
9+
"default_strategy": {
10+
"type": "probabilistic",
11+
"param": 0.2,
12+
"operation_strategies": [
13+
{
14+
"operation": "/health",
15+
"type": "probabilistic",
16+
"param": 0.0
17+
}
18+
]
19+
}
20+
}

Diff for: plugin/sampling/strategystore/static/strategy_store.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,15 @@ func (h *strategyStore) parseStrategies(strategies *strategies) {
164164
// is not merged with and only used as a fallback).
165165
opS := newStore.serviceStrategies[s.Service].OperationSampling
166166
if opS == nil {
167-
// Service has no per-operation strategies, so just reference the default settings.
168-
newStore.serviceStrategies[s.Service].OperationSampling = newStore.defaultStrategy.OperationSampling
167+
if newStore.defaultStrategy.OperationSampling == nil {
168+
continue
169+
}
170+
// Service has no per-operation strategies, so just reference the default settings and change default samplingRate.
171+
newOpS := *newStore.defaultStrategy.OperationSampling
172+
newOpS.DefaultSamplingProbability = newStore.serviceStrategies[s.Service].ProbabilisticSampling.SamplingRate
173+
newStore.serviceStrategies[s.Service].OperationSampling = &newOpS
169174
continue
170175
}
171-
172176
if merge {
173177
opS.PerOperationStrategies = mergePerOperationSamplingStrategies(
174178
opS.PerOperationStrategies,

Diff for: plugin/sampling/strategystore/static/strategy_store_test.go

+13
Original file line numberDiff line numberDiff line change
@@ -321,3 +321,16 @@ func TestAutoUpdateStrategyErrors(t *testing.T) {
321321
assert.Equal(t, "blah", store.reloadSamplingStrategyFile(tempFile.Name(), "blah"))
322322
assert.Len(t, logs.FilterMessage("failed to update sampling strategies from file").All(), 1)
323323
}
324+
325+
func TestServiceNoPerOperationStrategies(t *testing.T) {
326+
store, err := NewStrategyStore(Options{StrategiesFile: "fixtures/service_no_per_operation.json"}, zap.NewNop())
327+
require.NoError(t, err)
328+
329+
s, err := store.GetSamplingStrategy("ServiceA")
330+
require.NoError(t, err)
331+
assert.Equal(t, s.OperationSampling.DefaultSamplingProbability, 1.0)
332+
333+
s, err = store.GetSamplingStrategy("ServiceB")
334+
require.NoError(t, err)
335+
assert.Equal(t, s.OperationSampling.DefaultSamplingProbability, 0.2)
336+
}

0 commit comments

Comments
 (0)