Skip to content

Commit c696959

Browse files
authored
ref(dynamic-sampling): simplify bias combination logic (#104119)
1 parent 48cc7b3 commit c696959

File tree

6 files changed

+23
-75
lines changed

6 files changed

+23
-75
lines changed

src/sentry/dynamic_sampling/rules/base.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import logging
2-
from collections import OrderedDict
32
from datetime import datetime, timedelta, timezone
43

54
import sentry_sdk
@@ -8,7 +7,7 @@
87
from sentry.constants import TARGET_SAMPLE_RATE_DEFAULT
98
from sentry.db.models import Model
109
from sentry.dynamic_sampling.rules.biases.base import Bias
11-
from sentry.dynamic_sampling.rules.combine import get_relay_biases_combinator
10+
from sentry.dynamic_sampling.rules.combine import get_relay_biases
1211
from sentry.dynamic_sampling.rules.utils import PolymorphicRule, RuleType, get_enabled_user_biases
1312
from sentry.dynamic_sampling.tasks.helpers.boost_low_volume_projects import (
1413
get_boost_low_volume_projects_sample_rate,
@@ -94,7 +93,7 @@ def _get_rules_of_enabled_biases(
9493
project: Project,
9594
base_sample_rate: float,
9695
enabled_biases: set[str],
97-
combined_biases: OrderedDict[RuleType, Bias],
96+
combined_biases: dict[RuleType, Bias],
9897
) -> list[PolymorphicRule]:
9998
rules = []
10099

@@ -124,7 +123,7 @@ def generate_rules(project: Project) -> list[PolymorphicRule]:
124123
enabled_user_biases = get_enabled_user_biases(
125124
project.get_option("sentry:dynamic_sampling_biases", None)
126125
)
127-
combined_biases = get_relay_biases_combinator(organization).get_combined_biases()
126+
combined_biases = get_relay_biases(organization)
128127

129128
rules = _get_rules_of_enabled_biases(
130129
project, base_sample_rate, enabled_user_biases, combined_biases
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from collections.abc import Callable
2+
3+
from sentry.dynamic_sampling.rules.biases.base import Bias
4+
from sentry.dynamic_sampling.rules.utils import RuleType
5+
6+
7+
class OrderedBiasesCombinator:
8+
def __init__(self) -> None:
9+
self.biases: dict[RuleType, Bias] = {}
10+
11+
def add_if(self, rule_type: RuleType, bias: Bias, block: Callable[[], bool]) -> None:
12+
if block():
13+
self.add(rule_type, bias)
14+
15+
def add(self, rule_type: RuleType, bias: Bias) -> None:
16+
self.biases[rule_type] = bias

src/sentry/dynamic_sampling/rules/combinators/__init__.py

Whitespace-only changes.

src/sentry/dynamic_sampling/rules/combinators/base.py

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/sentry/dynamic_sampling/rules/combinators/ordered_combinator.py

Lines changed: 0 additions & 22 deletions
This file was deleted.

src/sentry/dynamic_sampling/rules/combine.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from sentry import features
2+
from sentry.dynamic_sampling.rules.biases.base import Bias
3+
from sentry.dynamic_sampling.rules.biases.bias_combinator import OrderedBiasesCombinator
24
from sentry.dynamic_sampling.rules.biases.boost_environments_bias import BoostEnvironmentsBias
35
from sentry.dynamic_sampling.rules.biases.boost_latest_releases_bias import BoostLatestReleasesBias
46
from sentry.dynamic_sampling.rules.biases.boost_low_volume_projects_bias import (
@@ -15,13 +17,11 @@
1517
)
1618
from sentry.dynamic_sampling.rules.biases.minimum_sample_rate_bias import MinimumSampleRateBias
1719
from sentry.dynamic_sampling.rules.biases.recalibration_bias import RecalibrationBias
18-
from sentry.dynamic_sampling.rules.combinators.base import BiasesCombinator
19-
from sentry.dynamic_sampling.rules.combinators.ordered_combinator import OrderedBiasesCombinator
2020
from sentry.dynamic_sampling.rules.utils import RuleType
2121
from sentry.models.organization import Organization
2222

2323

24-
def get_relay_biases_combinator(organization: Organization) -> BiasesCombinator:
24+
def get_relay_biases(organization: Organization) -> dict[RuleType, Bias]:
2525
is_health_checks_trace_based = features.has(
2626
"organizations:ds-health-checks-trace-based", organization, actor=None
2727
)
@@ -55,4 +55,4 @@ def get_relay_biases_combinator(organization: Organization) -> BiasesCombinator:
5555
)
5656
default_combinator.add(RuleType.BOOST_LOW_VOLUME_PROJECTS_RULE, BoostLowVolumeProjectsBias())
5757

58-
return default_combinator
58+
return default_combinator.biases

0 commit comments

Comments
 (0)