Skip to content

Commit 2ea2be9

Browse files
authoredMay 10, 2020
Respect default sampling strategy at service level (#2230)
* Set default sampling for service which has no per-operation strategies Signed-off-by: defool <defool@foxmail.com> * Consider sampling type of ratelimiting Signed-off-by: defool <defool@foxmail.com>
1 parent 0378e5b commit 2ea2be9

File tree

3 files changed

+48
-3
lines changed

3 files changed

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

‎plugin/sampling/strategystore/static/strategy_store.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,16 @@ 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+
newStore.serviceStrategies[s.Service].ProbabilisticSampling == nil {
169+
continue
170+
}
171+
// Service has no per-operation strategies, so just reference the default settings and change default samplingRate.
172+
newOpS := *newStore.defaultStrategy.OperationSampling
173+
newOpS.DefaultSamplingProbability = newStore.serviceStrategies[s.Service].ProbabilisticSampling.SamplingRate
174+
newStore.serviceStrategies[s.Service].OperationSampling = &newOpS
169175
continue
170176
}
171-
172177
if merge {
173178
opS.PerOperationStrategies = mergePerOperationSamplingStrategies(
174179
opS.PerOperationStrategies,

‎plugin/sampling/strategystore/static/strategy_store_test.go

+15
Original file line numberDiff line numberDiff line change
@@ -321,3 +321,18 @@ 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, 1.0, s.OperationSampling.DefaultSamplingProbability)
332+
333+
s, err = store.GetSamplingStrategy("ServiceB")
334+
require.NoError(t, err)
335+
336+
expected := makeResponse(sampling.SamplingStrategyType_RATE_LIMITING, 3)
337+
assert.Equal(t, *expected.RateLimitingSampling, *s.RateLimitingSampling)
338+
}

0 commit comments

Comments
 (0)
Please sign in to comment.