Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
kuujis committed Mar 11, 2024
1 parent 88ec243 commit 07f6f76
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 4 deletions.
53 changes: 53 additions & 0 deletions plugin/sampling/strategystore/static/fixtures/5504_strategies.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"default_strategy": {
"type": "probabilistic",
"param": 0.2,
"operation_strategies": [
{
"operation": "metrics",
"type": "probabilistic",
"param": 0.1
}
]
},
"service_strategies": [
{
"service": "foobar",
"type": "ratelimiting",
"param": 2
}
]
}

// func Test5504SamplingStrategies(t *testing.T) {
// logger, _ := testutils.NewLogger()
// store, err := NewStrategyStore(Options{StrategiesFile: "fixtures/5504_strategies.json"}, logger)
// require.NoError(t, err)

// expected := makeResponse(api_v2.SamplingStrategyType_RATE_LIMITING, 2)

// s, err := store.GetSamplingStrategy(context.Background(), "foobar")
// require.NoError(t, err)
// assert.Equal(t, api_v2.SamplingStrategyType_RATE_LIMITING, s.StrategyType)
// assert.Equal(t, *expected.RateLimitingSampling, *s.RateLimitingSampling)

// require.NotNil(t, s.OperationSampling)
// os := s.OperationSampling
// assert.EqualValues(t, 0.8, os.DefaultSamplingProbability)
// require.Len(t, os.PerOperationStrategies, 1)

// expected = makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 0.2)

// d, err := store.GetSamplingStrategy(context.Background(), "default_service")
// require.NoError(t, err)
// assert.Equal(t, api_v2.SamplingStrategyType_PROBABILISTIC, d.StrategyType)
// assert.Equal(t, *expected.ProbabilisticSampling, *d.ProbabilisticSampling)

// require.NotNil(t, s.OperationSampling)
// os = s.OperationSampling
// assert.EqualValues(t, 0.8, os.DefaultSamplingProbability)
// require.Len(t, os.PerOperationStrategies, 1)

// assert.Equal(t, "metrics", os.PerOperationStrategies[0].Operation)
// assert.EqualValues(t, 0.1, os.PerOperationStrategies[0].ProbabilisticSampling.SamplingRate)
// }
11 changes: 7 additions & 4 deletions plugin/sampling/strategystore/static/strategy_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,13 +229,16 @@ func (h *strategyStore) parseStrategies(strategies *strategies) {
// is not merged with and only used as a fallback).
opS := newStore.serviceStrategies[s.Service].OperationSampling
if opS == nil {
if newStore.defaultStrategy.OperationSampling == nil ||
newStore.serviceStrategies[s.Service].ProbabilisticSampling == nil {
// no default per-operation strategies - just move on
if newStore.defaultStrategy.OperationSampling == nil {
continue
}
// Service has no per-operation strategies, so just reference the default settings and change default samplingRate.
// Service has no per-operation strategies, so just reference the default settings
// and change default samplingRate to the value defined in service strategy if value is available.
newOpS := *newStore.defaultStrategy.OperationSampling
newOpS.DefaultSamplingProbability = newStore.serviceStrategies[s.Service].ProbabilisticSampling.SamplingRate
if newStore.serviceStrategies[s.Service].ProbabilisticSampling != nil {
newOpS.DefaultSamplingProbability = newStore.serviceStrategies[s.Service].ProbabilisticSampling.SamplingRate
}
newStore.serviceStrategies[s.Service].OperationSampling = &newOpS
continue
}
Expand Down
3 changes: 3 additions & 0 deletions plugin/sampling/strategystore/static/strategy_store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -471,9 +471,12 @@ func TestServiceNoPerOperationStrategies(t *testing.T) {
s, err := store.GetSamplingStrategy(context.Background(), "ServiceA")
require.NoError(t, err)
assert.Equal(t, 1.0, s.OperationSampling.DefaultSamplingProbability)
assert.Len(t, s.OperationSampling.PerOperationStrategies, 1)

s, err = store.GetSamplingStrategy(context.Background(), "ServiceB")
require.NoError(t, err)
assert.Equal(t, 0.2, s.OperationSampling.DefaultSamplingProbability)
assert.Len(t, s.OperationSampling.PerOperationStrategies, 1)

expected := makeResponse(api_v2.SamplingStrategyType_RATE_LIMITING, 3)
assert.Equal(t, *expected.RateLimitingSampling, *s.RateLimitingSampling)
Expand Down

0 comments on commit 07f6f76

Please sign in to comment.