Skip to content

Commit b1e7351

Browse files
committed
sort output of partition_by_measure after set operations
1 parent fa8c9cb commit b1e7351

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

src/sentry/dynamic_sampling/tasks/boost_low_volume_projects.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def partition_by_measure(
141141
metrics.incr(
142142
"dynamic_sampling.partition_by_measure.transactions", amount=len(filtered_org_ids)
143143
)
144-
return {SamplingMeasure.TRANSACTIONS: list(filtered_org_ids)}
144+
return {SamplingMeasure.TRANSACTIONS: sorted(filtered_org_ids)}
145145

146146
span_org_ids = set(options.get("dynamic-sampling.measure.spans") or [])
147147
span_org_ids = span_org_ids & filtered_org_ids
@@ -157,8 +157,8 @@ def partition_by_measure(
157157
"dynamic_sampling.partition_by_measure.transactions", amount=len(transactions_org_ids)
158158
)
159159
return {
160-
SamplingMeasure.SPANS: list(span_org_ids),
161-
SamplingMeasure.TRANSACTIONS: list(transactions_org_ids),
160+
SamplingMeasure.SPANS: sorted(span_org_ids),
161+
SamplingMeasure.TRANSACTIONS: sorted(transactions_org_ids),
162162
}
163163

164164

tests/sentry/dynamic_sampling/tasks/test_boost_low_volume_projects.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,3 +325,38 @@ def test_partition_by_measure_with_span_feature_flag_disabled(self) -> None:
325325
assert SamplingMeasure.TRANSACTIONS in result
326326
assert SamplingMeasure.SPANS not in result
327327
assert result[SamplingMeasure.TRANSACTIONS] == [org.id]
328+
329+
def test_partition_by_measure_returns_sorted_output_multiple_orgs(self) -> None:
330+
orgs = [self.create_organization(f"test-org{i}") for i in range(10)]
331+
org_ids = [org.id for org in reversed(orgs)]
332+
333+
with self.options(
334+
{
335+
"dynamic-sampling.check_span_feature_flag": True,
336+
"dynamic-sampling.measure.spans": [orgs[2].id, orgs[7].id, orgs[5].id],
337+
}
338+
):
339+
result = partition_by_measure(org_ids)
340+
341+
assert result[SamplingMeasure.SPANS] == sorted([orgs[2].id, orgs[7].id, orgs[5].id])
342+
expected_transaction_orgs = sorted(
343+
[org.id for org in orgs if org.id not in [orgs[2].id, orgs[7].id, orgs[5].id]]
344+
)
345+
assert result[SamplingMeasure.TRANSACTIONS] == expected_transaction_orgs
346+
347+
def test_partition_by_measure_returns_sorted_when_feature_disabled(self) -> None:
348+
org1 = self.create_organization("test-org1")
349+
org2 = self.create_organization("test-org2")
350+
org3 = self.create_organization("test-org3")
351+
352+
org_ids = [org3.id, org1.id, org2.id]
353+
354+
with self.options(
355+
{
356+
"dynamic-sampling.check_span_feature_flag": False,
357+
}
358+
):
359+
result = partition_by_measure(org_ids)
360+
361+
assert result[SamplingMeasure.TRANSACTIONS] == sorted(org_ids)
362+
assert SamplingMeasure.SPANS not in result

0 commit comments

Comments
 (0)