Skip to content

Commit b356c5a

Browse files
authored
perf(snuba): add orjson experiment (#68938)
1 parent df18dd8 commit b356c5a

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/sentry/options/defaults.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,8 @@
623623
flags=FLAG_PRIORITIZE_DISK | FLAG_AUTOMATOR_MODIFIABLE,
624624
)
625625

626+
register("snuba.snql.enable-orjson", default=0.0, flags=FLAG_AUTOMATOR_MODIFIABLE)
627+
626628
# Kafka Publisher
627629
register("kafka-publisher.raw-event-sample-rate", default=0.0, flags=FLAG_AUTOMATOR_MODIFIABLE)
628630
register("kafka-publisher.max-event-size", default=100000, flags=FLAG_AUTOMATOR_MODIFIABLE)

src/sentry/snuba/tasks.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
from datetime import timedelta
55
from typing import TYPE_CHECKING
66

7+
import orjson
78
import sentry_sdk
89
from django.utils import timezone
910

1011
from sentry import features
12+
from sentry.features.rollout import in_random_rollout
1113
from sentry.models.environment import Environment
1214
from sentry.search.events.types import ParamsType
1315
from sentry.snuba.dataset import Dataset, EntityKey
@@ -250,14 +252,23 @@ def _create_snql_in_snuba(subscription, snuba_query, snql_query, entity_subscrip
250252
)
251253

252254
entity_key = get_entity_key_from_request(snql_query)
255+
256+
if in_random_rollout("snuba.snql.enable-orjson"):
257+
post_body: str | bytes = orjson.dumps(body)
258+
else:
259+
post_body = json.dumps(body)
253260
response = _snuba_pool.urlopen(
254261
"POST",
255262
f"/{snuba_query.dataset}/{entity_key.value}/subscriptions",
256-
body=json.dumps(body),
263+
body=post_body,
257264
)
258265
if response.status != 202:
259266
metrics.incr("snuba.snql.subscription.http.error", tags={"dataset": snuba_query.dataset})
260267
raise SnubaError("HTTP %s response from Snuba!" % response.status)
268+
269+
if in_random_rollout("snuba.snql.enable-orjson"):
270+
with sentry_sdk.start_span(op="sentry.utils.json.loads"):
271+
return orjson.loads(response.data)["subscription_id"]
261272
return json.loads(response.data)["subscription_id"]
262273

263274

0 commit comments

Comments
 (0)