mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
46 lines
1.6 KiB
Python
Executable File
46 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
import click
|
|
|
|
from sentry.runner import configure
|
|
|
|
|
|
def validate_percentage(ctx, param, value):
|
|
if 1 <= value <= 100:
|
|
return value
|
|
raise click.BadParameter("percentage must be integer between 1 and 100")
|
|
|
|
|
|
@click.command()
|
|
@click.option(
|
|
"--percentage",
|
|
callback=validate_percentage,
|
|
default=100,
|
|
help="Percentage of orgs to invalidate. Only useful for testing this command.",
|
|
)
|
|
def invalidate_project_configs(percentage):
|
|
"""Gradually evict existing project configs from redis and recompute them.
|
|
|
|
This can be used to speed up incident recovery, for example when faulty project configs
|
|
that cannot be read by Relay have been written to redis.
|
|
|
|
NOTE: This will increase load on the relay_config_bulk Celery queue.
|
|
"""
|
|
configure()
|
|
from sentry.models.organization import Organization
|
|
from sentry.tasks.relay import schedule_invalidate_project_config
|
|
from sentry.utils.query import RangeQuerySetWrapperWithProgressBar
|
|
|
|
# NOTE: Instead of iterating over all projects, we could use redis.scan_iter()
|
|
# to evict only project configs that exist in redis.
|
|
queryset = Organization.objects.all().values_list("id", flat=True)
|
|
click.echo(f"Invalidating project configs for {percentage}% of orgs...")
|
|
for org_id in RangeQuerySetWrapperWithProgressBar(queryset, result_value_getter=lambda x: x):
|
|
if (org_id % 100) < percentage:
|
|
schedule_invalidate_project_config(
|
|
trigger="invalidate-all-orgs", organization_id=org_id, countdown=0
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
invalidate_project_configs()
|