From 257edec1a76cc0e805b18186b12f8a7aa4586b0c Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Fri, 29 Mar 2024 12:58:34 -0400 Subject: [PATCH] Now with a new SQL check for ProgrammingError. This is related to multithreading usually. --- app/db_sql.py | 27 ++++++++++++++++++++++++++- app/routers/api_crud.py | 2 +- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/app/db_sql.py b/app/db_sql.py index 57210a3..9e27bbb 100644 --- a/app/db_sql.py +++ b/app/db_sql.py @@ -5,7 +5,7 @@ from app.config import settings from app.log import log, logging, logger_reset from sqlalchemy import create_engine, text, Time -from sqlalchemy.exc import IntegrityError, OperationalError +from sqlalchemy.exc import IntegrityError, OperationalError, ProgrammingError db_uri = settings.SQLALCHEMY_DB_URI @@ -962,6 +962,31 @@ def run_sql_select( else: log.info('Successfully executed the SQL on the second try.') pass + except ProgrammingError as e: + log.error('A programming error exception happened. This may be related to multithreading. It may also be related to a DB connection issue. Going to try again...') + log.exception('**** *** ** * ### BEGIN ### Programming Exception Happened: Trying again... * ** *** ****') + log.error('^^^^ ^^^ ^^ ^ ### END ### Programming Exception ^ ^^ ^^^ ^^^^') + log.error('SQL Alchemy DB URI:') + log.error(settings.SQLALCHEMY_DB_URI) + + sql_connect(current_db=db) + + log.info('Now trying the query again...') + try: + if data: + log.info('2x Executing with SQL statement and data...') + result = db.execute(sql, data) + else: + log.info('2x Executing with SQL statement only...') + result = db.execute(sql) + except Exception as e: + log.error('Tried again an exception was raised again. Not going to try again.') + log.exception('**** *** ** * ### BEGIN ### (2x) Second Exception Happened: Returning False * ** *** ****') + log.error('^^^^ ^^^ ^^ ^ ### END ### Exception ^ ^^ ^^^ ^^^^') + return False + else: + log.info('Successfully executed the SQL on the second try.') + pass except Exception as e: log.error('An unknown exception happened. Returning False.') log.exception('**** *** ** * ### BEGIN ### Exception Happened: Returning False * ** *** ****') diff --git a/app/routers/api_crud.py b/app/routers/api_crud.py index 9f82f96..29be641 100644 --- a/app/routers/api_crud.py +++ b/app/routers/api_crud.py @@ -566,7 +566,7 @@ async def patch_obj( return mk_resp(data=False, status_code=400, response=commons.response) # NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING - # time.sleep(2.5) # NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING + time.sleep(2.5) # NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING # NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING NOTE: WARNING debug_data = {}