Skip to content

Commit bda4505

Browse files
Revert "ref(redis): Do not use redis-blaster for snowflake IDs generation (#103967)"
This reverts commit 278ba81. Co-authored-by: markstory <[email protected]>
1 parent 4121329 commit bda4505

File tree

3 files changed

+10
-19
lines changed

3 files changed

+10
-19
lines changed

src/sentry/conf/server.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,6 @@ def env(
195195
SENTRY_HYBRIDCLOUD_DELETIONS_REDIS_CLUSTER = "default"
196196
SENTRY_SESSION_STORE_REDIS_CLUSTER = "default"
197197
SENTRY_AUTH_IDPMIGRATION_REDIS_CLUSTER = "default"
198-
SENTRY_SNOWFLAKE_REDIS_CLUSTER = "default"
199198

200199
# Hosts that are allowed to use system token authentication.
201200
# http://en.wikipedia.org/wiki/Reserved_IP_addresses

src/sentry/utils/snowflake.py

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@
88
from django.conf import settings
99
from django.db import IntegrityError, router, transaction
1010
from django.db.models import Model
11+
from redis.client import StrictRedis
1112
from rest_framework import status
1213
from rest_framework.exceptions import APIException
13-
from sentry_redis_tools.clients import RedisCluster, StrictRedis
1414

1515
from sentry.db.postgres.transactions import enforce_constraints
1616
from sentry.types.region import RegionContextError, get_local_region
17-
from sentry.utils import redis
1817

1918
if TYPE_CHECKING:
2019
from sentry.db.models.base import Model as BaseModel
@@ -140,16 +139,14 @@ def generate_snowflake_id(redis_key: str) -> int:
140139
return snowflake_id
141140

142141

143-
def get_redis_cluster() -> RedisCluster[str] | StrictRedis[str]:
144-
return redis.redis_clusters.get(settings.SENTRY_SNOWFLAKE_REDIS_CLUSTER)
142+
def get_redis_cluster(redis_key: str) -> StrictRedis[str]:
143+
from sentry.utils import redis
145144

146-
147-
def get_timestamp_redis_key(redis_key: str, timestamp: int) -> str:
148-
return f"snowflakeid:{redis_key}:{str(timestamp)}"
145+
return redis.clusters.get("default").get_local_client_for_key(redis_key)
149146

150147

151148
def get_sequence_value_from_redis(redis_key: str, starting_timestamp: int) -> tuple[int, int]:
152-
cluster = get_redis_cluster()
149+
cluster = get_redis_cluster(redis_key)
153150

154151
# this is the amount we want to lookback for previous timestamps
155152
# the below is more of a safety net if starting_timestamp is ever
@@ -159,16 +156,14 @@ def get_sequence_value_from_redis(redis_key: str, starting_timestamp: int) -> tu
159156
for i in range(time_range):
160157
timestamp = starting_timestamp - i
161158

162-
timestamp_redis_key = get_timestamp_redis_key(redis_key, timestamp)
163-
164159
# We are decreasing the value by 1 each time since the incr operation in redis
165160
# initializes the counter at 1. For our region sequences, we want the value to
166161
# be from 0-15 and not 1-16
167-
sequence_value = cluster.incr(timestamp_redis_key)
162+
sequence_value = cluster.incr(str(timestamp))
168163
sequence_value -= 1
169164

170165
if sequence_value == 0:
171-
cluster.expire(timestamp_redis_key, int(_TTL.total_seconds()))
166+
cluster.expire(str(timestamp), int(_TTL.total_seconds()))
172167

173168
if sequence_value < MAX_AVAILABLE_REGION_SEQUENCES:
174169
return timestamp, sequence_value

tests/sentry/utils/test_snowflake.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
SnowflakeBitSegment,
2121
generate_snowflake_id,
2222
get_redis_cluster,
23-
get_timestamp_redis_key,
2423
uses_snowflake_id,
2524
)
2625

@@ -65,16 +64,14 @@ def test_generate_correct_ids_with_region_sequence(self) -> None:
6564

6665
@freeze_time(CURRENT_TIME)
6766
def test_out_of_region_sequences(self) -> None:
68-
cluster = get_redis_cluster()
67+
cluster = get_redis_cluster("test_redis_key")
6968
current_timestamp = int(datetime.now().timestamp() - settings.SENTRY_SNOWFLAKE_EPOCH_START)
70-
redis_key = "test_redis_key"
71-
7269
for i in range(int(_TTL.total_seconds())):
7370
timestamp = current_timestamp - i
74-
cluster.set(get_timestamp_redis_key(redis_key, timestamp), 16)
71+
cluster.set(str(timestamp), 16)
7572

7673
with pytest.raises(Exception) as context:
77-
generate_snowflake_id(redis_key)
74+
generate_snowflake_id("test_redis_key")
7875

7976
assert str(context.value) == "No available ID"
8077

0 commit comments

Comments
 (0)