From 2527cca64de07d2e4066741dc09f9a1ce8d6bcaf Mon Sep 17 00:00:00 2001 From: panish16 Date: Tue, 26 May 2026 16:38:46 -0700 Subject: [PATCH 1/3] fix: add pg8000 graceful shutdown on Cloud Run scale-down --- api/namex/__init__.py | 3 ++- services/namex-pay/src/namex_pay/__init__.py | 3 ++- services/solr-names-updater/src/solr_names_updater/__init__.py | 3 ++- solr-admin-app/solr_admin/__init__.py | 3 ++- solr-synonyms-api/synonyms/__init__.py | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/api/namex/__init__.py b/api/namex/__init__.py index 7788b15f7..1d119bce5 100644 --- a/api/namex/__init__.py +++ b/api/namex/__init__.py @@ -18,7 +18,7 @@ jwt = JwtManager() -from cloud_sql_connector import DBConfig, setup_search_path_event_listener +from cloud_sql_connector import DBConfig, setup_pg8000_close_event_listener, setup_search_path_event_listener from flask_cors import CORS from flask_migrate import Migrate, upgrade @@ -78,6 +78,7 @@ def create_app(run_mode=os.getenv('FLASK_ENV', 'production')): # noqa: B008 with app.app_context(): engine = db.engine setup_search_path_event_listener(engine, schema) + setup_pg8000_close_event_listener(engine) if run_mode == 'migration': Migrate(app, db) diff --git a/services/namex-pay/src/namex_pay/__init__.py b/services/namex-pay/src/namex_pay/__init__.py index 4ad852257..1dcbb7788 100644 --- a/services/namex-pay/src/namex_pay/__init__.py +++ b/services/namex-pay/src/namex_pay/__init__.py @@ -40,7 +40,7 @@ from flask import Flask from flask_restx import Api -from namex import DBConfig, setup_search_path_event_listener +from namex import DBConfig, setup_pg8000_close_event_listener, setup_search_path_event_listener from namex.models import db from namex.resources.ops import api as nr_ops from namex.services import queue @@ -75,6 +75,7 @@ def create_app(environment: Config = ProdConfig, **kwargs) -> Flask: with app.app_context(): engine = db.engine setup_search_path_event_listener(engine, schema) + setup_pg8000_close_event_listener(engine) queue.init_app(app) register_endpoints(app) diff --git a/services/solr-names-updater/src/solr_names_updater/__init__.py b/services/solr-names-updater/src/solr_names_updater/__init__.py index 2b84834f3..2759e3bff 100644 --- a/services/solr-names-updater/src/solr_names_updater/__init__.py +++ b/services/solr-names-updater/src/solr_names_updater/__init__.py @@ -40,7 +40,7 @@ from flask import Flask from flask_restx import Api -from namex import DBConfig, setup_search_path_event_listener +from namex import DBConfig, setup_pg8000_close_event_listener, setup_search_path_event_listener from namex.models import db from namex.resources.ops import api as nr_ops from namex.services import queue @@ -73,6 +73,7 @@ def create_app(environment: Config = ProdConfig, **kwargs) -> Flask: with app.app_context(): engine = db.engine setup_search_path_event_listener(engine, schema) + setup_pg8000_close_event_listener(engine) queue.init_app(app) register_endpoints(app) diff --git a/solr-admin-app/solr_admin/__init__.py b/solr-admin-app/solr_admin/__init__.py index 143d6523d..4798ac7a6 100644 --- a/solr-admin-app/solr_admin/__init__.py +++ b/solr-admin-app/solr_admin/__init__.py @@ -2,7 +2,7 @@ import flask import flask_admin -from cloud_sql_connector import DBConfig, setup_search_path_event_listener +from cloud_sql_connector import DBConfig, setup_pg8000_close_event_listener, setup_search_path_event_listener from sqlalchemy.orm import scoped_session, sessionmaker from structured_logging import StructuredLogging @@ -60,6 +60,7 @@ def create_application(run_mode=os.getenv('FLASK_ENV', 'production')): with application.app_context(): engine = models.db.engine setup_search_path_event_listener(engine, schema) + setup_pg8000_close_event_listener(engine) # The root page - point the users to the admin interface. @application.route('/') diff --git a/solr-synonyms-api/synonyms/__init__.py b/solr-synonyms-api/synonyms/__init__.py index 27a7fdcc7..1f3429251 100644 --- a/solr-synonyms-api/synonyms/__init__.py +++ b/solr-synonyms-api/synonyms/__init__.py @@ -7,7 +7,7 @@ import flask from flask import Flask from flask_jwt_oidc import JwtManager -from namex import DBConfig, setup_search_path_event_listener +from namex import DBConfig, setup_pg8000_close_event_listener, setup_search_path_event_listener from structured_logging import StructuredLogging from config import CONFIGURATION @@ -56,6 +56,7 @@ def create_app(run_mode=None): with app.app_context(): engine = db.engine setup_search_path_event_listener(engine, schema) + setup_pg8000_close_event_listener(engine) # Initialize Marshmallow with handling for SQLAlchemy auto-detection issues try: From 8757f91a08fd5a98101d679a5b4b21987db29d1e Mon Sep 17 00:00:00 2001 From: panish16 Date: Wed, 27 May 2026 11:48:03 -0700 Subject: [PATCH 2/3] fix: bump cloud-sql-connector lock to v0.2.3 for pg8000 graceful shutdown --- api/poetry.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/poetry.lock b/api/poetry.lock index 79b37e81c..45442ddc6 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -350,7 +350,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cloud-sql-connector" -version = "0.2.0" +version = "0.2.3" description = "Cloud SQL connection utilities for database connectivity with authentication and schema management" optional = false python-versions = "^3.12" @@ -367,7 +367,7 @@ sqlalchemy = "^2.0.0" type = "git" url = "https://github.com/bcgov/sbc-connect-common.git" reference = "main" -resolved_reference = "87012397b3ca62e15ffa542214d80f2d2ae7e72d" +resolved_reference = "b83281702031386f92a0f3d27577e15b842b769b" subdirectory = "python/cloud-sql-connector" [[package]] From 2143d734c307d146e77d5e123d198f9a1e3bcc8f Mon Sep 17 00:00:00 2001 From: panish16 Date: Wed, 27 May 2026 12:03:09 -0700 Subject: [PATCH 3/3] fix: correct cloud-sql-connector lock to v0.2.3 with correct remote hash --- api/poetry.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/poetry.lock b/api/poetry.lock index 45442ddc6..d1b491429 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -367,7 +367,7 @@ sqlalchemy = "^2.0.0" type = "git" url = "https://github.com/bcgov/sbc-connect-common.git" reference = "main" -resolved_reference = "b83281702031386f92a0f3d27577e15b842b769b" +resolved_reference = "9a760cf5ea31d3f95806c2dcac15ca9d9800df51" subdirectory = "python/cloud-sql-connector" [[package]]