Skip to content

Commit 71fe86d

Browse files
authored
ref(relay): Disable cardinality limiter by default (#94154)
Still enabled by default in SaaS with this [PR](getsentry/sentry-options-automator#4278), but switches the default to disabled for self hosted. Fixes: getsentry/self-hosted#3772
1 parent 1ac6d3e commit 71fe86d

File tree

4 files changed

+17
-29
lines changed

4 files changed

+17
-29
lines changed

src/sentry/options/defaults.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,7 +1191,7 @@
11911191

11921192
# Killswitch for the Relay cardinality limiter, one of `enabled`, `disabled`, `passive`.
11931193
# In `passive` mode Relay's cardinality limiter is active but it does not enforce the limits.
1194-
register("relay.cardinality-limiter.mode", default="enabled", flags=FLAG_AUTOMATOR_MODIFIABLE)
1194+
register("relay.cardinality-limiter.mode", default="disabled", flags=FLAG_AUTOMATOR_MODIFIABLE)
11951195
# Override to set a list of limits into passive mode by organization.
11961196
#
11971197
# In passive mode Relay's cardinality limiter is active but it does not enforce the limits.
@@ -1206,7 +1206,7 @@
12061206
# Rate needs to be between `0.0` and `1.0`.
12071207
# If set to `1.0` all cardinality limiter rejections will be logged as a Sentry error.
12081208
register(
1209-
"relay.cardinality-limiter.error-sample-rate", default=0.01, flags=FLAG_AUTOMATOR_MODIFIABLE
1209+
"relay.cardinality-limiter.error-sample-rate", default=0.00, flags=FLAG_AUTOMATOR_MODIFIABLE
12101210
)
12111211
# List of additional cardinality limits and selectors.
12121212
#

src/sentry/relay/config/__init__.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,16 @@ class CardinalityLimitOption(TypedDict):
209209
def get_metrics_config(timeout: TimeChecker, project: Project) -> Mapping[str, Any] | None:
210210
metrics_config = {}
211211

212+
if cardinality_limits := get_cardinality_limits(timeout, project):
213+
metrics_config["cardinalityLimits"] = cardinality_limits
214+
215+
return metrics_config or None
216+
217+
218+
def get_cardinality_limits(timeout: TimeChecker, project: Project) -> list[CardinalityLimit] | None:
219+
if options.get("relay.cardinality-limiter.mode") == "disabled":
220+
return None
221+
212222
passive_limits = options.get("relay.cardinality-limiter.passive-limits-by-org").get(
213223
str(project.organization.id), []
214224
)
@@ -247,7 +257,7 @@ def get_metrics_config(timeout: TimeChecker, project: Project) -> Mapping[str, A
247257
"relay.cardinality-limiter.limits", []
248258
)
249259
option_limit_options: list[CardinalityLimitOption] = options.get(
250-
"relay.cardinality-limiter.limits", []
260+
"relay.cardinality-limiter.limits"
251261
)
252262

253263
for clo in project_limit_options + organization_limit_options + option_limit_options:
@@ -270,9 +280,7 @@ def get_metrics_config(timeout: TimeChecker, project: Project) -> Mapping[str, A
270280
except KeyError:
271281
pass
272282

273-
metrics_config["cardinalityLimits"] = cardinality_limits
274-
275-
return metrics_config or None
283+
return cardinality_limits
276284

277285

278286
def get_project_config(

tests/sentry/relay/snapshots/test_config/test_get_project_config/REGION.pysnap

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -156,29 +156,6 @@ config:
156156
groupingConfig:
157157
enhancements: KLUv_SAYwQAAkwKRs25ld3N0eWxlOjIwMjMtMDEtMTGQ#KLUv_SAYwQAAkwKRs25ld3N0eWxlOjIwMjMtMDEtMTGQ#KLUv_SAYwQAAkwKRs25ld3N0eWxlOjIwMjMtMDEtMTGQ
158158
id: newstyle:2023-01-11
159-
metrics:
160-
cardinalityLimits:
161-
- id: transactions
162-
limit: 10000
163-
namespace: transactions
164-
scope: organization
165-
window:
166-
granularitySeconds: 600
167-
windowSeconds: 3600
168-
- id: sessions
169-
limit: 10000
170-
namespace: sessions
171-
scope: organization
172-
window:
173-
granularitySeconds: 600
174-
windowSeconds: 3600
175-
- id: spans
176-
limit: 10000
177-
namespace: spans
178-
scope: organization
179-
window:
180-
granularitySeconds: 600
181-
windowSeconds: 3600
182159
performanceScore:
183160
profiles:
184161
- condition:

tests/sentry/relay/test_config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,6 +1006,7 @@ def test_mobile_performance_calculate_score(default_project):
10061006
@pytest.mark.parametrize("passive", [False, True])
10071007
def test_project_config_cardinality_limits(default_project, insta_snapshot, passive):
10081008
options: dict[Any, Any] = {
1009+
"relay.cardinality-limiter.mode": "enabled",
10091010
"sentry-metrics.cardinality-limiter.limits.transactions.per-org": [
10101011
{"window_seconds": 1000, "granularity_seconds": 100, "limit": 10}
10111012
],
@@ -1099,6 +1100,7 @@ def test_project_config_cardinality_limits(default_project, insta_snapshot, pass
10991100
@region_silo_test
11001101
def test_project_config_cardinality_limits_project_options_override_other_options(default_project):
11011102
options: dict[Any, Any] = {
1103+
"relay.cardinality-limiter.mode": "enabled",
11021104
"sentry-metrics.cardinality-limiter.limits.transactions.per-org": None,
11031105
"sentry-metrics.cardinality-limiter.limits.sessions.per-org": None,
11041106
"sentry-metrics.cardinality-limiter.limits.spans.per-org": None,
@@ -1166,6 +1168,7 @@ def test_project_config_cardinality_limits_project_options_override_other_option
11661168
@region_silo_test
11671169
def test_project_config_cardinality_limits_organization_options_override_options(default_project):
11681170
options: dict[Any, Any] = {
1171+
"relay.cardinality-limiter.mode": "enabled",
11691172
"sentry-metrics.cardinality-limiter.limits.transactions.per-org": None,
11701173
"sentry-metrics.cardinality-limiter.limits.sessions.per-org": None,
11711174
"sentry-metrics.cardinality-limiter.limits.spans.per-org": None,

0 commit comments

Comments
 (0)