From 9f5e043f0b6b8e9761ed1b08982dc6263dfa18fe Mon Sep 17 00:00:00 2001 From: amoghjalan Date: Tue, 23 Apr 2024 12:54:19 +0530 Subject: [PATCH 1/2] Remove org initialization in sync app --- backend/analytics_server/sync_app.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/backend/analytics_server/sync_app.py b/backend/analytics_server/sync_app.py index cc6c300a4..c67117577 100644 --- a/backend/analytics_server/sync_app.py +++ b/backend/analytics_server/sync_app.py @@ -10,8 +10,6 @@ from mhq.api.hello import app as core_api from mhq.api.sync import app as sync_api -from mhq.store.initialise_db import initialize_database - SYNC_SERVER_PORT = getenv("SYNC_SERVER_PORT") app = Flask(__name__) @@ -20,7 +18,6 @@ app.register_blueprint(sync_api) configure_db_with_app(app) -initialize_database(app) if __name__ == "__main__": app.run(port=SYNC_SERVER_PORT) From ccc5bdf6b9dd28ef08b1658a4f9915c6492ab6e6 Mon Sep 17 00:00:00 2001 From: amoghjalan Date: Tue, 23 Apr 2024 12:55:50 +0530 Subject: [PATCH 2/2] Add check if default org exists Use redis lock in sync --- .../analytics_server/mhq/service/sync_data.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/backend/analytics_server/mhq/service/sync_data.py b/backend/analytics_server/mhq/service/sync_data.py index 9a016d3f4..a629aeaeb 100644 --- a/backend/analytics_server/mhq/service/sync_data.py +++ b/backend/analytics_server/mhq/service/sync_data.py @@ -3,6 +3,7 @@ from mhq.service.merge_to_deploy_broker import process_merge_to_deploy_cache from mhq.service.query_validator import get_query_validator from mhq.service.workflows import sync_org_workflows +from mhq.utils.lock import get_redis_lock_service from mhq.utils.log import LOG sync_sequence = [ @@ -13,11 +14,8 @@ ] -def trigger_data_sync(): - default_org = get_query_validator().get_default_org() - org_id = str(default_org.id) +def trigger_data_sync(org_id: str): LOG.info(f"Starting data sync for org {org_id}") - for sync_func in sync_sequence: try: sync_func(org_id) @@ -31,4 +29,12 @@ def trigger_data_sync(): if __name__ == "__main__": - trigger_data_sync() + default_org = get_query_validator().get_default_org() + if not default_org: + raise Exception("Default org not found") + org_id = str(default_org.id) + with get_redis_lock_service().acquire_lock("{org}:" + f"{str(org_id)}:data_sync"): + try: + trigger_data_sync(org_id) + except Exception as e: + LOG.error(f"Error syncing data for org {org_id}: {str(e)}")