Skip to content

Commit bbdd985

Browse files
author
Andrii Soldatenko
committed
add option to filter amount of orgs
1 parent 6019c9b commit bbdd985

File tree

4 files changed

+14
-5
lines changed

4 files changed

+14
-5
lines changed

src/sentry/dynamic_sampling/prioritise_projects.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
Request,
1818
)
1919

20+
from sentry import options
2021
from sentry.dynamic_sampling.rules.utils import OrganizationId, ProjectId
2122
from sentry.sentry_metrics.indexer.strings import TRANSACTION_METRICS_NAMES
2223
from sentry.snuba.dataset import Dataset, EntityKey
@@ -35,6 +36,7 @@ def fetch_projects_with_total_volumes() -> Mapping[OrganizationId, Sequence[Tupl
3536
aggregated_projects = defaultdict(list)
3637
start_time = time.time()
3738
offset = 0
39+
sample_rate = int(options.get("dynamic-sampling.prioritise_projects.sample_rate") * 100)
3840
while (time.time() - start_time) < MAX_SECONDS:
3941
query = (
4042
Query(
@@ -46,6 +48,7 @@ def fetch_projects_with_total_volumes() -> Mapping[OrganizationId, Sequence[Tupl
4648
],
4749
groupby=[Column("org_id"), Column("project_id")],
4850
where=[
51+
Condition(Function("modulo", [Column("org_id"), 100]), Op.LT, sample_rate),
4952
Condition(Column("timestamp"), Op.GTE, datetime.utcnow() - timedelta(hours=6)),
5053
Condition(Column("timestamp"), Op.LT, datetime.utcnow()),
5154
Condition(

src/sentry/options/defaults.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,7 @@
606606
# System-wide options that observes latest releases on transactions and caches these values to be used later in
607607
# project config computation. This is temporary option to monitor the performance of this feature.
608608
register("dynamic-sampling:boost-latest-release", default=False)
609+
register("dynamic-sampling.prioritise_projects.sample_rate", default=0.0)
609610

610611
# Killswitch for deriving code mappings
611612
register("post_process.derive-code-mappings", default=True)

tests/sentry/dynamic_sampling/test_prioritise_projects.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ def test_simple_one_org_one_project(self):
3030
project_id=p1.id,
3131
org_id=org1.id,
3232
)
33-
34-
results = fetch_projects_with_total_volumes()
33+
with self.settings(
34+
SENTRY_OPTIONS={"dynamic-sampling.prioritise_projects.sample_rate": 1.0}
35+
):
36+
results = fetch_projects_with_total_volumes()
3537
assert results[org1.id] == [(p1.id, 1.0)]

tests/sentry/dynamic_sampling/test_tasks.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,12 @@ def test_prioritise_projects_simple(self, get_blended_sample_rate):
5858
proj_c = self.create_project_and_add_metrics("c", 3, test_org)
5959
proj_d = self.create_project_and_add_metrics("d", 1, test_org)
6060

61-
with self.feature({"organizations:ds-prioritise-by-project-bias": True}):
62-
with self.tasks():
63-
prioritise_projects()
61+
with self.settings(
62+
SENTRY_OPTIONS={"dynamic-sampling.prioritise_projects.sample_rate": 1.0}
63+
):
64+
with self.feature({"organizations:ds-prioritise-by-project-bias": True}):
65+
with self.tasks():
66+
prioritise_projects()
6467

6568
# we expect only uniform rule
6669
assert generate_rules(proj_a)[0]["samplingValue"] == {

0 commit comments

Comments
 (0)