Skip to content

Commit

Permalink
Fix for jaegertracing#5270 - return default probabilistic operation l…
Browse files Browse the repository at this point in the history
…evel strategies for ratelimiting service configurations

Signed-off-by: Kazimieras Pociunas <[email protected]>
  • Loading branch information
kuujis committed Mar 15, 2024
1 parent b990fe9 commit bce0053
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 7 deletions.
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
18 changes: 15 additions & 3 deletions plugin/sampling/strategystore/static/strategy_store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -470,12 +470,24 @@ func TestServiceNoPerOperationStrategies(t *testing.T) {

s, err := store.GetSamplingStrategy(context.Background(), "ServiceA")
require.NoError(t, err)
assert.Equal(t, 1.0, s.OperationSampling.DefaultSamplingProbability)
require.NotNil(t, s.OperationSampling)
os := s.OperationSampling
assert.EqualValues(t, 1, os.DefaultSamplingProbability)
require.Len(t, os.PerOperationStrategies, 1)
assert.Equal(t, "/health", os.PerOperationStrategies[0].Operation)
assert.EqualValues(t, 0.0, os.PerOperationStrategies[0].ProbabilisticSampling.SamplingRate)
expected := makeResponse(api_v2.SamplingStrategyType_PROBABILISTIC, 1.0)
assert.Equal(t, *expected.ProbabilisticSampling, *s.ProbabilisticSampling)

s, err = store.GetSamplingStrategy(context.Background(), "ServiceB")
require.NoError(t, err)

expected := makeResponse(api_v2.SamplingStrategyType_RATE_LIMITING, 3)
require.NotNil(t, s.OperationSampling)
os = s.OperationSampling
assert.EqualValues(t, 0.2, os.DefaultSamplingProbability)
require.Len(t, os.PerOperationStrategies, 1)
assert.Equal(t, "/health", os.PerOperationStrategies[0].Operation)
assert.EqualValues(t, 0.0, os.PerOperationStrategies[0].ProbabilisticSampling.SamplingRate)
expected = makeResponse(api_v2.SamplingStrategyType_RATE_LIMITING, 3)
assert.Equal(t, *expected.RateLimitingSampling, *s.RateLimitingSampling)
}

Expand Down

0 comments on commit bce0053

Please sign in to comment.