From 67c492a1fa39ccd379facec84a48dc8a70ab6b00 Mon Sep 17 00:00:00 2001 From: Joshua Li Date: Thu, 20 Nov 2025 15:59:06 -0800 Subject: [PATCH 1/2] feat: migrations should noop faster --- src/sentry/runner/commands/upgrade.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/sentry/runner/commands/upgrade.py b/src/sentry/runner/commands/upgrade.py index a4f550382da291..6239b99c6f3b74 100644 --- a/src/sentry/runner/commands/upgrade.py +++ b/src/sentry/runner/commands/upgrade.py @@ -3,6 +3,7 @@ from django.db import connections from django.db.utils import ProgrammingError +from sentry.new_migrations.monkey.executor import SentryMigrationExecutor from sentry.runner.decorators import configuration from sentry.signals import post_upgrade from sentry.silo.base import SiloMode @@ -64,10 +65,24 @@ def _upgrade( _check_big_ints() _check_history() + no_migrations_to_run = True + for db_conn in settings.DATABASES.keys(): # Run migrations on all non-read replica connections. # This is used for sentry.io as our production database runs on multiple hosts. if not settings.DATABASES[db_conn].get("REPLICA_OF", False): + # We want the noop case to be quickly skipped. + click.echo(f"Checking for migrations to run for {db_conn}") + conn = connections[db_conn] + executor = SentryMigrationExecutor(conn) + targets = executor.loader.graph.leaf_nodes() + plan = executor.migration_plan(targets) + if not plan: + click.echo(f"No migrations to run for {db_conn}") + continue + + no_migrations_to_run = False + click.echo(f"Running migrations for {db_conn}") dj_call_command( "migrate", @@ -97,7 +112,7 @@ def _upgrade( call_command("sentry.runner.commands.repair.repair") - if run_post_upgrade: + if not no_migrations_to_run and run_post_upgrade: post_upgrade.send(sender=SiloMode.get_current_mode(), interactive=interactive) From ab1cfabf3abc32acef293d4c6f0c2c316f539fea Mon Sep 17 00:00:00 2001 From: Joshua Li Date: Thu, 20 Nov 2025 16:16:23 -0800 Subject: [PATCH 2/2] yeah probably just omit this --- src/sentry/runner/commands/upgrade.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/sentry/runner/commands/upgrade.py b/src/sentry/runner/commands/upgrade.py index 6239b99c6f3b74..2babd25cc7cdc3 100644 --- a/src/sentry/runner/commands/upgrade.py +++ b/src/sentry/runner/commands/upgrade.py @@ -65,8 +65,6 @@ def _upgrade( _check_big_ints() _check_history() - no_migrations_to_run = True - for db_conn in settings.DATABASES.keys(): # Run migrations on all non-read replica connections. # This is used for sentry.io as our production database runs on multiple hosts. @@ -81,8 +79,6 @@ def _upgrade( click.echo(f"No migrations to run for {db_conn}") continue - no_migrations_to_run = False - click.echo(f"Running migrations for {db_conn}") dj_call_command( "migrate", @@ -112,7 +108,7 @@ def _upgrade( call_command("sentry.runner.commands.repair.repair") - if not no_migrations_to_run and run_post_upgrade: + if run_post_upgrade: post_upgrade.send(sender=SiloMode.get_current_mode(), interactive=interactive)