From bce005383a56795c50cbfc8e8e9de6500265561e Mon Sep 17 00:00:00 2001 From: Kazimieras Pociunas Date: Fri, 15 Mar 2024 17:36:20 +0200 Subject: [PATCH] Fix for #5270 - return default probabilistic operation level strategies for ratelimiting service configurations Signed-off-by: Kazimieras Pociunas --- .../strategystore/static/strategy_store.go | 11 +++++++---- .../static/strategy_store_test.go | 18 +++++++++++++++--- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/plugin/sampling/strategystore/static/strategy_store.go b/plugin/sampling/strategystore/static/strategy_store.go index cf8544630e9..d7254c531cf 100644 --- a/plugin/sampling/strategystore/static/strategy_store.go +++ b/plugin/sampling/strategystore/static/strategy_store.go @@ -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 } diff --git a/plugin/sampling/strategystore/static/strategy_store_test.go b/plugin/sampling/strategystore/static/strategy_store_test.go index 063c28c7b81..bdf49516dbf 100644 --- a/plugin/sampling/strategystore/static/strategy_store_test.go +++ b/plugin/sampling/strategystore/static/strategy_store_test.go @@ -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) }